
次のシェルスクリプトを準備しています。
#!/bin/bash
(echo open mailserver.nowhere.local 25; sleep 1; echo EHLO; echo quit)\
| telnet | grep "?Invalid command"
if [ $? -eq 1 ]; then
if [ -r /tmp/sendmail_stopped ]; then
rm /tmp/sendmail_stopped
/etc/init.d/sendmail start
mail -s "sendmail has started back up." [email protected] < /dev/null
else
echo "sendmail OK"
fi
else
if [ ! -r /tmp/sendmail_stopped ]; then
touch /tmp/sendmail_stopped
/etc/init.d/sendmail stop
else
echo "sendmail still not OK"
fi
fi
このように
*/5 * * * * root /home/amr/bin/sendmail_alive.sh 2>&1 > /tmp/sendmail_alive.log
しかし、依然として司令部から電子メールを受け取りますtelnet
。
私はコマンドの出力を含む電子メールを受信しないようにいくつかの方法を試しましたtelnet
。
Connection closed by foreign host.
何が間違っているのかわかりません。どんな提案でも大変感謝します。
答え1
一般的な間違い、間違ったリダイレクト順序、次を試してください。
… sendmail_alive.sh >/tmp/sendmail_alive.log 2>&1
仕組みは次のとおりです。
- ファイル記述子標準出力
/tmp/sendmail_alive.log
/tmp/sendmail_alive.log
ファイル記述子 stderr を stdout() 値として
コマンドに従って、最初に stderr を元の stdout として指定し、次に「外部ホストによって接続がクローズされました」という stderr メッセージが表示されます。結果があります。