0

以下に示すシェルスクリプトを作成しました

unicorn_cnt=$(ps -ef | grep -v grep | grep -c unicorn)
if (( $unicorn_cnt == 0 )); then
 echo "Unicorn Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi
delayed_job_cnt=$(ps -ef | grep -v grep | grep -c delayed_job)
if (( $delayed_job_cnt == 0 )); then
 echo "Delayed Job Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi
rake_cnt=$(ps -ef | grep -v grep | grep -c rake)
if (( $rake_cnt == 0 )); then
  echo "Convertion Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi

これは、プロセスが実行されているかどうかを確認するためのもので、そうでない場合は警告メールを送信します。私はシェルスクリプトにあまり詳しくありません。実行中に次のエラーが表示されます。

process.sh: 3: process.sh: 2: not found
process.sh: 7: process.sh: 0: not found
process.sh: 11: process.sh: 0: not found

私が部分的に理解しているいくつかの調査から、これは変数を作成する際のスペースの問題が原因です。わからない。そして、 sedreadなどのいくつかのソリューションを使用しようとしました。しかし、それでもエラーが表示されます。誰でも私を助けることができますか?

ありがとうございます。それでは、お元気で

4

3 に答える 3

1

ブラケットを使用する:

if [ "$unicorn_cnt" == 0 ]; then

または、次のように記述します。

if ! ps -ef | grep -q [u]nicorn; then
 echo "Unicorn Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi

つまり、「ユニコーンの ps -ef をチェックし、見つからない場合はこれを行う」ということです。

于 2013-02-04T10:31:55.407 に答える
0

上記のヒントから、私は自分の答えを見つけました。

unicorn_cnt=$(ps -ef | grep -v grep | grep -c unicorn)
if [ $unicorn_cnt -eq 0 ]; 
then
  echo "Unicorn Stopped" | mail -s "Alert - Unicorn" someone@somedomin.com
fi
delayed_job_cnt=$(ps -ef | grep -v grep | grep -c delayed_job)
if [ $delayed_job_cnt -eq 0 ]; 
then
  echo "Delayed Job Stopped" | mail -s "Alert - Delayed Job" someone@somedomin.com
fi
rake_cnt=$(ps -ef | grep -v grep | grep -c rake)
if [ $rake_cnt -eq 0 ]; 
then
  echo "Convertion Stopped" | mail -s "Alert - Convertion" someone@somedomin.com
fi

現在は正常に動作しており、cronjob と統合することもできます。

于 2013-02-04T10:56:47.453 に答える