systemd 服务管理速记

让程序开机自启、挂了自拉

用 nohup 把程序扔后台是最常见的坏习惯:机器一重启全没,进程挂了没人管,日志还不知道飞哪去了。正经做法是给每个程序写一个 systemd unit,我管的监控探针、面板服务全是这么跑的。

一个最小可用的 unit

  • [Unit] 写 Description 和 After=network.target;
  • [Service] 写 ExecStart(绝对路径)、Restart=always、RestartSec=3,想用低权限用户跑就加 User=;
  • [Install] 写 WantedBy=multi-user.target,这样 enable 之后才能开机自启。

文件放在 /etc/systemd/system/名字.service,改完先 systemctl daemon-reload 再 enable --now,顺序错了会纳闷为什么改动不生效。

日常四件套

  • 看状态:systemctl status 名字,重点看 active 状态和最后几行日志;
  • 看日志:journalctl -u 名字 -f 实时跟,排障第一站;
  • 改配置:改完 unit 要 daemon-reload,改程序自己的配置文件一般 restart 就够;
  • 查自启:systemctl is-enabled 名字,别信“上次好像设过”。

一条经验

服务起不来时,先看 journal 的报错原文再动手。十次有八次是路径写错、权限不对或端口被占这种低级问题,日志里都写得清清楚楚。凭感觉乱改配置,往往把一个小问题滚成三个。

← 返回笔记列表