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

相关推荐
t1987512812 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk816312 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
@游子13 小时前
内网渗透笔记-Day5
运维·服务器
晚风吹人醒.13 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
记得记得就15113 小时前
【Nginx 性能优化与防盗链】
运维·nginx·性能优化
Yawesh_best13 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
roman_日积跬步-终至千里13 小时前
【Docker】Docker Stop 后到底发生了什么?——从信号机制到优雅停机
运维·docker·容器
喵手14 小时前
云端智变:基于 DevUI 与 MateChat 打造下一代云原生智能运维中台实战教学!
运维·云原生·devui·matechat
Hard but lovely14 小时前
linux: pthread库的使用和理解
linux
小五传输14 小时前
常用的文件摆渡系统:让数据安全高效跨越网络界限
大数据·运维·安全