【问题标题】:Why doesn't cron successfully run my bash script为什么 cron 不能成功运行我的 bash 脚本
【发布时间】:2021-06-23 06:21:23
【问题描述】:

我在 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 执行。有什么想法吗?

【问题讨论】:

  • root 的.profile.bashrc 是否设置了aws 命令所需的任何环境变量?这些脚本不是cron运行的,所以环境设置不正确。
  • 如果脚本产生任何错误,它们将被发送到 root 的电子邮件。你检查了吗?

标签: bash cron amazon-cloudwatch


【解决方案1】:

aws 可能不在PATH 上传递给此程序的环境。作为最佳做法,请考虑

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

另外,你有一个错字hearbeat

【讨论】:

  • 谢谢,AWS 可执行文件的完整路径解决了它!
猜你喜欢
  • 2017-05-28
  • 2012-10-22
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
相关资源
最近更新 更多