debuggingmonit

我发现debuggingmonit是一个主要的痛苦。 Monit的shell环境基本上没有任何东西(没有path或其他环境variables)。 此外,我没有find任何日志文件。

问题是,如果monit脚本中的启动或停止命令失败,很难判断它出了什么问题。 通常情况下,这并不像在shell上运行命令那么简单,因为shell环境与monit shell环境不同。

什么是人们用来debuggingmonitconfiguration的一些技巧?

例如,我会很高兴有一个监视器,testing我的脚本,或者一个日志文件来查看出了什么问题。

我有同样的问题。 使用monit的详细命令行选项会有所帮助,但我发现最好的方法是创build一个尽可能类似于monit环境的环境,并从那里运行启动/停止程序。

# monit runs as superuser $ sudo su # the -i option ignores the inherited environment # this PATH is what monit supplies by default $ env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh # try running start/stop program here $ 

我发现最常见的问题是与环境variables有关(特别是PATH )或与权限有关的问题。 你应该记住,monit通常以root身份运行。

另外,如果您在您的as uid myusernameconfiguration中使用as uid myusernamemyusername在执行testing之前更改为用户myusername

我希望有帮助。

一定要经常仔细检查你的conf,并手动监视你的进程,然后让monit处理所有事情。 systat(1),top(1)和ps(1)是你的朋友找出资源的使用和限制。 了解你所监视的过程也是至关重要的。

关于启动和停止脚本我使用包装脚本redirect输出和检查环境和其他variables。 像这样的东西:

 $ cat monit-wrapper.sh #!/bin/sh { echo "MONIT-WRAPPER date" date echo "MONIT-WRAPPER env" env echo "MONIT-WRAPPER $@" $@ R=$? echo "MONIT-WRAPPER exit code $R" } >/tmp/monit.log 2>&1 

然后在monit:

 start program = "/home/billitch/bin/monit-wrapper.sh my-real-start-script and args" stop program = "/home/billitch/bin/monit-wrapper.sh my-real-stop-script and args" 

你仍然需要弄清楚在包装中你想要什么信息,比如进程信息,id,系统资源限制等等。

monit -c /path/to/your/config -v

默认情况下,monitlogging到你的系统消息日志,你可以在那里查看发生了什么事情。

另外,根据你的configuration,你可能会login到不同的地方

 tail -f /var/log/monit 

http://mmonit.com/monit/documentation/monit.html#LOGGING

假设默认值(就像我正在使用的任何旧版本的mont),你可以像这样尾巴的日志:

CentOS的:

 tail -f /var/log/messages 

Ubuntu的:

 tail -f /var/log/syslog 

Mac OSX

 tail -f /var/log/system.log 

视窗

这里是龙

但有一个neato项目,我find了如何做出病态的好奇心: https : //github.com/derFunk/monit-windows-agent

您可以通过在/etc/default/monit MONIT_OPTS="-v"添加MONIT_OPTS="-v" (不要忘记重新启动; /etc/init.d/monit restart ),以详细/debugging模式启动MONIT_OPTS="-v"

然后可以使用tail -f /var/log/monit.log捕获输出

 [CEST Jun 4 21:10:42] info : Starting Monit 5.17.1 daemon with http interface at [*]:2812 [CEST Jun 4 21:10:42] info : Starting Monit HTTP server at [*]:2812 [CEST Jun 4 21:10:42] info : Monit HTTP server started [CEST Jun 4 21:10:42] info : 'ocean' Monit 5.17.1 started [CEST Jun 4 21:10:42] debug : Sending Monit instance changed notification to monit@example.io [CEST Jun 4 21:10:42] debug : Trying to send mail via smtp.sendgrid.net:587 [CEST Jun 4 21:10:43] debug : Processing postponed events queue [CEST Jun 4 21:10:43] debug : 'rootfs' succeeded getting filesystem statistics for '/' [CEST Jun 4 21:10:43] debug : 'rootfs' filesytem flags has not changed [CEST Jun 4 21:10:43] debug : 'rootfs' inode usage test succeeded [current inode usage=8.5%] [CEST Jun 4 21:10:43] debug : 'rootfs' space usage test succeeded [current space usage=59.6%] [CEST Jun 4 21:10:43] debug : 'ws.example.com' succeeded testing protocol [WEBSOCKET] at [ws.example.com]:80/faye [TCP/IP] [response time 114.070 ms] [CEST Jun 4 21:10:43] debug : 'ws.example.com' connection succeeded to [ws.example.com]:80/faye [TCP/IP] 

是的,monit不是太容易debugging。

这里有一些最佳实践

  • 使用一个包装脚本来设置你的日志文件。 在这里写下你的命令参数:

贝壳:

 #!/usr/bin/env bash logfile=/var/log/myjob.log touch ${logfile} echo $$ ": ################# Starting " $(date) "########### pid " $$ >> ${logfile} echo "Command: the-command $@" >> ${logfile} # log your command arguments { exec the-command $@ } >> ${logfile} 2>&1 

这有很大的帮助

另一件我觉得有用的就是用'-v'运行monit,这会给你带来冗长的感觉。 所以工作stream程是

  • 让你的包装工作从壳“sudo我包装”
  • 然后尝试从monit中运行,从命令行运行“-v”
  • 然后尝试从monit开始,在后台运行。

一旦进程运行,您也可以尝试运行monit validate来尝试查看是否有任何问题(如果有问题,有时会获得比在日志文件中更多的信息)。 除此之外,你无法做更多的事情。