我编写了一个脚本来监控我的 VPS 上的特定服务。该服务 (clamd.amavisd) 经常会意外停止,当它停止时,我的电子邮件服务基本上就停止了。
我在脚本中使用了以下指令:
STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)
问题是,当从终端运行时,脚本会在该变量中接收一些内容(我已将其回显到文件中,所以我会知道),但不幸的是,当在 cron 作业中运行时,该变量为空。
很明显我做错了。是不是有什么因素我没有考虑到?
答案1
你运行的所有内容都cron
必须有绝对路径,因为cron
使用环境变量的最小部分
STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)
您实际上可以在脚本中设置您需要的最重要的路径
PATH=/bin:/usr/local/sbin
但是如果你有一天发现例如预期ls
实际上是恶意黑客的投放,那么请始终使用绝对路径
在脚本的开头指定你愿意使用类似的东西
CAT='/bin/cat'
LS='/bin/ls'
并将其用作
$LS -la /some/path
$CAT /etc/passwd