スクリプト:
#!/bin/bash
kafka=`ps -ef | grep 'kafka' | grep -v grep | wc -l`
echo $kafka
if [ $kafka<3 ]
then
echo "Hi Support Team,
Kafka is down on QA/Dev server $hostname .Please take immediate action
Regards,
Application Support Team"| mailx -s "Kafka down on QA/Dev server" [email protected]
fi
出力:
-bash-4.2$ ./mail.sh
2
./mail.sh: line 4: 3: No such file or directory
ベストアンサー1
引用符のない<
演算子は、シェルのリダイレクト演算子です。このエラーは、シェルがというファイルからリダイレクトしようとしていることを示します3
。 2つの整数を比較するためにそれを使用したいと思うかもしれません-lt
。
代替実装は次のとおりです。
#!/bin/sh
if ! pkill -0 kafka; then
mail -s 'Kafka down on QA/Dev server' [email protected] <<END
Hi Support Team,
Kafka is down on QA/Dev server $hostname.
Please take immediate action
Regards,
Application Support Team
END
fi
pkill
上記のスクリプトは、各プロセスに「ゼロシグナル」を送信するために使用されますkafka
(コマンド名だけでなく、コマンドライン全体pkill -0 -f kafka
から部分文字列を取得するために使用されます)。kafka
そのようなプロセスがないと、pkill
ゼロ以外の終了状態で終了し、電子メールの送信がトリガされます。 「ゼロ信号」は、プロセスが存在し、プロセスに何の影響も及ぼさないことをテストするために使用されます。
または、プロセス数を計算kafka
して3つ未満のときに電子メールをトリガーするには、次の手順を実行します。
#!/bin/sh
if [ "$( pgrep kafka | wc -l )" -lt 3 ]; then
mail -s 'Kafka down on QA/Dev server' [email protected] <<END
Hi Support Team,
Kafka is down on QA/Dev server $hostname.
Please take immediate action
Regards,
Application Support Team
END
fi
このpgrep
呼び出しは、指定されたパターンに一致するすべてのプロセス名のプロセスIDを1行に1つずつ印刷します。コマンド名だけでなく、コマンドライン全体から部分文字列を取得pgrep -f kafka
するために使用されます。kafka
上記の両方のスクリプトは変数がhostname
設定され、スクリプトの外部にエクスポートされたと仮定します。$(hostname)
を使用して、ここで説明されているユーティリティを$hostname
呼び出すことができます。hostname