"monit restart <service>" 如何知道重新启动完成了? 注:此为提问标题,无需回答。

15

我们的系统管理员最近改用了monit,所以现在当我想重启一个服务时,我应该使用 "monit restart <servicename>" 而非 "/etc/init.d/<servicename> restart"。

然而,当成功时,monit命令不会产生任何输出并立即返回。似乎它直到下一次循环之后才实际执行重启操作。

我正在重启服务,因为我对其进行了更改。我不想针对旧实例测试我的更改。所以我需要知道何时重新启动完成。我也希望它在我告诉它重启时就重启,而不是等待它自行启动。我不喜欢在等待时一遍遍地输入“ps aux | grep <myservicename>”。

有没有办法让monit立即重启我的服务?

有没有办法使monit或者monit周围的包装器阻塞直到重启完成?

有没有办法让monit告诉我重启是否成功,否则它为什么失败?

3个回答

21

Monit是一个非常安静的程序!实际上,monit命令倾向于在后台运行并立即退出!所以...如果想要查看Monit正在执行的操作,请使用-v开关,并使用tail -f命令跟踪日志文件和-I如果您想将其运行在前台。

同步重启

使用-I选项

monit -I restart servicename

这将禁用后台重新启动,例如在计算机启动时需要!

如果您想诊断问题,请添加详细选项-v

monit -Iv restart servicename

状态检查

要检查结果,您可以尝试以下几件事情:

1) 检查monit的返回值

monit -I restart servicename
echo $?

通常情况下,$?的值应该是零代表成功,非零则表示失败。但并非所有程序都支持它,并且在man手册中也没有关于monit退出状态($?)的信息。建议尝试测试一下。

2)使用statussummary命令

monit -I status
或者
monit -I status servicename

或者

monit -I summary

这些命令将在输出中返回状态。您可以选择最适合您的命令并解析其输出。或者,如第1点所述,检查返回值$?(它没有在手册中提到)。


我认为你对于 -I 选项可能是正确的(我感到惊讶,我以为它只适用于启动 monit),但 -v 选项似乎没有什么用。它不告诉我命令是否成功,而是倾倒出关于 monit 管理的每个服务的大量信息。 - Tim
@Tim 1) -I选项有帮助吗?2)-v不是用来返回状态的,只是用来诊断潜在问题的。3)如果要返回状态,请参考我的答案的最后一段。$?变量包含什么?monit status servicename告诉你什么? - Tomas
@Tim,我扩展了我的答案,使其更易理解。 - Tomas
1
“-I”选项似乎没有任何作用。无论是否使用该选项,重启都只会在下一个周期“计划”,并且重启命令立即成功返回(我正在使用Monit 5.4)。 - Hubro
1
-I标志不会做你(和我)想要的事情,它只是使monit不在后台运行,而不是影响monit接收到的命令。可能会在某个时候添加CLI等待标志http://nongnu.13855.n7.nabble.com/monit-start-stop-in-a-synchronous-mode-td190714.html#a197671 - mmrobins

1

只需运行monit即可唤醒monit守护进程。这有助于减少等待下一个周期的时间。

执行tail -f monit.log以查看重启是否成功或失败。


0
你总是可以使用类似这样的东西。
while test -f pidfile.pid && kill -0 $(cat pidfile.pid);
do 
  sleep 1; 
done;

while ! kill -0 $(cat pidfile.pid); 
do 
  sleep 1; 
done

此脚本在您的进程重新启动时等待。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接