Я написал сценарий оболочки, который запускает MySQL, когда его убивают / завершают. Я запускаю этот сценарий оболочки с помощью crontab.
Мой cron ищет файл сценария с именем mysql.sh под /root/mysql.sh
sh /root/mysql.sh
mysql.sh:
cd /root/validate-mysql-status
sh /root/validate-mysql-status/validate-mysql-status.sh
validate-mysql-status.sh:
# mysql root/admin username
MUSER="xxxx"
# mysql admin/root password
MPASS="xxxxxx"
# mysql server hostname
MHOST="localhost"
MSTART="/etc/init.d/mysql start"
# path mysqladmin
MADMIN="$(which mysqladmin)"
# see if MySQL server is alive or not
# 2&1 could be better but i would like to keep it simple
$MADMIN -h $MHOST -u $MUSER -p${MPASS} ping 2>/dev/null 1>/dev/null
if [ $? -ne 0 ]; then
# MySQL's status log file
MYSQL_STATUS_LOG=/root/validate-mysql-status/mysql-status.log
# If log file not exist, create a new file
if [ ! -f $MYSQL_STATUS_LOG ]; then
cat "Creating MySQL status log file.." > $MYSQL_STATUS_LOG
now="$(date)"
echo [$now] error : MySQL not running >> $MYSQL_STATUS_LOG
else
now="$(date)"
echo [$now] error : MySQL not running >> $MYSQL_STATUS_LOG
fi
# Restarting MySQL
/etc/init.d/mysql start
now1="$(date)"
echo [$now1] info : MySQL started >> $MYSQL_STATUS_LOG
cat $MYSQL_STATUS_LOG
fi
Когда я запускаю выше сценарий оболочки mysql вручную с использованием crontab webmin, MySQL успешно запущен (когда его убили).
Тем не мение, когда я планирую его с помощью задания cron, MySQL не запускается. Журналы печатаются правильно (это означает, что мой cron успешно выполняет запланированный сценарий, однако MySQL не перезапускается).
crontab -l отображает:
* * * * * sh /root/mysql.sh
Из URL-адресов я обнаружил, что мы должны указать абсолютный путь для перезапуска MySQL через планировщики, такие как cron. Однако у меня это не сработало.
Кто-нибудь может мне помочь, пожалуйста!
Спасибо.
Существует служба под названием monit, которая делает это настолько просто, насколько это возможно. Вы можете настроить его для любых служб для перезапуска этой службы при определенных условиях, и он может предупредить вас, если его условия не будут выполнены. Монит