通过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运行。这个问题在哪里?提前谢谢。
答案 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