bash - 为什么 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 执行。有任何想法吗?
解决方案
aws
可能不会就PATH
传递给这个程序的环境。作为最佳实践,请考虑
- 始终通过 cron 配置文件中的绝对路径引用可执行文件(易于测试)或
- 始终
PATH
明确设置您的(更具可读性)。
另外,你有一个错字hearbeat
。
推荐阅读
- swift - 无法在 Swift 的 QLPreviewController 中显示总文件(仅显示文件名)
- reactjs - 渲染后将 ScrollView 重置为顶部(react-navigation v4)
- ios - 如何在带有文本视图的 ForEach 内编辑作为 NavigationLink 标签一部分的数组元素属性?
- firebase-analytics - 新的 Firebase 受众传播到远程配置需要多长时间?
- algorithm - nlogn 是否与 n^2logn^2 相同
- c - 错误:在此函数中使用了未初始化的“fp”[-Werror=uninitialized]
- javascript - React 如何使用 useEffect 和 useCallback 重新渲染状态挂钩?
- python - 如何在 Django url 模板标签中传递页面参数?
- machine-learning - 时序神经网络推理标准
- aws-lambda - 提供的关键元素与 DynamoDB 中的架构错误不匹配