【问题标题】:Script for CentOS to restart MySQL service whenever it is stoppedCentOS 脚本在 MySQL 服务停止时重新启动它
【发布时间】:2014-04-26 06:54:40
【问题描述】:

我想编写一个脚本来在 MySQL 服务处于停止状态时重新启动它。 我不知道如何在这个脚本上写 IF 语句。

【问题讨论】:

  • 然后去查看文档。完成此操作后,如果您仍然卡住,edit 您的问题是代码不起作用。
  • google "如果在 shell 脚本中的例子"

标签: mysql bash shell


【解决方案1】:

@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 命令,例如。或者您可以使用更智能的工具,例如 cronjenkinsnagios 来做到这一点。

【讨论】:

  • 运行脚本时参数过多。
  • @user33398 谢谢复制/粘贴失败的命令,我不是通灵者 ;)
  • @IdrissNeumann, ps aux | grep mysql 将始终返回 true。相反,您需要的是ps aux | grep [m]ysql。运行这两个命令,你会发现不同之处。
  • 亲爱的伊德里斯纽曼!如果 [ ! $(ps aux | grep mysql) ] 这个不起作用,即使 MySQL 被停止,它也显示 MYSQL 存在,因为 GREP MYSQL 是一个包含 MySQL 的进程。亲爱的 SLAYEDBYLUCIFER,[m]ysql 是正确的。我去看看
  • @IdrissNeumann,你错了。运行这两个命令,您会注意到不同之处:if [[ $(ps -ef | grep mysql) ]] ; then echo hello; fi AND if [[ $(ps -ef | grep [m]ysql) ]] ; then echo hello; fi。第一个命令将 ALWAYS 打印 hello,因为 if 条件始终为真。此外,您在上面的评论中提到的内容也遵循我在这里的解释。
【解决方案2】:

重新发明轮子没有意义。有很多很棒的软件解决方案可以为您做到这一点。 Monit 是一个很好的开源示例。

如果您确实选择编写脚本,一个简单的解决方案可能是执行以下操作:

if [ ! $(ps aux | grep mysql) ]
then
    service mysql restart
fi

【讨论】:

  • ps aux | grep mysql 将始终返回 true。相反,您需要的是ps aux | grep [m]ysql。运行这两个命令,你会发现不同之处。
  • 这是真的。 grep 将显示在列表中。我将不得不提倡 Idriss Neuman 对此的回答。他说得对,[[ $(service mysql status) =~ running ]] || service mysql restart 可能是最有效的解决方案(我是新手,所以无法投票)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 2015-10-25
  • 2013-01-29
  • 2016-04-13
相关资源
最近更新 更多