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