Sh Script手动运行正常,在crontab中失败

时间:2016-08-11 13:39:49

标签: bash shell amazon-web-services amazon-ec2 cron

通过crontab运行时出现此错误

  

/aws-cron-job/Ap_Hourly_xxxDelete.sh:1:./aws-cron-job/Ap_Hourly_xxxDelete.sh:ec2- describe-snapshots:not found

     

./ aws-cron-job / Ap_Hourly_xxxDelete.sh:1:./aws-cron-job/Ap_Hourly_xxxDelete.sh:ec2-delete-snapshot:not found

这是我的脚本:filename = 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运行。这个问题在哪里?提前谢谢。

2 个答案:

答案 0 :(得分: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中查找其正常位置。然后,在调用/some/path/ec2-describe-snapshots ...之前,在脚本($PATH)中使用完整路径,或在脚本(PATH=/some/path:$PATH)中调整ec2-describe-snapshots

此外,在crontab条目中使用完整路径(包括可执行文件和日志文件)都是一个好习惯。但是,OP中的错误不会来自此。

答案 1 :(得分:1)

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

./aws-cron-job/Ap_Hourly_xxxDelete.sh

我认为你应该写:

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