`systemctl` コマンドの出力から `active (running)` をキャプチャする

`systemctl` コマンドの出力から `active (running)` をキャプチャする

現在、アクティブなサービス ( telegraf) がマシン上で実行されています。 からサービスが実行されているかどうかを最初に確認するいくつかの手順を自動化したいと考えていますshell script

systemctl status telegraf手動でサービスの状態を確認するコマンドを実行しています。出力は次のようになります。

telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
   Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-05-19 12:26:17 UTC; 3 weeks 5 days ago
     Docs: https://github.com/influxdata/telegraf
 Main PID: 1297 (telegraf)
    Tasks: 9 (limit: 49778)
   Memory: 106.3M
   CGroup: /system.slice/telegraf.service
           └─1297 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d

価値を捉えたいアクティブ(実行中)私のスクリプトでは、シェル スクリプトでそれを実行するにはどうすればよいですか?

ここに画像の説明を入力してください

答え1

コマンドの出力を解析することができますsystemctl status

ただし、サービスが実行中かどうかの情報を取得するより簡単な方法は、is-activeのサブコマンドを使用することですsystemctl。例:

user@host:~$ systemctl is-active postfix
active

サービスがアクティブでない場合、返される文字列は ですinactive

したがって、スクリプトでは、返される文字列 (アクティブまたは非アクティブ) を確認するか、上記のコマンドの戻りコードを確認することができます。サービスがアクティブな場合、コマンドは 0 を返し、そうでない場合は 0 以外の戻りコードで再実行されます。

ご挨拶:)

関連情報