私の使命は、職場の特定のサーバーに障害が発生した場合にすぐに知ることができるようにすることです。私がそこにいなかったので(実際には誰もいなかったので)私のホームルーターLinuxボックス(Alpine Linuxを実行)で実行して、動作しているCiscoルーターに接続し、サーバーにpingを送信するスクリプトを作成しました(サーバーが直接接続されていないため) 。インターネット接続可能)。
私はCiscoルータにパスワードなしのRSAを設定していますが、これは私のスクリプトの主な部分です。
ssh user@work_router 'ping Server_IP' 2>/dev/null | grep -q ' 0 percent'
if [[ $? == 0 ]]
then
#It's not responding
else
#Everything is fine
fi
手動で実行するとスクリプトは正常に動作しますが、cronにスクリプトを実行するように指示すると動作が停止します。 ssh出力をログファイルにリダイレクトし、これが問題であることがわかりました。
手動で実行すると、コマンドは次のように出力されます。
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to SERVER_IP, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
cronが実行されると、出力は次のようになります。
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to SERVER_IP, timeout is 2 seconds:
!
pingまたはsshが実行が完了する前に中断される理由はありますか?
編集する:
「ssh -v -v」を使用して端末でスクリプトを実行します。
cronを使用してスクリプトを実行するには、 'ssh -v -v'を使用してください。
2つのファイル間のvimdiffを見ると、いくつかの興味深い違いが見えますが、私の能力の範囲を超えています。何が起こったのか教えてくれる人はいますか?