Cronjob无法运行bash脚本,发出错误" aws:command not found"

时间:2017-08-07 11:01:25

标签: bash amazon-web-services cron putty

我有一个脚本可以在.sh文件中使Amazon CloudFront无效,当我使用bash(bash /../filename.sh)运行它时它可以正常工作。我需要在每个星期四使我的发行版无效,所以我写了一个cron作业,但它给出了错误" aws:command not found "。

这是我的cron工作       45 10 * * 2 / usr / bin / bash /var/www/cms/file.sh 我错过了什么?当bash可以运行脚本时,为什么cron作业失败了?

2 个答案:

答案 0 :(得分:0)

这是因为您的系统依赖于环境变量来搜索可执行文件的位置,并且该变量未在cron会话中设置。此变量名为$PATH。只需在终端中输入echo $PATH,即可在当前会话中查看其内容。

当为要执行的作业启动cron会话时,不会设置此变量。

要解决此问题,有以下几种方法:

方法1:

在shell脚本中使用完整路径名,并且不依赖于PATH变量来查找可执行文件。

方法2:

在脚本的开头添加以下内容(根据需要进行调整):

PATH=/sbin:/bin:/usr/sbin:/usr/bin

方法3:

(通常不鼓励这种方法)

在crontab中添加以下行(如果需要,调整):

PATH=/sbin:/bin:/usr/sbin:/usr/bin

您可以在终端中执行echo $PATH并将输出复制到crontab中的上述变量中​​。

答案 1 :(得分:0)

谢谢Sakis,您的回答对我来说非常有效。 我不知道为什么我的脚本可以从命令行正常运行,但是从cron运行时却出错。原因是我试图从bash中使用一个可执行文件,由于缺少对路径的引用,该文件不是公认的命令。现在很清楚。 确实做到了这一点-不需要root或其他sudo。 在您自己的外壳中,回显$ PATH。复制此行,然后输入您自己的cron(将影响该cron中的所有作业)或输入脚本的顶部。

PATH=/home/myuser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

瞧!