在通过crontab调度程序运行时,MySQL重新启动的问题

时间:2014-01-06 13:53:08

标签: mysql shell ubuntu cron crontab

我编写了一个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的绝对路径。但是,它对我没用。

任何人都可以帮助我!

谢谢。

1 个答案:

答案 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脚本环境有显着差异。