Linuxサービスが無効になるタイミングを正確に知る方法は?

Linuxサービスが無効になるタイミングを正確に知る方法は?

私はRHEL 7を使用しており、特定のサービス「myservice.service」が無効になっているかどうかを知りたいです。残念ながら、以下を使用して:

journalctl -u myservice.service

実際のサービスの出力のみを表示しているようですが、ある時点で出力が停止した場合、これが原因かどうかはわかりません。

  1. サービスが終了したか
  2. systemdはまだサービスがアクティブであると考えていますが、基本的なコードの問題のため、実際のプロセス自体はもはや出力を生成しません。

デフォルトでは、systemctlステータスイベントログを取得する方法はありますか?

答え1

詳細については、システムログを確認してください。

Red Hatの場合:

/var/log/messages 

Debian ベースのディストリビューションの場合:

/var/log/syslog

また、特定のサービスのログを見つける必要があります。次のようになります。

/var/log/<yourservice>.log

これらのログはすべて循環するため、.log.1と.log.x.gzで以前の情報を見つけることができます(これらのログを圧縮するか、zlessまたはviを使用する必要があります)。

良い検索

答え2

Linuxサービスが無効になるタイミングを正確に知る方法は?

systemdは、サービスが状態0で終了し、「非アクティブ(死)」状態に入ったときに記録しないようです。これは、サービスが失敗した場合、開始または停止したときの移行とは異なります。

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に表示される傾向があるアクションです。サービス:プロセスがメインで終了しました。コード=終了、ステータス= 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 は、アイドル期間後に完全に終了し、監査メッセージとしてのみ記録されるデーモンの例です。

関連情報