一般问题:
在 Linux(Centos)服务器上,如果将 cron 运行的进程监控脚本设置为关闭exit 1;
而不是exit 0;
发现一切正常且不需要任何操作,这是错误的吗?
或者是否有合理的理由exit 1;
而不是exit 0;
在“一切都很好,不需要采取行动”的情况下打电话?
exit 0;
在我看来没有发现问题更合适。但也许有些事情我不知道。例如,也许有一些特定于 Cron 的东西?或者也许在进程监控脚本中有一个约定,“失败”意味着“这个脚本无法解决问题”(而不是我所期望的,exit 1;
这意味着“被监控的进程失败了”?)
我的具体情况:
我正在查看由我的网络托管公司编写的进程监控脚本。进程监控脚本是指由 Cron 定期执行的脚本,用于检查重要的系统进程是否正在运行,如果未运行,则采取诸如向管理员发送邮件或重新启动进程等操作。
这是他们脚本的(通用)结构,用于在端口 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 0;
关闭程序并向执行该程序的父级表示一切正常,exit n;
其中 n>0 和 n<127 表示出现某种错误或问题。
在这里,他们的脚本似乎违反了该规则 - 它exit 1;
在一切正常的情况下调用,并且在问题情况下采取补救措施后不会退出。
对我来说,这看起来像是一个错误——但我在这方面的经验有限。是否存在调用exit 1;
“一切正常,无需采取任何操作”条件比调用更合适的情况exit 0;
?或者这是一个错误?
更广泛的上下文非常简单。这是一个运行 Plesk 的 Centos VPS。该脚本由 Cron 通过 Plesk 的“计划任务”Cron 管理器调用。在 Cron 和此脚本之间没有自定义层会以不寻常的方式响应退出调用。这是一个相当普通的、几乎开箱即用的 Plesk 管理的 Centos VPS(就目前而言)。此脚本监视的进程是 Apache Tomcat。
您的一般分析是正确的。
这听起来并不直接“错误”,但绝对是 cron 语义的“hackish”用法:通常如果 cron 遇到脚本出错,它会向用户发送邮件(或 crontab 中配置的任何地址)。
当人们试图在脚本运行时始终收到邮件时,我看到了这种脚本。如果一切正常,我个人更喜欢保持沉默的“常规”UNIX 方式。