web-dev-qa-db-ja.com

シェルスクリプトの問題:誤って停止したときにMySQLサーバーを再起動するcronジョブスクリプト

このスクリプトがあります。このスクリプトを使用してCRONジョブをセットアップし、MySQLサービスが実行されているかどうかを確認できます。そうでない場合は、MySQLサービスを再起動します。

#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
    Sudo service mysql restart
fi

Cronジョブをセットアップしました。

Sudo crontab -e

そして追加しました、

*/1 * * * * /home/ubuntu/mysql-check.sh

問題は、すべてのcronジョブの実行でMySQLを再起動することです。サーバーが実行されている場合でも、それを行うためのスクリプトの修正内容をMySQLサービスで再起動します。

11
Straw Hat

ルートcrontabファイルではなく、crontabファイルでこのスクリプトを実行するようにcronジョブをセットアップしていると思われます。これは正しくありません。あなたがしないでルートとしてservice mysql statusを実行すると、mysqlサービスが認識されないからです。

したがって、次のようにスクリプトを変更します。

#!/bin/bash
if [[ ! "$(/usr/sbin/service mysql status)" =~ "start/running" ]]
then
    /usr/sbin/service mysql start
fi

それが実行可能であることを確認してください:

chmod +x /path/to/script

次に、次のようにルートcrontabに新しいエントリを追加します。

  • 次を使用してルートcrontabファイルを編集します。

    Sudo crontab -e
    
  • そして、ファイルに次の行を追加します。

    */1 * * * * /path/to/script
    
  • 注:1分ごとにcronジョブを設定しましたが、必要に応じて、またはより良いと思うように変更できます。この意味で http://en.wikipedia.org/wiki/Cron を参照してください。

16
Radu Rădeanu

Raduの答えはほぼ機能しました。動作させるにはパスを設定する必要がありました。

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [[ ! "$(service mysql status)" =~ "start/running" ]]
then
    service mysql start
fi
3
Donkzilla

Raduの答えは機能しますが、このスクリプトも機能します

#!/bin/bash
if [[ $(pgrep mysql | wc -l) = 0 ]];
then
    Sudo service mysql start;
fi
2
JxAxMxIxN