
私は 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