このスクリプトがあります。このスクリプトを使用して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サービスで再起動します。
ルート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 を参照してください。
Raduの答えはほぼ機能しました。動作させるにはパスを設定する必要がありました。
#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [[ ! "$(service mysql status)" =~ "start/running" ]]
then
service mysql start
fi
Raduの答えは機能しますが、このスクリプトも機能します
#!/bin/bash
if [[ $(pgrep mysql | wc -l) = 0 ]];
then
Sudo service mysql start;
fi