追加読書

追加読書

プログラムでサービスの状態を確認するコードを書こうとしますが、サービス名のタイプミスにも強力です。私の考えでは、合理的なプログラムは次のような振る舞いと意味を持つべきです。

  • ユニット名を引数として使用します。
  • デバイスが見つかったら、サービスのステータスを印刷し、ステータス0(アクティブ、非アクティブなど)で終了します。
  • 単位が次の場合いいえ検出/ロードされた場合、エラーを印刷し、ゼロ以外の状態で終了します。

特に、以下はこの要件を満たしていません。

  • systemctl is-active servicename(デバイスがアクティブでない場合はゼロ以外の戻り状態で終了し、servicenameがロードされていない場合でも同じように動作します)
  • systemctl is-failed servicename(上記と同様の動作)
  • systemctl show servicename -pActiveState(servicenameがロードされていない場合、終了ステータスは0です)

これが最も近いようですが、タイプミスがあるかどうかsystemctl show servicename -pLoadState -pActiveState を確認するためにLoadState文字列を解析する必要があります。これは、この単純な操作に必要なものよりも複雑に見えます。

どんな提案がありますか?

ベストアンサー1

どんな提案がありますか?

システム化された人は、2014年以来まだ存在するバグを修正することをお勧めします。

マニュアルsystemctlには、systemdから呼び出される適切なLSBバージョン3終了ステータスが文書化されており、EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWNこの終了ステータスは次のとおりです。でも使用systemctl status存在しないサービスの場合、存在するが実行されていないサービスと区別します。

ただし、使用されていませんsystemctl is-active

追加読書

おすすめ記事