Ubuntu设置程序开机自启动:基于.service文件实现

在之前的一篇文章中,介绍了在ubuntu中基于.desktop文件实现程序开机自启动的方法

Ubuntu设置程序开机自启动:基于.desktop文件实现

但是上面这种方法只适合不需要root权限的程序自启动

在有的情况下,我们的程序需要以root身份来运行才能保证有足够的权限进行操作。这时候可以通过.service文件实现。但是这种方式也有一个缺点:就是如果程序带有GUI图形界面,启用该service服务时会失败。即这种方式虽然能满足以root身份自启动,但是却不能满足带GUI的程序以root身份自启动。(比如QT中的QCoreApplication可以使用该方式,QApplication不行)

一、操作步骤

1、创建一个systemd服务文件

bash 复制代码
touch myapp.service

在文件中添加以下内容

bash 复制代码
[Unit]
Description=My Program Service      #Description:服务的简短描述
After=network.target                #After:指定该服务需要在 network.target 启动后启动,通常适用于需要网络连接的程序

[Service]
ExecStart=/home/qing222/code/test_delete/build-untitled-unknown-Debug/untitled     #ExecStart:指定要运行的程序路径
User=root                           #指定该服务以 root 用户身份运行
Group=root                          #指定该服务使用 root 组
Restart=always                      #如果服务崩溃或退出,会自动重启该服务

[Install]
WantedBy=multi-user.target          #表示该服务将在系统启动进入多用户模式时自动启动

2、将systemd服务文件放在~/.config/systemd/user/目录下

这个目录用于用户级的服务文件,只会影响当前用户,而不会影响系统中的其他用户。如果希望服务对所有用户生效,可以放在/etc/systemd/system/目录下

3、重新加载 systemd 配置

bash 复制代码
sudo systemctl daemon-reload

4、启用服务(开机启动)

注意这里可能需要用到绝对路径,否则会被报找不到该service文件的错误

bash 复制代码
sudo systemctl enable ~/.config/systemd/user/myapp.service

使用 systemctl enable <service> 命令可以将服务设置为开机自启。此命令会创建一个符号链接,将服务单元文件链接到 /etc/systemd/system/multi-user.target.wants/ 目录中。

5、启动服务

bash 复制代码
sudo systemctl start myapp.service

6、查看服务状态

可以通过查看服务状态判断是否正常运行

bash 复制代码
sudo systemctl status myapp.service
bash 复制代码
qing222@qing222-virtual-machine:~/Desktop$ sudo systemctl status myapp.service
● myapp.service - My Program Service
     Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-11-05 01:36:44 CST; 3s ago
   Main PID: 2291 (untitled)
      Tasks: 1 (limit: 2213)
     Memory: 9.4M
        CPU: 34ms
     CGroup: /system.slice/myapp.service
             └─2291 /home/qing222/code/test_delete/build-untitled-unknown-Debug/untitled

11月 05 01:36:44 qing222-virtual-machine systemd[1]: Started My Program Service.
11月 05 01:36:45 qing222-virtual-machine untitled[2291]: aaa

7、禁用服务(禁止开机启动)

bash 复制代码
sudo systemctl disable ~/.config/systemd/user/myapp.service

测试结果:

在sudo systemctl enable ~/.config/systemd/user/myapp.service使程序开机自启动后,重启系统,通过sudo systemctl status myapp.service查看服务状态

可以看到服务在运行了。通过ps aux 可以看到程序是在以root的身份运行。

相关推荐
wdfk_prog14 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
七夜zippoe15 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥15 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿15 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘15 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy64816 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满16 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠17 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio17 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice17 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习