一般问题:
在 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;
?或者这是一个错误?
更广泛的背景非常简单。它是一台 Centos VPS,运行 Plesk。该脚本由 Cron 通过 Plesk 的“计划任务”Cron 管理器调用。Cron 和此脚本之间没有自定义层,不会以不寻常的方式响应退出调用。这是一个相当普通的、几乎开箱即用的 Plesk 管理的 Centos VPS(就目前而言)。此脚本监视的进程是 Apache Tomcat。
答案1
你的总体分析是正确的。
这听起来并不是直接“错误”,但绝对是 cron 语义的“黑客”用法:通常如果 cron 遇到脚本出现错误,它会向用户发送邮件(或 crontab 中配置的任何地址)。
当人们试图总是脚本运行时收到一封邮件。我个人更喜欢“常规” UNIX 方式,即如果一切正常则保持静默。