我设法按照列出here列出的所有步骤来设置aws脚本以获取系统中的内存使用情况并将其报告给cloudwatch。我遇到的问题是它没有被Cloudwatch控制台拿起。
当我这样做时
$ ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --verbose
该指标已成功发送至Cloudwatch。我在控制台中拿起它
但是当我尝试通过cron作业做同样的事情时,它并没有在Cloudwatch控制台中被选中。
要设置cron,我做了
$ sudo crontab -e
并添加了这一行
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --from-cron
保存并退出。当我检查/ var / log / syslog时,它表示该指标已成功发送,但出于某种原因,我没有在cloudwatch控制台中捕获它。我在这里缺少什么?
系统日志在下面以供参考(使用ip masked)
Jan 18 22:55:01 ip-xxx-xx-xx-xx CRON[22536]: (root) CMD (~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --from-cron)
Jan 18 22:55:01 ip-xxx-xx-xx-xx postfix/pickup[22530]: 7FF494449A: uid=0 from=<root>
Jan 18 22:55:01 ip-xxx-xx-xx-xx postfix/cleanup[22540]: 7FF494449A: message-id=<20170118225501.7FF494449A@ip-xxx-xx-xx-xx.localdomain>
Jan 18 22:55:01 ip-xxx-xx-xx-xx postfix/qmgr[21671]: 7FF494449A: from=<root@ip-xxx-xx-xx-xx.localdomain>, size=673, nrcpt=1 (queue active)
Jan 18 22:55:01 ip-xxx-xx-xx-xx postfix/local[22542]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled
Jan 18 22:55:01 ip-xxx-xx-xx-xx postfix/local[22542]: 7FF494449A: to=<root@ip-xxx-xx-xx-xx.localdomain>, orig_to=<root>, relay=local, delay=0.03, delays=0.02/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jan 18 22:55:01 ip-xxx-xx-xx-xx postfix/qmgr[21671]: 7FF494449A: removed
注意:cron作业中的绝对路径起到了作用。记录了各种打嗝here。
答案 0 :(得分:3)
Cron不使用登录shell的环境变量,因此~
可能无法解析到当前用户的HOME
目录,就像在手动测试中一样。尝试用绝对路径替换它(例如,/home/sarul/aws-script-mon/mon-put-instance-data.pl
并查看它是否正确运行脚本。
如果您在用户环境或~/.aws/config
而不是实例配置文件中使用本地AWS凭据,则可能需要在cron可访问的位置添加这些凭据。
另请注意,postfix
syslog条目表示某种邮件正在排队 - 可能与cron调用的脚本报告的错误有关。