使用 systemd 创建 service 文件是最规范可靠的方式,需在 /etc/systemd/system/ 下编写包含 [unit]、[service]、[install] 三段的标准 .service 文件,配置启动顺序、绝对路径执行、用户权限、重启策略及启用目标,并执行 daemon-reload、enable 和 start 完成部署。

直接用 systemd 创建 service 文件是最规范、最可靠的方式。它不是“包装”,而是让脚本真正成为系统认可的服务单元,支持启动控制、日志、依赖、自动重启等完整生命周期管理。
写一个标准的 .service 文件
在 /etc/systemd/system/ 下新建文件,例如 myscript.service,内容至少包含三段:
-
[Unit]:说明服务用途和启动顺序,可加
After=network.target表示等网络就绪后再启动 -
[Service]:核心配置项
•ExecStart=必须写绝对路径(如/home/user/myscript.sh),不能用~或./
•User=指定运行用户(如User=www-data),避免 root 权限滥用
•Type=simple(默认)或Type=forking(适用于后台 daemon)
• 加上Restart=on-failure和RestartSec=3,让崩溃后自动拉起 -
[Install]:定义启用行为,通常写
WantedBy=multi-user.target
确保脚本本身可执行且环境独立
脚本开头加上正确的 shebang(如 #!/bin/bash),并检查所有调用命令是否使用绝对路径(比如 /usr/bin/python3 而非 python3)。不要依赖当前工作目录或 shell 环境变量——systemd 启动时环境极简,家目录可能不可达,PATH 也很窄。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
建议在脚本内显式设置工作目录:cd /opt/myscript || exit 1
启用并验证服务
写完后必须执行:sudo systemctl daemon-reload
否则 enable 会报 “no such file or directory”。
然后启用开机自启:sudo systemctl enable myscript.service
立即启动测试:sudo systemctl start myscript.service
查看状态和实时日志:sudo systemctl status myscript.servicesudo journalctl -u myscript.service -f
别再用 rc.local 或 init.d
rc.local 执行太晚、无依赖、无日志、错误静默;/etc/init.d/ 在现代发行版(包括 Armbian、Ubuntu、CentOS Stream)中只是 systemd 的兼容层,功能受限、日志分散、不支持并行与自动恢复。systemd 是当前唯一推荐的标准路径。










