最近使用Ubuntu,需要配置开机自启脚本,稍微研究了一下,感觉配置还是非常简单的。
本文使用的是systemd创建服务。
本文配置的是用户级的开机自启,需要登录用户才会执行自启。
创建systemd用户服务目录
1 | mkdir -p ~/.config/systemd/user |
📁 创建服务文件
1 | # mystartup.service 是你的服务文件名称 |
📔 服务文件内容如下
1 | [Unit] |
📌 配置说明
- Description:服务的简要描述
- After:定义此服务在什么之后启动
- ExecStart: 脚本的绝对路径(确保可执行)
- Restart: 服务退出后是否自动重启,常见值:no、on-failure、always
- WantedBy: 定义启用服务时链接到哪个 target,用户服务通常使用 default.target
更多配置项看文章末尾详细说明
🔓 确保脚本可执行
1 | # 你需要确保你的脚本权限如下 |
⚠️ 注意事项
如果你的运行脚本是python或其他需要指定运行环境的情况。你需要确保运行环境的权限也是可执行的。
举个 🌰
如果你的脚本是这样写的
/user/bin/python3 ~/python/main.py
你需要确认python3和main.py 的权限都是 -rwxrwxr-x,如果不是就通过chmod +x xxxx修改权限
🚀 运行脚本测试
1 | # 刷新服务列表 |
- 如果启动状态下有
Active: active (running)的字样,则表示服务启动成功。
如果启动失败也不要慌,可以通过以下命令查看日志。找出启动失败的原因
❗ 配置开机启动服务(重要)
1 | systemctl --user enable 服务文件名称 # 设置为登录时自动启动 |
❗❗❗ 检查user服务是否可以开机自启
1 | loginctl show-user $USER | grep Linger |
如果 Linger=no 就可以通过如下命令启动linger
1 | sudo loginctl enable-linger $USER |
🧾 service 配置项详解
[Unit] 区段:服务的元信息和依赖关系
| 配置项 | 说明 |
|---|---|
Description= |
服务的简要描述,显示在 systemctl status 或日志中 |
After= |
定义此服务在什么之后启动(如 network.target, default.target) |
Requires= |
如果这个服务依赖另一个服务,这里填写它。被依赖服务失败时本服务也会停止 |
Wants= |
类似 Requires,但被依赖服务失败时不会影响本服务 |
[Service] 区段:服务本体执行方式
| 配置项 | 说明 |
|---|---|
ExecStart= |
指定服务要执行的命令或脚本(必须是绝对路径) |
ExecStop= |
停止服务时执行的命令(可选) |
Restart= |
服务退出后是否自动重启,常见值:no、on-failure、always |
RestartSec= |
重启前等待的秒数(如 5s) |
WorkingDirectory= |
设置脚本执行的工作目录 |
Environment= |
设置环境变量,如:Environment="ENV_VAR=value" |
User= / Group= |
用户级服务通常不要设置这个,它运行于当前用户上下文中 |
Type= |
服务类型,常见的有:simple(默认)、oneshot、forking、notify |
📌 说明:
- Type=oneshot:用于脚本执行完就退出的服务(不驻留后台)
- Type=simple(默认):适合运行常驻脚本或程序
[Install] 区段:如何将此服务绑定到目标(target)
| 配置项 | 说明 |
|---|---|
WantedBy= |
定义启用服务时链接到哪个 target,用户服务通常使用 default.target |
RequiredBy= |
表示本服务是另一个 target 的强依赖(可选) |
✅ WantedBy=default.target 意味着这个服务会在用户登录 GUI 后启动。
如果对你有帮助可以关注本站哦!!!