systemd 服务管理:启动、开机自启与查看日志
用 systemctl 和 journalctl 管理服务器上的服务:启动停止、设置开机自启、排查日志,并学会写一个最简单的服务单元。
现在主流的 Linux 发行版(Ubuntu、Debian、CentOS 等)都用 systemd 来管理后台服务。掌握 systemctl 和 journalctl 这两条命令,你就能启动、停止、开机自启和排查几乎所有服务。
基本操作:启动、停止、重启
以 Nginx 为例(把 nginx 换成你的服务名即可)。这些操作会改动系统,通常需要 sudo。
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx # 重启(停止后再启动)
sudo systemctl reload nginx # 重载配置,不中断连接(部分服务支持)
改完配置文件后,优先用 reload;reload 不支持时再用 restart。
查看状态
systemctl status nginx
输出里重点看这几行:Active: active (running) 表示正在运行;Loaded 那行末尾的 enabled/disabled 表示是否开机自启;底部还会附带最近几条日志,排错很方便。查看状态一般不需要 sudo。
开机自启:enable 与 disable
start 只是这一次启动,重启服务器后并不会自动拉起。要让服务开机自动运行,用 enable:
sudo systemctl enable nginx # 设置开机自启
sudo systemctl enable --now nginx # 开机自启 + 立即启动
sudo systemctl disable nginx # 取消开机自启
systemctl is-enabled nginx # 查询是否已设为自启
记住:enable 管"开机要不要启动",start 管"现在启不启动",两者互相独立。
查看日志:journalctl
systemd 统一收集服务日志,用 journalctl 查看:
journalctl -u nginx # 查看该服务全部日志
journalctl -u nginx -n 50 # 最近 50 行
journalctl -u nginx -f # 实时跟踪(类似 tail -f)
journalctl -u nginx --since today # 今天的日志
journalctl -u nginx -p err # 只看错误级别
服务起不来时,先 status 看概况,再用 journalctl -u <服务> -n 50 翻最近日志,原因基本就在里面。
写一个最简单的服务单元
想让自己的程序也交给 systemd 托管,在 /etc/systemd/system/ 下建一个 .service 文件,例如 myapp.service:
[Unit]
Description=My App
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=on-failure
User=www-data
[Install]
WantedBy=multi-user.target
ExecStart 用绝对路径;Restart=on-failure 让程序崩溃后自动拉起。改动单元文件后必须重新加载配置,再启用:
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
小结
- 一次性控制:start / stop / restart / reload。
- 看状态用 status,看日志用 journalctl -u <服务>。
- 开机自启用 enable,取消用 disable,和当前是否运行互不影响。
- 自定义服务写好 .service 后,记得先 daemon-reload 再 enable --now。