很多自研脚本、二进制程序、Python/Java/Node服务,安装后不提供 systemd 配置,没法直接systemctl管理和开机自启。本文用最简流程,教你手写服务文件实现自启动。

一、两个目录一定要分清

  • /usr/lib/systemd/system/:系统/软件包默认配置,不要手动改,更新会覆盖
  • /etc/systemd/system/用户自定义服务目录,优先级更高,不会被覆盖,我们只写这里

二、服务文件固定三模块

所有 .service 通用结构,只改关键路径即可:

[Unit]    # 服务说明与启动顺序
[Service] # 核心运行参数
[Install] # 开机自启配置

三、最简可直接复制模板

以通用后端服务为例,新建 /etc/systemd/system/xxx.service,替换括号内容直接用:

[Unit]
Description=自定义业务服务
After=network.target

[Service]
WorkingDirectory=(你的程序所在目录)
ExecStart=(完整绝对路径启动命令)
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

常用场景示例(直接替换ExecStart)

  • Django/Gunicorn
ExecStart=/opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:8000 project.wsgi:application
  • Java jar
ExecStart=/usr/bin/java -jar /opt/app/app.jar
  • Python脚本
ExecStart=/usr/bin/python3 /opt/script/run.py

四、一条命令加载 + 标准管理流程

  1. 新增/修改配置后,必须重新加载
systemctl daemon-reload
  1. 常用管理命令
# 启动
systemctl start 服务名
# 查看状态&报错
systemctl status 服务名
# 设置开机自启
systemctl enable 服务名
# 重启
systemctl restart 服务名
# 停止
systemctl stop 服务名

五、快速排错一句话

启动失败直接看日志:

journalctl -u 服务名 -xe

常见问题:相对路径、权限不足、启动命令本身错误,先手动跑一遍ExecStart确认命令可执行。


最后用人话总结就是在/etc/systemd/system下,在服务.service写好固定的三段结构,改完执行 daemon-reload,再 start+enable即可。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:alixiixcom@163.com