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的身份运行。

相关推荐
xflySnail36 分钟前
nas服务域名高速访问-DNS+ESA
运维·服务器·esa·无端口访问
赵民勇7 小时前
Linux/Unix中install命令全面用法解析
linux·shell
苏宸啊8 小时前
Linux指令篇(一)
linux·运维·服务器
睡不醒的猪儿8 小时前
nginx常见的优化配置
运维·nginx
我要升天!9 小时前
Linux中《网络基础》
linux·运维·网络
国强_dev9 小时前
在数据库开发和运维中的“错误信息误导(Red Herring)”
运维·adb·数据库开发
安科瑞刘鸿鹏179 小时前
工业自动化系统中抗晃电保护的协同控制研究
运维·网络·嵌入式硬件·物联网
ZStack开发者社区9 小时前
ZStack Cloud 5.5.0正式发布
运维·服务器·网络
草莓熊Lotso9 小时前
脉脉独家【AI创作者xAMA】|当豆包手机遭遇“全网封杀”:AI学会操作手机,我们的饭碗还保得住吗?
运维·开发语言·人工智能·智能手机·脉脉
鸽芷咕9 小时前
【2025年度总结】时光知味,三载同行:落笔皆是沉淀,前行自有光芒
linux·c++·人工智能·2025年度总结