如何在 Bash 脚本中读取服务状态

如何在 Bash 脚本中读取服务状态

我编写了一个脚本来监控我的 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

相关内容