用 systemd 管理小服务,别再 nohup 挂后台了
nohup ./myapp & 是很多人的默认姿势。问题是一断电、一重启、进程一崩,服务就没了,还得自己登上服务器重新拉。
一个最小的 unit 文件
建 /etc/systemd/system/myapp.service:
[Unit]
Description=My small service
After=network.target
[Service]
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
然后三步上线:
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp
nohup 换成 systemd 能得到什么
开机自启:enable 一句话搞定,重启服务器不再需要 SSH 上去补一刀。
崩溃自动拉起:Restart=always + RestartSec=3,挂了 3 秒后自动回来,比任何守护脚本都省心。
日志免费送:journalctl -u myapp -f 直接看实时日志,不用再重定向到文件再担心文件越滚越大。
几个小坑
1. WorkingDirectory 一定要写,很多程序用相对路径读配置,不写就到处找不到文件。
2. 改了 unit 文件必须 daemon-reload,不然 systemd 用的还是旧定义。
3. 服务以 root 跑时加一行 User=www 之类降权,别让小工具拥有整个系统。
十行配置换来自启、守护、日志三件套,这买卖太划算了。