• ベストアンサー

シェルスクリプトについて

RedHat Linux v.7.1を常時接続で稼働しています。問題はコンピュータから長期に離れるときは携帯で時々アクセスして作動を確認しています。 どなたか、このサーバが止まったら自分の携帯にメールを送るとか、他のマシーンから時々Pingを打って作動を確認し、pingが返らないときは携帯にメールを送るようなshellスクリプトが在りましたら教えてください。 あるいは参考資料の在る場所など教えていただけませんでしょうか。 プログラムの経験は在りません。

質問者が選んだベストアンサー

  • ベストアンサー
noname#4147
noname#4147
回答No.1

こんなどでどうでしょうか? target あなたのマシンのIP interval チェックする間隔(分) mailto あなたのアドレス で、他のマシンで動かしてみてください。 ------------------------------------------------- #!/bin/sh target= interval= mailto= while [ "`ping -c 2 ${target:=127.0.0.1}`" ] do sleep ${interval:=30} done echo "No Echo-Reply !" | mail ${mailto:=root} ------------------------------------------------- 間違ってたらごめんなさい。

cincinnati
質問者

お礼

訂正を含めて2回ご回答を頂きました。早速試してみましたところ、sleepで一定時間おきにPingを実行することが出来ました。しかしながら該当するホストを停止しましてもechoのラインを実行しないようでした。おそらくuntilのコマンドに何らかの値、この場合0が入るとループから抜けてechoを実行するのでは無いかと想像しました。pingが通らない場合返ってくる返答はDestination Host Unreachableとなっておりますので、これで果たしてuntilに0を供給しているのか不明です。untilの機能と使用方法が解れば何とかなるような気がいたします。 いずれにせよ有り難うございました。

その他の回答 (2)

noname#4147
noname#4147
回答No.3

完成度の低いスクリプトで申し訳ありません。 >hostが動いているときはこのshellscriptが止まらずに、 >常に稼働している状態になります。 そうですね、定期的にチェックして、 pingがエラーになるとループを抜けてメールした後終了します。 >またモニター上にPingの結果が指定したintervalで表示されてしまいます。 >これを消す事は可能でしょうか。 ping -c 2 hostname.com を ping -c 2 hostname.com > /dev/null 2>&1 と書き換えると表示されなくなると思います。 >この場合のマシーンやネットに対する負荷は無視してもよろしいものなのでしょうか。 sleep中は問題ないでしょう。 pingも2つ送出するだけですので、マシンとネットワークの負荷も ほとんど無視できるかと思います。 >crontabで時間を決めて作動させる方法などがございますでしょうか 下記のスクリプトでしたら、cronの定期チェックに使えるかと思います。 ______________________________________________ #!/bin/sh ping -c 2 hostname.com > /dev/null 2>&1 if [ $? -ne 0 ] then echo The host is now down | mail my@address.net exit 1 fi ______________________________________________ >untilの中の-neの意味を教えていただけませんか。 「-ne」は「!=」(等しくない)という意味です。 $?には、直前のコマンドやプログラムの実行が正常に終了した場合には 「0」がセットされ、エラーだった場合は「1」等の数字がセットされます。 つまり、pingの実行が失敗した場合、「$?」が「0」ではなくなりますので、 「$? -ne 0」が真となり、untilループを抜けるという感じです。

cincinnati
質問者

お礼

Yosty様、有り難うございました。時間を見て試してみます。取り急ぎ お礼のみ一筆したためました。

noname#4147
noname#4147
回答No.2

申し訳ないです、下のはうまく動かないみたいです。 これで... ----------------------------------------------- #!/bin/sh target= interval= mailto= until [ $? -ne 0 ] do sleep ${interval:=30} ping -c 2 ${target:=127.0.0.1} done echo 'No Echo-Reply !' | mail ${mailto:=root} ______________________________________________

cincinnati
質問者

お礼

早速有り難うございました。近い内に試してみます。

cincinnati
質問者

補足

頂きました情報を元に、見やすさと簡便のために、下記のように書き換えました。その結果をお知らせいたします。 #!/bin/sh until [ $? -ne 0 ] do sleep 600 ping -c 2 hostname.com done echo 'The host is now down' | mail my@address.net としてみましたところ、hostが確かに止まりますと、メールを送ってくれるのですが、hostが動いているときはこのshellscriptが止まらずに、常に稼働している状態になります。またモニター上にPingの結果が指定したintervalで表示されてしまいます。これを消す事は可能でしょうか。この場合のマシーンやネットに対する負荷は無視してもよろしいものなのでしょうか。それともcrontabで時間を決めて作動させる方法などがございますでしょうか また、untilの中の-neの意味を教えていただけませんか。これに当たると130が出力されるようですが。 重ね重ね御世話になります。

関連するQ&A