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。