У меня есть этот сценарий, я использую его для настройки задания 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, что для этого необходимо исправить в скрипте.
[ ... ]
илиtest <TEST>
в Bash. Они устарели синтаксис . Используйте[[ ... ]]
вместо этого. Только использовать[ ... ]
и / илиtest <TEST>
если[[ ... ]]
это не доступно.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
что он делает, запускает подоболочку, при этомservice mysql status | grep 'mysql start/running' &> /dev/null
запускается, состояние возврата (выхода) упомянутой подоболочки затем передается в оператор if, который затем проверяет, не является ли он ненулевым, и если он не ненулевой, то он запускаетthen
блок.Ответы:
Я подозреваю, что вы настроили задание cron для выполнения этого скрипта в вашем файле crontab, а не в корневом файле crontab. Это не правильно, потому что если вы не запускаете
service mysql status
с правами root,mysql
служба не будет распознана.Итак, измените скрипт следующим образом:
Убедитесь, что это исполняемый файл:
Затем добавьте новую запись в корневой crontab следующим образом:
Отредактируйте корневой файл crontab, используя:
И добавьте следующую строку в файл:
Примечание: я установил задание cron на каждую минуту, но вы можете изменить его по своему усмотрению или по своему усмотрению. См. Http://en.wikipedia.org/wiki/Cron в этом смысле.
источник
./mysql-check.sh: line 2: [: =~: binary operator expected
ошибка в приведенном выше сценарии!
если вы действительно намереваетесь перезапустить службу mysql при сбоеОтвет Раду почти сработал. Я должен был установить путь, чтобы он работал:
источник
PATH
в файле crontab. В любом случае, в вашем случае вам нужно использоватьPATH=/usr/sbin:$PATH
или использовать полный путь для того,service
как я редактировал мой ответ.Ответ Раду работает - но этот сценарий также работает
источник
pgrep mysql
и я получил0
MySQL для остановки и2
для запуска. Для этого я поставил условие,if [[ $(pgrep mysql | wc -l) = 0 ]];
и оно сработало для меня./bin/bash
(он не работает без Bash).*/1 * * * * /bin/bash /root/mysql-check.sh