• ベストアンサー

FEDORA 4 MySQL プロセス 死活監視

タイトル通り、mysqld のプロセスがなければ、管理者宛にメールを送りたいと考えています。また、シェル又は、PHPをcron(1分間隔)で定期実行もあわせて考えています。 考えたシェル:mysqlch.sh #!/bin/bash mail_body_tmp=/tmp/ps_chk.tmp MAIL_TO=root@localhost rm -f $mail_body_tmp for PROC in $@ do ps -ef | awk {'print $8'} | grep $PROC | grep -v grep | grep -v $0 1>&2>/dev/null if [ ${?} -ne 0 ] ; then echo Process \"$PROC\" Down in $HOSTNAME >> $mail_body_tmp fi done if [ -e $mail_body_tmp ]; then mail -s "Process Down Information. $HOSTNAME" $MAIL_TO < $mail_body_tmp logger -t svchk < $mail_body_tmp fi 実行するときは、mysqlch.sh mysqld しかし、プロセスDOWNでも、メールがきません。 修正する所、またはこの方がいいというアドバイスお願いいたします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

command1 | command2 | command3 のようにコマンドをパイプ渡しで実行するとき、その戻り値は最後のコマンド(上の例ではcommand3)の戻り値になります。 ps -ef | awk {'print $8'} | grep $PROC | grep -v grep | grep -v $0 の場合、最後の grep -v $0 の結果が$?に入ることになりますが、当然ながらこれは常に0です。 順序を変えて、 ps -ef | awk {'print $8'} | grep -v $0 | grep -v grep | grep $PROC と、最後にgrep $PROCを持ってくれば動作するのではないでしょうか。

noname#212513
質問者

お礼

返信遅くなりすいません。 順序を変えたら、実行できました。有難う御座いました。 サーバーによっては、HOSTNAME というコマンドは小文字でないと 受け付けないものもあるようです。

その他の回答 (1)

回答No.2

直接の回答ではありませんが、mysqladminコマンドを使えば実際に接続した結果が返ってくるので確実と思います。 mysqladmin ping -u root -ppassword -h hostname で、"mysqld is alive"がなければメールする、みたいな。

関連するQ&A