我们的sysadmin最近切换到使用monit,所以现在当我想重新启动服务时,我应该使用“monit restart&lt; servicename&gt;”而不是“/etc/init.d/<servicename> restart”。
但是,monit命令在成功时不会产生任何输出并立即返回。看起来直到下一个周期之后它才真正重启。
我正在重新启动该服务,因为我对其进行了更改。我不想测试我对旧实例的更改。所以我需要知道重启完成的时间。当我告诉它时,我也希望它重新启动,而不是当它转向它时。我不喜欢输入“ps aux | grep&lt; myservicename&gt;”我等的时候一遍又一遍。
有没有办法让monit立即重启我的服务?
有没有办法让monit,或者monit的包装器阻塞,直到重启完成?
有没有办法让monit告诉我重启成功,或者它失败了?
答案 0 :(得分:19)
Monit是一个非常安静的计划!事实上,monit命令往往会立即运行和退出,因为它们在后台运行!所以...如果你想看Monit正在做什么,请使用-v
开关;如果你希望它在前台运行,请使用tail -f
日志文件和-I
。
使用-I
option:
monit -I restart servicename
这将禁用后台重启,例如当你的电脑启动时需要!
如果要诊断问题,请添加详细选项-v
:
monit -Iv restart servicename
要检查结果,您可以尝试以下几种方法:
1)monit的返回值
monit -I restart servicename
echo $?
通常,$?
成功时应为零,否则为非零。但是,不是程序支持它,并且manpage没有关于$?
的退出状态(monit
)的信息。尝试测试一下。
2)使用status
或summary
命令
monit -I status
或
monit -I status servicename
或
monit -I summary
这些命令将返回输出的状态。您可以选择最适合您的命令并解析其输出。或者,如第1点所示,检查返回值$?
(联机帮助页中未提及)。
答案 1 :(得分:1)
只需运行monit
即可唤醒monit守护程序。这应该有助于减少等待下一个周期。
执行tail -f monit.log
以查看重启是否成功或是否失败。
答案 2 :(得分: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
此脚本会在您的进程重新启动时等待。