【发布时间】:2014-04-26 06:54:40
【问题描述】:
我想编写一个脚本来在 MySQL 服务处于停止状态时重新启动它。 我不知道如何在这个脚本上写 IF 语句。
【问题讨论】:
-
然后去查看文档。完成此操作后,如果您仍然卡住,edit 您的问题是代码不起作用。
-
google "如果在 shell 脚本中的例子"
我想编写一个脚本来在 MySQL 服务处于停止状态时重新启动它。 我不知道如何在这个脚本上写 IF 语句。
【问题讨论】:
@vastlysuperiorman
if [ ! $(ps aux | grep mysql) ] then service mysql restart fi
首先,不要忘记保护您的操作数。看到这个提醒:bash : Illegal number
那么,你可以简化:
[[ $(ps -ef | grep [m]ysql) ]] || service mysql restart
(我更喜欢使用ps -ef,因为它更符合POSIX,即使我在Bash 中总是使用[[ 而不是test 或[)。
最后,最好用service mysql status检查状态。您可以尝试类似的方法:
[[ $(service mysql status) =~ running ]] || service mysql restart
@user33398
您可以尝试在循环中使用此测试或使用watch 命令,例如。或者您可以使用更智能的工具,例如 cron 或 jenkins 或 nagios 来做到这一点。
【讨论】:
ps aux | grep mysql 将始终返回 true。相反,您需要的是ps aux | grep [m]ysql。运行这两个命令,你会发现不同之处。
if [[ $(ps -ef | grep mysql) ]] ; then echo hello; fi AND if [[ $(ps -ef | grep [m]ysql) ]] ; then echo hello; fi。第一个命令将 ALWAYS 打印 hello,因为 if 条件始终为真。此外,您在上面的评论中提到的内容也遵循我在这里的解释。
重新发明轮子没有意义。有很多很棒的软件解决方案可以为您做到这一点。 Monit 是一个很好的开源示例。
如果您确实选择编写脚本,一个简单的解决方案可能是执行以下操作:
if [ ! $(ps aux | grep mysql) ]
then
service mysql restart
fi
【讨论】:
ps aux | grep mysql 将始终返回 true。相反,您需要的是ps aux | grep [m]ysql。运行这两个命令,你会发现不同之处。
[[ $(service mysql status) =~ running ]] || service mysql restart 可能是最有效的解决方案(我是新手,所以无法投票)。