我编写了一个shell脚本,当它被杀死/终止时启动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
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
当我使用webmin的crontab手动运行上述 mysql shell脚本时,MySQL已成功启动(当它被杀死时)。
但是,当我使用cron作业安排时,MySQL无法启动。 正确打印日志(这意味着我的cron成功运行了预定脚本,但MySQL没有重启。)
crontab -l </ em>显示:
* * * * * sh /root/mysql.sh
我从URL中发现,我们应该给出通过调度程序(如cron)重启MySQL的绝对路径。但是,它对我没用。
任何人都可以帮助我!
谢谢。
答案 0 :(得分:1)
首先,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相关的变量,则必须设置它们!您还可以通过将set > cron.env
放入cron脚本然后将其与控制台环境区分开来查看cron脚本环境有显着差异。