最近使用Ubuntu,需要配置开机自启脚本,稍微研究了一下,感觉配置还是非常简单的。
本文使用的是systemd创建服务。

本文配置的是用户级的开机自启,需要登录用户才会执行自启。

创建systemd用户服务目录

1
2
3
mkdir -p ~/.config/systemd/user
# 创建之前可以先看一下有没有
ls ~/.config/systemd/user

📁 创建服务文件

1
2
# mystartup.service 是你的服务文件名称
vim ~/.config/systemd/user/mystartup.service

📔 服务文件内容如下

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=My User Startup Script
After=default.target

[Service]
ExecStart=/home/yourname/scripts/startup.sh
Restart=on-failure
WorkingDirectory=workDir

[Install]
WantedBy=default.target

📌 配置说明

  • Description:服务的简要描述
  • After:定义此服务在什么之后启动
  • ExecStart: 脚本的绝对路径(确保可执行)
  • Restart: 服务退出后是否自动重启,常见值:no、on-failure、always
  • WantedBy: 定义启用服务时链接到哪个 target,用户服务通常使用 default.target

更多配置项看文章末尾详细说明

🔓 确保脚本可执行

1
2
3
4
# 你需要确保你的脚本权限如下
-rwxrwxr-x 1 xxxx xxxx 4101 x月 x xx:xx xxxx.sh
# 如果脚本权限不对需要修改脚本权限
chmod +x xxxx.sh

⚠️ 注意事项
如果你的运行脚本是python或其他需要指定运行环境的情况。你需要确保运行环境的权限也是可执行的。

举个 🌰

如果你的脚本是这样写的
/user/bin/python3 ~/python/main.py

你需要确认python3和main.py 的权限都是 -rwxrwxr-x,如果不是就通过chmod +x xxxx修改权限

🚀 运行脚本测试

1
2
3
4
5
6
# 刷新服务列表
systemctl --user deamon-reload
# 手动启动服务
systemctl --user start 服务文件名称
# 查看启动状态
systemctl --user status 服务文件名称
  • 如果启动状态下有Active: active (running)的字样,则表示服务启动成功。

如果启动失败也不要慌,可以通过以下命令查看日志。找出启动失败的原因

❗ 配置开机启动服务(重要)

1
systemctl --user enable 服务文件名称  # 设置为登录时自动启动

❗❗❗ 检查user服务是否可以开机自启

1
2
3
4
loginctl show-user $USER | grep Linger
# 结果示例
Linger=yes ✅ → 可以自启
Linger=no ❌ → 不会在开机或非图形登录时启动

如果 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= 服务退出后是否自动重启,常见值:noon-failurealways
RestartSec= 重启前等待的秒数(如 5s
WorkingDirectory= 设置脚本执行的工作目录
Environment= 设置环境变量,如:Environment="ENV_VAR=value"
User= / Group= 用户级服务通常不要设置这个,它运行于当前用户上下文中
Type= 服务类型,常见的有:simple(默认)、oneshotforkingnotify

📌 说明:

  • Type=oneshot:用于脚本执行完就退出的服务(不驻留后台)
  • Type=simple(默认):适合运行常驻脚本或程序
[Install] 区段:如何将此服务绑定到目标(target)
配置项 说明
WantedBy= 定义启用服务时链接到哪个 target,用户服务通常使用 default.target
RequiredBy= 表示本服务是另一个 target 的强依赖(可选)

✅ WantedBy=default.target 意味着这个服务会在用户登录 GUI 后启动。

如果对你有帮助可以关注本站哦!!!