Shell 脚本问题:cron 作业脚本在 MySQL 服务器意外停止时重新启动

Str*_*Hat 13 mysql bash scripts 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
Run Code Online (Sandbox Code Playgroud)

我已将 cron 作业设置为。

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

然后补充说,

*/1 * * * * /home/ubuntu/mysql-check.sh
Run Code Online (Sandbox Code Playgroud)

问题是它在每个 cron 作业执行时重新启动 MySQL。即使服务器正在运行它也会重新启动 MySQL 服务,脚本中的更正是什么。

Rad*_*anu 20

我怀疑您设置了 cron 作业以在您的 crontab 文件中执行此脚本,而不是在根 crontab 文件中。这是不正确的,因为如果您service mysql status以 root 身份运行,mysql将无法识别该服务。

所以,修改脚本如下:

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

确保它是可执行的:

chmod +x /path/to/script
Run Code Online (Sandbox Code Playgroud)

然后在根 crontab 中添加一个新条目,如下所示: