• ベストアンサー

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

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

  • サーバのチェックのshellscript

    Linuxで稼働しているサーバのデーモン(dns, httpd, sendmail等)が正常に作動しているかどうか判定して、自分の携帯に作動していないことが判明したらメールを送付するようなshelscripの例などがどこかURLに公開されておりますでしょうか。前回pingを用いてサーバの稼働を確認する方法を教えていただきましたが、使用している安心感がかなりあります。各ソフトの稼働状態が自動で携帯に入るので在ればこれは究極の監視ツールになるのでは無いかと思います。Unix, Shellscript超初心者です。

  • SSH Secure Shell の設定のしかたについて

    Linux RedHat 9.0 と Windows XP との間で,ネットワーク越にいろいろとやりたいことがあるので,SSH Secure Shell をインストールしました.Linux の方は新たにインストールしたものです. hosts hosts.allow hosts.deny はそれぞれ分かる範囲で設定し(linuxの方は),同じネットワーク内につながっているウィンドウズマシンからSSH Secure Shellを使ってログインしようとしたのですがうまくいきません... linux の方から,当ウィンドウズマシンにipアドレスでpingをうつと応答はあるのですが,ホスト名を入れると応答がありません.また逆もしかりです.これは hosts hosts.allow hosts.deny の設定が間違っているということなのでしょうか? それともSSH Secure Shellの方の設定が間違っているのでしょうか? ただ,私自身,学外の別のサーバにはちゃんとアクセスできるように設定してあるぐらいなので,当linuxマシンへの接続の設定が間違っているようには思えないのですが... ウィルスソフトとしてインストールしているノートンが悪いのでしょうか?でもそれなら別のサーバにも接続できませんよね. よわっています.どなたかアドバイスをいただけないでしょうか? よろしくお願いします.

  • 指定時刻に携帯メールへ送信するスクリプトはできますか?

    PHPを勉強し始めまして、メールの送信はできるようになったのですが、「指定時刻に」送信する方法が分かりません。 shellスクリプトというもので時間指定ができると聞きまして、調べたのですが、Linuxのスクリプトとのことで、使えないようです。 (1)PHPのみで あるいは (2)PHPと他の言語をあわせてwindowsサーバー上で 動作する「指定時刻に送信する」スクリプトを教えていただけますでしょうか。 方向性、概念だけでも結構です。 宜しくお願い致します。

  • サーバーのOSが、Linux (Fedora Core 3)  で質問

    サーバーのOSが、Linux (Fedora Core 3) なのですが、そこへ、今まで稼動させていた CGIスクリプト(おそらく、RedHat Linux7,3 に 対応していたはず。)を、この新しいサーバーである Linux (Fedora Core 3) へ移動させたいのですが、 同じLinux系でも、ちょっと異なると思うのですが、 正常にCGIは機能しますでしょうか? また、正常に機能させるには、どうすればいいのでしょうか?

  • Pingコマンドが正しく動作しません

    RedHat7 インターネットとサーバーとして、インターネットに 繋がっているのは確認できているのですが、 Ping(Traceroute)コマンドでかくにんができません。 たとえば、YahooにPingをおくると Warning  とでて それから、永遠にPINGをおくりつづけるだけで結果はきません。 Lanないのマシン(Win)のプライベートアドでも同じです。 もちろん そとからWebもみれますし、Lan内のPCから このサーバーマシンのIPアドへPingをおくっても正常な回答がきます なにか 設定をおかしくしてしまったのでしょうか? なにか アドバイスお願いします

  • cron.dailyの優先順位

    データをバックアップした後、マシンをシャットダウンをする スクリプトを、cron.dailyに追加しようと思っています。 cron.dailyには他のスクリプトもあり、追加するスクリプトを 一番最後に実行するようにしたいのですが、実行の優先順位のつけ方はあるのでしょうか?その他可能な方法を教えてください。 OS は Redhat Enterprise Linux になります。

  • 10分間隔にPINGを実行させたい

    こんばんわ。 教えて欲しいのですが、 LINUXのRedHat7Jで、フレッツISDNでサーバーを立てています。 ルータを使って常時接続にしています。 でも、何かのきっかけで回線が切れた時の為に、自動で接続しに行くように10分間隔ぐらいでPINGを実行するようにしたいのですが、どうすればいいかさっぱりわかりません。 viで 「ping xxx.xxx.xxx.xxx」と書いてファイルを作成し、そのファイルに実行の権限をもたせるのかな?、なんとなく思うのですが…。その後が…。 10分間隔にPINGを実行させるには、どうしたらよいのですか? よろしくお願いします。

  • 別筐体への環境コピー

    現在、RedHat上にJ2EEやDBをインストールして、サーバとして 稼動させています。 この度、使用しなくなった別筐体(OSはRedHat)に 同環境を作成させることになりましたが、 私は専門分野でないので現在の環境を 丸ごとコピー出来ないかと考えています。 (1つは別の場所で使用するためです。) まったく同じマシンであればリストアで出来ると思うのですが、 別の種類のマシンでは難しいでしょうか? フルdumpしたDATテープはあります。 OSは2台とも「RedHat EnterPrise Linux AS3」です。 今は、2台ともネットワークで繋がっています。 よろしくお願いします。

  • Linuxで作成されたJSPプログラムについて

    Linux(RedHat 9)で動作しているJSPプログラムをWindowsで動作させる事は出来るのでしょうか?? 現在、Linuxマシン内で動作しているJSP環境をWindowsマシンに移植して動作確認を行いたいと思っています。 IISにTomcatプラグインを入れればWindows上で動作するのでしょうか。

    • ベストアンサー
    • Java
  • シェルスクリプトを途中からバックグラウンドで動かす方法

    フォアグラウンドで起動したシェルスクリプトを、途中から 自動的に バックグラウンドに移行させる方法はないでしょうか。 ユーザーが操作するのなら、もちろん フォアグラウンドで起動→Ctrl Z で中断→jobsでジョブ番号を確認→bg %[ジョブ番号] という手順でできることは知っていますが、 シェルスクリプトが特定の段階まで処理したら自動的に バックグラウンドに移行するようにしたいのです。 たとえば、 #!/bin/sh echo "パラメータを入力してください" read param echo "ここからバックグランドに移行します" #(*) # ここからバックグラウンドに移行して # 処理を行う (バックグランドでやりたい処理) # exit という感じで、処理に必要なパラメーターをターミナルから入力 したいので、最初はフォアグラウンドで起動する必要がありますが、 入力が終わったらあとは邪魔なのでバックグラウンドに回したいのです。 それなら起動時の引数としてパラメーターを与えればいい、と言われ そうですが、パラメーターの数が不定の場合も考えているので、 ターミナル入力が必要なのです。 (*)の部分に jobs; bg %1 などと入れてみましたが line 17: bg: no job control と怒られるだけで、バッググラウンドにはなりませんでした。 指定したPIDのプロセスをバックグラウンドにするような コマンドでもあればうまくいきそうですが、そういう コマンドはないようで、手詰まり状態です。 何かうまい方法がありましたらご教示下さい。 なお、baシェルやCシェルではなく、一番基本的な Bourne Shell で使えるような方法をお願いします。 また、できるだけディストリビューションや OS(Linux、BSD、Solarisなど)の違いにも依存しない 方法をお願いしたいと思います。