用 journalctl 排查服务启动失败

Cold 发布于 2020-12-03 77 次阅读 259 字 预计阅读时间: 1 分钟 Linux服务器


systemd 管理的服务启动失败,systemctl status 只给一行红字,详细信息在 journal 里。

常用命令

# 看某个服务的全部日志
journalctl -u nginx.service

# 看最近 100 行并持续输出
journalctl -u php-fpm.service -n 100 -f

# 看本次启动以来的日志
journalctl -u mysql.service -b

# 按时间范围
journalctl -u myservice --since "2020-12-03 10:00" --until "2020-12-03 11:00"

# 只看错误级别
journalctl -u myservice -p err

实战:PHP-FPM 起不来

systemctl status php-fpm
# Active: failed (Result: exit-code)

journalctl -u php-fpm -n 50 --no-pager

日志里看到:

ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use

端口被占了。查一下:

ss -lntp | grep 9000
# 发现有个旧的 php-fpm 进程没退干净
kill -9 
systemctl start php-fpm

日志太大怎么办

# 限制 journal 最大占用
journalctl --vacuum-size=500M
# 或按时间清理
journalctl --vacuum-time=7d

改 /etc/systemd/journald.conf 里的 SystemMaxUse 可以永久限制。

systemd 服务出问题,第一反应就是 journalctl -u xxx -n 100 --no-pager,比翻各种日志文件快。

和喜欢的一切在一起~
最后更新于 2020-12-03