crontab失败,无法findaws可执行文件

我试图在我的ec2亚马逊服务器(ubuntu 14.04)上运行一个备份脚本来自动创build一个amazon ebs卷的快照。 因此,我正在使用aws-missing-tools脚本: https : //github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup

这是我的备份脚本,触发ec2-automate-backup-awscli.sh:

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/aws HOME=/ JAVA_HOME=/usr/lib/jvm/default-java/jre/ MAILTO=xxx.xxxxxx@me.com AWS_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxx AWS_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /opt/aws/ec2-automate-backup-awscli.sh -r us-east-1 -s tag -t 'Backup,Values=true' -k 31 -p 

但是,当我用crontab调度这个脚本时,我只会遇到这个错误:

 26 23 * * * /opt/aws/backup.sh >> /var/log/aws.log 2>&1 

日志文件:“为了使用ec2-automate-backup-awscli.sh,必须安装可执行文件”aws“。

直接执行“sh backup.sh”可以正常工作。 (快照已创build。)

有任何想法吗?

你的PATHvariables应该是一个目录列表,所以考虑到你的aws可执行文件位于/usr/local/bin/aws ,你的PATH应该是这样的:

 /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin 

另外,你最好通过像这样的“hashbang”设置shell,而不是使用SHELL环境variables,因为这将允许crontab自动使用正确的解释器:

 #!/bin/bash 

我有这个确切的错误。 假设您已经安装了先决条件并且手动运行该命令,但在Cron中不运行,则可能正确的path不会暴露给cron命令。 您可以通过运行crontab -e来解决此问题,然后直接将pathinput到cron选项卡中:

# Export the path so that the scripts run correctly PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin

A-Za-z0-9-不允许在cron脚本的文件名中,除非14.04真正启用了Linux Standards Base,只是A-Za-z0-9- – 请参阅此Launchpad Bug以获取更多信息

将“ backup.sh ”重命名为“ backupsh ”。

比“ sh backup.sh ”更好的testing是“ run-parts --verbose /opt/aws/ ”。 如果运行部分不显示您的文件名,cron将不会运行它。