繁体   English   中英

Cronjob 无法运行 bash 脚本并给出错误“aws : command not found”

[英]Cronjob fails to run a bash script giving an error “aws : command not found”

我有一个脚本可以使 .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 作业失败?

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

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

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

方法一:

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


方法二:

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

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

方法三:

(这种方法一般不鼓励)

在您的 crontab 中添加以下行(根据需要进行调整):

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

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

谢谢 Sakis,你的回答对我来说非常有效。 我很困惑为什么我的脚本可以从命令行运行得很好,但从 cron 运行时却出错。 原因是我试图在 bash 中使用一个可执行文件,由于缺乏对路径的引用,该可执行文件不是可识别的命令。 现在很清楚了。 正是这样做的 - 不需要 root 或其他 sudo。 在您自己的 shell 中,回显 $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

瞧!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM