У меня есть этот сценарий, я использую его для настройки задания 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
Проблема в том, что он перезапускает MySQL при каждом выполнении задания cron ... даже если сервер работает, он перезапускает службу MySQL, что является исправлением в скрипт для этого.
Я подозреваю, что Вы устанавливаете задание крона для выполнения этого сценария в crontab файле, а не в корне crontab файл. Это не корректно, потому что, если Вы не делаете , работает 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
Примечание: Я установил задание крона в течение каждой минуты, но можно измениться, как Вы желаете или как Вы думаете, лучше. См. 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