我写了一个shell脚本,当MySQL被终止/终止时,它会启动MySQL。我正在使用crontab运行这个shell脚本。
我的cron在/root/mysql.sh下查找名为mysql.sh的脚本文件
sh /root/mysql.sh
mysql.sh:
cd /root/validate-mysql-status
sh /root/validate-mysql-status/validate-mysql-status.sh
验证mysql状态。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
当我使用webmin的crontab手动运行上述mysqlshell脚本时,mysql成功启动(当它被杀死时)。
然而,当我使用cron作业调度它时,MySQL不会启动日志打印正确(这意味着我的cron成功运行了计划脚本,但MySQL没有重新启动)。
crontab-l显示:
* * * * * sh /root/mysql.sh
我从URL中发现,我们应该通过像cron这样的调度器来提供重启MySQL的绝对路径。然而,这对我来说并不奏效。
有人能帮帮我吗!
谢谢。
首先,crontab normaly看起来像这样:
* * * * * /root/mysql.sh
因此,删除多余的sh
并将其放在脚本的开头——我想是#!/bin/bash
(为什么你指的是sh
而不是bash
?)并且不要忘记对文件(chmod +x /root/mysql.sh
)具有执行权限
其次,在crontab中运行脚本很棘手,因为环境不同!您必须手动设置。我们从PATH开始:转到控制台并执行echo $PATH
,然后将结果复制粘贴到export PATH=<your path>
中的cron脚本:
mysql.sh:
#!/bin/bash
export PATH=.:/bin:/usr/local/bin:/usr/bin:/opt/bin:/usr/games:./:/sbin:/usr/sbin:/usr/local/sbin
{
cd /root/validate-mysql-status
/root/validate-mysql-status/validate-mysql-status.sh
} >> OUT 2>> ERR
请注意,我还将所有输出重定向到文件,这样您就不会收到来自cron的电子邮件。
问题是如何知道哪些其他变量(除了PATH
)很重要。试着浏览set | less
,并找出在cron脚本中设置哪些变量可能也很重要如果有任何与MYSQL相关的变量,您必须设置它们您还可以检查cron脚本环境,方法是将set > cron.env
放在cron脚本中,然后将其与控制台环境进行比较,以查找显著差异。