![如何准确知道 Linux 服务何时变为非活动状态?](https://linux22.com/image/9720/%E5%A6%82%E4%BD%95%E5%87%86%E7%A1%AE%E7%9F%A5%E9%81%93%20Linux%20%E6%9C%8D%E5%8A%A1%E4%BD%95%E6%97%B6%E5%8F%98%E4%B8%BA%E9%9D%9E%E6%B4%BB%E5%8A%A8%E7%8A%B6%E6%80%81%EF%BC%9F.png)
我正在使用 RHEL 7,并且想知道特定服务“myservice.service”是否以及何时变得不活动。不幸的是,使用:
journalctl -u myservice.service
似乎只显示我实际服务的输出,但在某些时候,输出停止了,我不知道这是否是由于:
- 服务被关闭,或者
- systemd 仍然认为该服务处于活动状态,但由于底层代码的问题,实际进程本身不再生成输出
有什么方法可以基本上获取 systemctl 状态事件的日志吗?
答案1
您可以检查系统日志中的信息。
在红帽上:
/var/log/messages
在基于 Debian 的发行版上:
/var/log/syslog
您还应该查找特定服务的日志,它可能类似于
/var/log/<yourservice>.log
所有这些日志都会轮换,因此您可以在 .log.1 和 .log.x.gz 中找到较旧的信息(您必须将这些日志压缩,或使用 zless 或 vi)
很好的搜索
答案2
如何准确知道 Linux 服务何时变为非活动状态?
当服务以状态 0 退出并进入“非活动(死亡)”状态时,systemd 似乎不会记录 - 这与它失败、启动或停止时的转换不同:(。
在 Fedora 26 上,我收到类似 systemd[1]: Started OpenBSD Secure Shell server 的消息。 systemd[1]:已停止 OpenBSD Secure Shell 服务器。
当 sshd 以退出状态 0 退出时,systemd 不一定会记录...这是 ssh 和其他守护进程(如 apache)倾向于对 SIGTERM 执行的操作:(。SIGKILL 显示在 Journalctl -u: systemd[1]: ssh.service: Main 中进程退出,代码=已终止,状态=9/KILL。
但在 RHEL(如 Fedora)上,您可能启用了审核。这为我完成了工作
# journalctl --boot=-1 SYSLOG_IDENTIFIER=audit
...
Dec 30 13:51:38 localhost.localdomain audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=fprintd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
...
Dec 30 13:52:08 localhost.localdomain audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=fprintd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
fprintd 是一个守护进程的示例,它在空闲期后干净地退出,仅记录为审核消息。