【问题标题】:Sh Script runs fine manually, fails in crontabSh 脚本手动运行良好,在 crontab 中失败
【发布时间】:2016-12-18 06:59:00
【问题描述】:

通过 crontab 运行时出现此错误

/aws-cron-job/Ap_Hourly_xxxDelete.sh: 1: ./aws-cron-job/Ap_Hourly_xxxDelete.sh: ec2-describe-snapshots: 未找到

./aws-cron-job/Ap_Hourly_xxxDelete.sh: 1: ./aws-cron-job/Ap_Hourly_xxxDelete.sh: ec2-delete-snapshot: 未找到

这是我的脚本: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。这其中的问题在哪里。提前致谢。

【问题讨论】:

  • ec2-delete-snapshot 和 ec2-describe-snapshots 在 $PATH 中吗?也许你应该修改PATH?还是使用这些程序的完整路径?
  • 您对./ 的使用在cron 中不起作用。您需要更改它们以引用完整路径。
  • 是的,ec2-delete-snapshot 和 ec2-describe-snapshots 在 $PATH 中

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


【解决方案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 ...),要么在调用ec2-describe-snapshots之前在脚本(PATH=/some/path:$PATH)中调整$PATH。

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

【讨论】:

  • SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin PWD=/home/ ubuntu LANG=en_US.UTF-8 SHLVL=1 HOME=/home/ubuntu LOGNAME=ubuntu _=/usr/bin/env 这是我从上面的cronjob得到的
  • 也许ec2-describe-snapshots 不在那个PATH 中?见编辑。
  • 是的,它在 $PATH 中。我可以从任何地方简单地运行
  • bin/sh: 1: /home/ubuntu/aws-con-job/Ap_Hourly_SnapshotDelete.sh: not found 这是现在。
  • Ap_Hourly_SnapshotDelete.sh 和 ec2-describe-snapshots 的完整路径是什么?
【解决方案2】:

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

./aws-cron-job/Ap_Hourly_xxxDelete.sh

我认为你应该写:

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

【讨论】:

  • /home/ubuntu/aws-cron-job/Ap_Hourly_SnapshotDelete.sh - 这是文件位置的完整路径
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 2013-02-06
  • 2014-01-02
  • 1970-01-01
  • 2021-05-01
  • 2013-01-14
  • 1970-01-01
相关资源
最近更新 更多