GNU/Linux >> Linux の 問題 >  >> Linux

サービスがスクリプトで実行されているかどうかをテストする「適切な」方法は?

私の問題:

bashスクリプトを作成していて、その中で特定のサービスが実行されているかどうかを確認したいと思います。

$ service [service_name] statusを使用して、これを手動で行う方法を知っています。 。

しかし(特にsystemdに移行してから)、解析するのが少し面倒な大量のテキストを印刷します。簡単な出力または確認できる戻り値を持つスクリプト用に作成されたコマンドがあると思いました。

しかし、グーグルで回ると、「ああ、ps aux | grep -v grep | grep [service_name] " 結果。それはベストプラクティスではありませんね。そのコマンドの別のインスタンスが実行されているが、SysV initスクリプトによって開始されたものではない場合はどうなりますか?

それとも、黙って小さなpgrepで手を汚す必要がありますか?

承認された回答:

systemctl is-activeがあります このためのサブコマンド:

systemctl is-active --quiet service

serviceの場合、ステータスはゼロで終了します はアクティブで、それ以外の場合はゼロ以外であるため、スクリプトに最適です:

systemctl is-active --quiet service && echo Service is running

--quietを省略した場合 また、現在のステータスを標準出力に出力します。

don_crisstiが指摘しているように、サービスを提供するために何も実行されていなくても、一部のユニットはアクティブになる可能性があります。「RemainAfterExit」とマークされたユニットは、正常に終了するとアクティブと見なされます。デーモンを必要としないサービスを提供するという考え方です。 ( それらはシステムのいくつかの側面を構成します)。ただし、デーモンを含むユニットは、デーモンがまだ実行されている場合にのみアクティブになります。


Linux
  1. SSH速度テストを確認する簡単な方法

  2. ソフトウェアがインストールされているかどうかを(スクリプトから)検出する最良の方法は?

  3. $の意味は?シェルスクリプトでは?

  1. Linuxで実行中のサービスを確認する

  2. Linux OS サービス「scsi_reserve」

  3. PHP スクリプトをテストする方法

  1. Bash スクリプトのインスタンスが 1 つだけ実行されるようにする最善の方法は何ですか?

  2. サービスとしての Ruby スクリプト

  3. シェルで最後に実行されたコマンドの実行時間を見つける方法はありますか?