2016-08-11 126 views
0

失败通crontab中运行时,我得到这个错误sh脚本手动运行正常,在crontab中

/aws-cron-job/Ap_Hourly_xxxDelete.sh:1:./aws-cron-job/Ap_Hourly_xxxDelete.sh :EC2-描述的快照:未发现

./aws-cron-job/Ap_Hourly_xxxDelete.sh:1:./aws-cron-job/Ap_Hourly_xxxDelete.sh:EC2-删除快照:未发现

这是我的脚本:文件名= xxx.sh

ec2-delete-snapshot --region ap-southeast-1 $(ec2-describe-snapshots --region ap-southeast-1 | sort -r -k 5 | grep "Ap_Hourly" | sed 1,4d | awk '{print $2};' | tr '\n' ' ') 

这是我的cronjob

30 05-15 * * 1-6 ./aws-cron-job/Ap_Hourly_xxxDelete.sh > ./aws-cron-job/Ap_Hourly_xxxDelete.txt 2>&1 

我可以通过手动的cronjob但不运行此脚本。问题在哪里。提前致谢。

+0

是'EC2-删除-snapshot'和'的'$ PATH EC2-描述,snapshots' '?也许你应该修改'PATH'?或者使用这些程序的完整路径? –

+0

您使用'。/'不会在cron中工作。您需要更改这些参考完整路径。 –

+0

是,ec2-delete-snapshot和ec2-describe-snapshots位于$ PATH –

回答

1

命令以cron作业运行的环境非常有限,像$PATH$HOME这样的东西并不是您所期望的。

要分析这一点,使用crontab -e添加作业* * * * * /bin/bash -c env >/tmp/cron.env,然后看看这个文件里面看到什么bash知道什么时候开始你的机器上cron工作有关。这项工作将每分钟运行一次,因此,当您完成调试时,请将其删除,并使用crontab -e

错误ec2-describe-snapshots: not found表明当脚本作为cron作业运行时,ec2-describe-snapshots可能不会在$PATH中找到。要解决这个问题,首先从which ec2-describe-snapshots的shell中找到它的正常位置。然后,在调用ec2-describe-snapshots之前,在脚本中使用完整路径(/some/path/ec2-describe-snapshots ...),或在脚本中调整$PATHPATH=/some/path:$PATH)。

另外,在crontab条目中使用完整路径是一种很好的习惯,既可用于可执行文件,也可用于日志文件。但是,OP中的错误不会来自此。

+0

SHELL =/bin/sh PATH =/sbin:/ bin:/ usr/sbin:/ usr/bin:/ usr/local/sbin :在/ usr/local/bin中 PWD = /家庭/ ubuntu的 LANG =的en_US.UTF-8 SHLVL = 1 HOME = /家庭/ ubuntu的 LOGNAME = ubuntu的 _ =的/ usr /仓/ env的 这是我从cronjob上面得到的 –

+0

也许'ec2-describe-snapshots'不在那个'PATH'中?请参阅编辑。 –

+0

是的,它在$ PATH中。我可以从任何地方简单运行 –

1

我相信你应该只在你的cronjobs中放置绝对路径。正如你看到的问题,你写道:

./aws-cron-job/Ap_Hourly_xxxDelete.sh 

,我想你应该写:

/<rootpath>/aws-cron-job/Ap_Hourly_xxxDelete.sh 
+0

/home/ubuntu/aws-cron-job/Ap_Hourly_SnapshotDelete.sh - 这是文件位置的完整路径 –