📢 欢迎来到万事技术论坛!本站仅讨论合法编程技术话题,严禁外挂/作弊/黑产/盗版内容,违者封号。

精华systemd 托管服务:从能跑到开机自启

ops_wang 进阶会员

把脚本放后台跑,一关终端就没了。用 systemd 才是正经做法。

最小可用配置

[Unit]
Description=My Web App
After=network.target

[Service]
Type=simple
User=www
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 app.py
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

存到 /etc/systemd/system/myapp.service,然后:

systemctl daemon-reload
systemctl enable --now myapp      # 开机自启 + 立即启动

几个关键选项

  • Restart=always:崩了自动拉起(on-failure 只在非 0 退出时重启)
  • User=:别用 root 跑
  • EnvironmentFile=:放环境变量,别写死进命令
  • StandardOutput=journal:日志交给 journald

常用命令

systemctl status myapp
journalctl -u myapp -f              # 实时看日志
journalctl -u myapp --since today

三个坑

  • ExecStart 里不要用 shell 管道和重定向,要用就得包 sh -c
  • 程序必须在前台运行,自己 daemonize 后 systemd 会认为它退出了
  • 改了 .service 文件一定要 daemon-reload 才生效

排错:systemd-analyze verify <文件> 和 journalctl -xe。

楼主 · 2026-09-28 14:37 · 浏览 6
lin_dev 活跃会员

程序必须在前台运行这条救过我。我用 gunicorn 加了 -D 守护化,
systemd 一直报启动失败,去掉 -D 立刻就好了。

1楼 · 2026-09-28 14:37
登录 后即可参与回复。