プロセスが2時間以上実行されると、Redhat Linuxで電子メールを送信するシェルスクリプトを作成しようとします。これは私のスクリプトです。
#!/bin/sh
RESULT=find /proc -maxdepth 1 -user gen17 -type d -mmin +120 | wc -l;
if [ "$RESULT -ge 1" ];
then
find /proc -maxdepth 1 -user gen17 -type d -mmin +120 -exec basename {} \; | mail -s 'process running more than 2 hours' <myemail>
fi
echo "now sleeping for 2 mins"
sleep 120
done
私によると、結果が1以上の場合にのみEメールを送信する必要がありますが、値が0の場合はEメールを送信します。
答え1
コードに問題があるようです。まず、コマンドの出力を文字列として保存するには、$()
次の構文を使用してコマンドを囲むことができます。
RESULT=$(find /proc -maxdepth 1 -user gen17 -type d -mmin +120 | wc -l)
if
次に、あなたの声明が間違っているようです。すべての内容を引用符で囲むと文字列として扱われます(この場合は常に実際の文として扱われます)。私はこの効果があると思います:
if [ $RESULT -ge 1 ]
または、次のことを試している可能性があります。
if [ "$RESULT" -ge "1" ]
直接テストしなくても、この場合は両方とも機能すると思います。
答え2
あなたの設定は、$RESULT
値とリテラルテキストを含む単一の文字列です-ge 1
。次に、暗黙的に長さがゼロであることを確認します。文字列の長さはゼロではないため、テストは1を返します。
[ "$RESULT -ge 1" ]
私の考えにあなたに必要なのはこれです。
[ "$RESULT" -gt 1 ]