bash スクリプトでサービス ステータスを読み取る方法

bash スクリプトでサービス ステータスを読み取る方法

私は VPS 上の特定のサービスを監視するスクリプトを作成しました。そのサービス (clamd.amavisd) は予期せず停止していることが多く、そうなると私の電子メール サービスは事実上停止してしまいます。

スクリプトでは次の命令を使用します。

STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)

問題は、ターミナルから実行すると、スクリプトがその変数に何かを受け取ることです (私はそれをファイルにエコーして知っているので)。しかし、残念なことに、cron ジョブで実行すると、変数は空になります。

私が何か間違っているのは明らかです。私が考慮していない要素があるのでしょうか?

答え1

環境変数の最小限の部分を使用するため、実行しているものはすべてcron絶対パスを持っている必要がありますcron

   STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)

実際にスクリプト内で、必要な最も重要なPATHを設定することができます。

   PATH=/bin:/usr/local/sbin 

lsしかし、例えば、予想していたものが実際には悪意のあるハッカーのドロップだったとある日に気付くようなことがないように、常に絶対パスを使用してください。

スクリプトの冒頭で、そのようなものを使用することを指定します

   CAT='/bin/cat'
   LS='/bin/ls'

そしてそれを使って

  $LS -la /some/path
  $CAT /etc/passwd

関連情報