如何准确知道 Linux 服务何时变为非活动状态?

如何准确知道 Linux 服务何时变为非活动状态?

我正在使用 RHEL 7,并且想知道特定服务“myservice.service”是否以及何时变得不活动。不幸的是,使用:

journalctl -u myservice.service

似乎只显示我实际服务的输出,但在某些时候,输出停止了,我不知道这是否是由于:

  1. 服务被关闭,或者
  2. 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 是一个守护进程的示例,它在空闲期后干净地退出,仅记录为​​审核消息。

相关内容