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 myusername
configuration中使用as uid myusername
, myusername
在执行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来尝试查看是否有任何问题(如果有问题,有时会获得比在日志文件中更多的信息)。 除此之外,你无法做更多的事情。
- 如何检查是否在web.config中启用了debugging
- 如何debugging选项-g更改二进制可执行文件?
- 通过Wi-Fi运行/安装/debuggingAndroid应用程序?
- 错误LNK2038:为'_ITERATOR_DEBUG_LEVEL'检测到不匹配:值'0'与main.obj中的值'2'不匹配
- debugging器不会在asynchronous方法中打破/停止exception
- Visual Studio加载符号
- 如何在真实设备上进行debugging(使用Eclipse / ADT)
- 哪个是最好的Linux C / C ++debugging器(或前端到gdb)来帮助教学编程?
- 当g被指定时,gcc是否定义了任何东西?