我正在尝试在我的 ec2 amazon 服务器 (ubuntu 14.04) 上运行备份脚本,以自动创建 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/
[email protected]
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”就可以了。(创建了快照。)
有任何想法吗?
答案1
你的PATH
变量应该是目录,因此假设您的aws
可执行文件位于/usr/local/bin/aws
,您的程序PATH
应该是这样的:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
另外,最好通过像这样的“hashbang”设置 shell,而不是使用SHELL
环境变量,因为这将允许 crontab 自动使用正确的解释器:
#!/bin/bash
答案2
我遇到了同样的错误。假设您已安装先决条件,并且手动运行命令有效,但在 Cron 中无效,则可能是 cron 命令未显示正确的路径。您可以通过运行 crontab -e 然后将路径直接输入到 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
答案3
除非 14.04 真正启用了 Linux 标准库,否则 cron 脚本的文件名中不允许使用点字符,请A-Za-z0-9-
参阅这个 Launchpad 错误了解更多信息
将“ backup.sh
”重命名为“ backupsh
”。
比“ ”更好的测试sh backup.sh
是“ run-parts --verbose /opt/aws/
”。如果 run-parts 没有显示您的文件名,则 cron 将不会运行它。