首先创建 /etc/systemd/system/mytask.service 文件,包含 [Unit]、[Service]、[Install] 三部分配置;然后执行 sudo systemctl daemon-reload 和 sudo systemctl enable mytask.service 以启用开机自启,可使用 sudo systemctl start mytask.service 立即启动;通过 sudo systemctl status mytask.service 查看状态,用 sudo journalctl -u mytask.service - f 排查日志;注意脚本需有执行权限、使用绝对路径,并根据依赖设置合适的 After 目标。

在 Linux 系统中,让某个任务或服务在开机时自动启动是常见的运维需求。现代 Linux 发行版大多使用 Systemd 作为默认的初始化系统,因此通过配置 Systemd 服务可以轻松实现程序或脚本的开机自启。下面介绍如何创建和管理一个 Systemd 服务来实现开机启动。
创建自定义 Systemd 服务文件
要让一个任务开机启动,首先需要创建一个对应的服务单元文件。服务文件通常放在 /etc/systemd/system/ 目录下,以 .service 为后缀。
例如,创建一个名为 mytask.service 的文件:
/etc/systemd/system/mytask.service
[Unit] Description=My Custom Startup Task After=network.target [Service] Type=simple User=myuser ExecStart=/path/to/your/script.sh Restart=on-failure [Install] WantedBy=multi-user.target
说明:
- Description:服务的描述信息
- After:定义服务启动时机,比如在网络就绪之后启动
- Type=simple:表示主进程由 ExecStart 直接启动
- User:指定运行该任务的用户
- ExecStart:实际要执行的命令或脚本路径
- Restart=on-failure:失败时重启,可选值包括 no、always、on-failure 等
- WantedBy=multi-user.target:表示在多用户模式下启用此服务
启用并启动服务
保存服务文件后,需要通知 systemd 重新加载配置,并启用该服务。
执行以下命令:
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl enable mytask.service
其中 enable 命令会创建一个符号链接,将服务注册到启动目标中,实现开机自启。
如果希望立即运行而不重启,可以手动启动:
sudo systemctl start mytask.service
查看服务状态与调试
可以通过以下命令检查服务运行状态:
sudo systemctl status mytask.service
如果服务启动失败,可用 journalctl 查看详细日志:
sudo journalctl -u mytask.service -f
这个命令会实时输出服务的日志,有助于排查脚本权限、路径错误或依赖问题。
注意事项
- 确保脚本具有可执行权限:chmod +x /path/to/your/script.sh
- 脚本中建议使用绝对路径调用命令和文件
- 若脚本依赖网络服务,确保 After=network.target 或更具体的如 After=network-online.target,并启用network-online.target 服务
- 避免使用交互式命令,Systemd 服务运行在无终端环境中
基本上就这些。只要写好服务文件并正确启用,你的任务就可以稳定地随系统启动了。不复杂但容易忽略细节,比如权限和路径问题,多用 status 和 journalctl 排查即可。