OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.155594
  • 閲覧数225
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 87% (491/560)

RedHat Linux v.7.1を常時接続で稼働しています。問題はコンピュータから長期に離れるときは携帯で時々アクセスして作動を確認しています。

どなたか、このサーバが止まったら自分の携帯にメールを送るとか、他のマシーンから時々Pingを打って作動を確認し、pingが返らないときは携帯にメールを送るようなshellスクリプトが在りましたら教えてください。

あるいは参考資料の在る場所など教えていただけませんでしょうか。

プログラムの経験は在りません。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答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

お礼率 87% (491/560)

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

その他の回答 (全2件)

  • 回答No.2

申し訳ないです、下のはうまく動かないみたいです。 これで... ----------------------------------------------- #!/bin/sh target= interval= mailto= until [ $? -ne 0 ] do sleep ${interval:=30} ping -c 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

お礼率 87% (491/560)

頂きました情報を元に、見やすさと簡便のために、下記のように書き換えました。その結果をお知らせいたします。
#!/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が出力されるようですが。
重ね重ね御世話になります。
投稿日時 - 2001-10-25 18:40:48
お礼コメント
cincinnati

お礼率 87% (491/560)

早速有り難うございました。近い内に試してみます。
投稿日時 - 2001-10-23 09:16:19


  • 回答No.3

完成度の低いスクリプトで申し訳ありません。 >hostが動いているときはこのshellscriptが止まらずに、 >常に稼働している状態になります。 そうですね、定期的にチェックして、 pingがエラーになるとループを抜けてメールした後終了します。 >またモニター上にPingの結果が指定したintervalで表示されてしまいます。 >これを消す事は可能でしょ ...続きを読む
完成度の低いスクリプトで申し訳ありません。

>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

お礼率 87% (491/560)

Yosty様、有り難うございました。時間を見て試してみます。取り急ぎ お礼のみ一筆したためました。
投稿日時 - 2001-10-26 13:31:59
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ