gpt4 book ai didi

mysql - 通过 crontab 调度程序运行时 MySQL 重启的问题

转载 作者:可可西里 更新时间:2023-11-01 07:39:55 24 4
gpt4 key购买 nike

我写了一个 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

验证-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 显示:

* * * * * sh /root/mysql.sh 

我从 URL 中发现我们应该提供绝对路径以通过 cron 等调度程序重启 MySQL。但是,它对我不起作用。

谁能帮帮我!

谢谢。

最佳答案

首先,crontab 通常看起来像这样:

* * * * * /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 脚本环境,然后将其与控制台环境进行比较以查找显着差异。

关于mysql - 通过 crontab 调度程序运行时 MySQL 重启的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com