systemd:サービスが実行されていないことを確認する

systemd:サービスが実行されていないことを確認する

サービスが実行されていないことをスクリプトで確認するために、次のことを試みました。

systemctl is-active some.service

サービスが実行されていないか存在しない場合は、終了コード 3 とともに「inactive」を返します。

しかし、時には終了コード3で「不明」が返される場合、その説明はここにあります。https://bugzilla.redhat.com/show_bug.cgi?id=1073481

ステータスは、システム管理者がユニットを作成するより複雑な機能です。ガベージコレクタがそれを処理するまで、is-activeを介してステータスを確認できます。

したがって、デフォルトでsystemctl status some.serviceガベージコレクタなどを呼び出すと結果が変わるため、is-active信頼できません。

同じ議論に使用された提案

systemctl show some.service -p ActiveState

「司令部の安定性を約束する」。

ただし、あるシステムではUnit some.service could not be found.存在しないサービスに対してコード 1 を取得して終了し、別のシステムではActiveState=inactiveコード 0 を取得して終了します。

それでは、サービスが実行されていないことをどのように確実に確認できますか?

終了コードがゼロでない場合、またはActiveState = inactiveの場合、これは本当ですか?

ベストアンサー1

したがって、まずサービスの正確な名前を知る必要があります。場合によっては、サービス名がapacheでデーモン名がhttpdの場合があります。したがって、これを回避するには、サービスの正確な名前を知っておく必要があります。

systemctl list-unit-files

したがって、検索を改善するには、次のものを使用できますgrep

systemctl list-unit-files | grep "part_of_servicename_expected"

Ambigiusステータスhttpdとapacheの例

systemctl list-unit-files | grep -i "apache"

その後、結果が得られたら、次のことを行う必要があります。

systemctl status servicename.service

おすすめ記事