首页 > 解决方案 > 为什么 cron 不能成功运行我的 bash 脚本

问题描述

我在 root 用户的 crontab 中列出了一个 cron 作业:

*/5 * * * * /usr/local/bin/service_monitor.sh

该文件的内容如下:

#!/usr/bin/bash -e


/usr/bin/systemctl is-active --quiet nginx && aws cloudwatch put-metric-data --metric-name hearbeat-nginx --namespace heartbeat --value 1 --region eu-west-1
/usr/bin/systemctl is-active --quiet prosody && aws cloudwatch put-metric-data --metric-name heartbeat-prosody --namespace hearbeat --value 1 --region eu-west-1

该文件是可执行的,当我直接以 root 身份运行它时,它运行没有问题,并且我获得了 AWS CloudWatch 中记录的指标,因此我知道 AWS cli 或权限没有问题。但是,当我尝试将其作为 cron 作业运行时,我看不到任何创建的指标。我可以在系统日志中看到该文件正在由 cron 执行。有任何想法吗?

标签: bashcronamazon-cloudwatch

解决方案


aws可能不会就PATH传递给这个程序的环境。作为最佳实践,请考虑

  • 始终通过 cron 配置文件中的绝对路径引用可执行文件(易于测试)或
  • 始终PATH明确设置您的(更具可读性)。

另外,你有一个错字hearbeat


推荐阅读