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

相关推荐
CtrlZ学习录3 小时前
笔记:现代操作系统:原理与实现(8)
linux·笔记·架构·开源
不会聊天真君6473 小时前
Linux命令-文件\文件夹、用户\用户组(Linux基础笔记第二期)
linux·笔记
领创工作室3 小时前
Linux基础指令-Linux学习笔记(1)
linux·笔记·学习
遇见火星3 小时前
CentOS 7 停更后如何配置 YUM 源?(Vault、EPEL、第三方镜像完整指南)
linux·运维·centos
码农阿豪3 小时前
金仓KES vs. 达梦DM:全面对比解析迁移、运维与授权成本
运维·数据库·国产
BS_Li3 小时前
【Linux系统编程】进程概念(三)进程状态
linux·运维·服务器
ejinxian4 小时前
Linux 虚拟化技术 KVM/ESXI/Docker
linux·运维·docker·qemu·openvz
z202305084 小时前
linux之arm SMMUv3 故障和错误(4)
linux·运维·arm开发
攒钱植发4 小时前
嵌入式Linux——解密 ARM 性能优化:LDR 未命中时,为何 STR 还能“插队”?
linux·arm开发·c++·性能优化