一般问题:
在Linux(Centos)服务器上,如果由cron运行的进程监视脚本设置为closures,则exit 1; 而不是exit 0; 发现一切正常,不需要采取行动,这是一个错误吗?
还是有合理的理由叫exit 1; 而不是exit 0; 在“一切正常,不需要行动”的条件下?
exit 0; 发现没有问题似乎对我来说比较合适。 但也许有一些我不知道的东西。 例如,也许有一些特定于Cron的东西? 或者,也许在stream程监控脚本中有一个惯例,“失败”意味着“ 这个脚本不需要解决问题 ”(而不是我期望的那个是第exit 1;意思是“ 被监控的stream程失败了 ”)?
我的具体情况是:
我正在看我的网站托pipe公司编写的stream程监控脚本。 通过进程监控脚本,我的意思是由Cron定期执行的一个脚本,检查一个重要的系统进程是否正在运行,如果没有运行,则采取诸如邮寄pipe理员或重新启动进程等操作。
以下是其脚本的(广义)结构,对于在端口8080上运行的服务(在本例中为Apache Tomcat):
SERVICE=$(/usr/sbin/lsof -i tcp:8080 | wc -l); if [ $SERVICE != 0 ]; then exit 1; else #take action fi
即使像我这样知识渊博的人看起来也很简单,除了exit 1;以外exit 1; 部分看起来很奇怪 据我所知, exit 0; closures一个程序,并向执行该程序的父母表明一切正常, exit n; 其中n> 0和n <127表示存在某种错误或问题。
在这里,他们的脚本似乎违背了这个规则 – 它叫做exit 1; 在一切正常的情况下,在问题情况下采取补救措施后不退出。
对我来说,这看起来像一个错误 – 但我在这方面的经验是有限的。 有没有调用exit 1;情况exit 1; 在“一切正常,不需要任何操作”的情况下比调用exit 0;更合适exit 0; ? 还是这是一个错误?
更宽的上下文非常简单。 这是一个Centos VPS,运行Plesk。 Cron通过Plesk的“计划任务”Cron经理调用脚本。 Cron和这个脚本之间没有自定义的层,会以一种不寻常的方式响应退出调用。 这是一个相当普通的,几乎开箱即用的Pleskpipe理的Centos VPS(就目前而言)。 这个脚本监视的进程是Apache Tomcat。
你的一般分析是正确的。
这听起来不是直接的“错误”,而是cron语义的“hackish”用法:通常如果cron遇到脚本有错误,它会将邮件发送给用户(或任何在crontab中configuration的地址)。
当脚本运行时,当人们试图总是收到邮件时,我会看到这种脚本。 如果一切正常,我个人比较喜欢保持沉默的“常规”UNIX方式。