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

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式