← 返回首页
Linux

用 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 之类降权,别让小工具拥有整个系统。

十行配置换来自启、守护、日志三件套,这买卖太划算了。