用 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 的报错原文再动手。十次有八次是路径写错、权限不对或端口被占这种低级问题,日志里都写得清清楚楚。凭感觉乱改配置,往往把一个小问题滚成三个。