サーバーの生存確認をする
常時稼動するサーバーの生存確認をしたい場合、ping などを使用し、cronで実行させます。
※サービスの生存確認を行うことも出来ますが、ここでは単純にpingでのチェックの方法を紹介します。
# vi /root/checkalive.pl# chmod +x checkalive.pl#!/usr/bin/perl # サーバーの生存チェック use Net::Ping; ## 送信先メールアドレス $to = 'あなたのメールアドレス'; ## sendmailのパス $sendmail = '/usr/sbin/sendmail'; ## チェックするホスト一覧 @host = ( "192.168.1.1", # チェックしたいサーバーのIPアドレスのリスト "192.168.1.2", # ); ## timeout $timeout = 0.1; ## ホストネーム取得 ($hostname) = gethostbyaddr(pack('C4', 127,0,0,1), 2); ## subject $subject = "[$hostname] alive checker."; ## from $from = "$ENV{'USER'}\@$hostname"; ## routine @notalive = (); $pObj = Net::Ping->new("icmp"); ## 生存チェック foreach $host (@host) { if(! $pObj->ping($host, $timeout)) { push @noalive, $host; } } $pObj->close(); ## リストが無ければ終了 exit if (! @noalive); # メッセージ作成 $noalive = join "\n", @noalive; $msg = << "___EOM"; # メールの本文(ヒアドキュメントで変数に代入) ### dead list $noalive ___EOM # sendmail コマンド起動 open (MAIL, "| $sendmail -t -i") || die 'sendmail error'; # メールヘッダ出力 print MAIL "From: $from\n"; print MAIL "To: $to\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-Type: text/plain;\n\n"; # メール本文出力 print MAIL "$msg"; # sendmail コマンド閉じる close (MAIL); exit;
以上のファイルを作成、修正したら実行属性をつけてテストしてください。最初は存在しないリストを追加し、コマンドラインでチェック、動作確認後再度修正して crontab に追加してください。
5分毎にチェックする場合
# crontab -e*/5 * * * * /root/checkalive.pl
サーバーが停止してしまっている場合、5分毎にエラーメールが送信されてきます。また、実行するサーバーが落ちていると意味が無いので、同じ設定で複数台設定することが望まれます。
※経路が落ちていると結局メールが届かないですが、分からないよりは…