我有一个脚本在.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 ,即可在当前会话中查看其内容 .
$PATH
echo $PATH
为要执行的作业启动cron会话时,不会设置此变量 .
要解决这个问题,有几种方法:
在shell脚本中使用完整路径名,并且不依赖于PATH变量来查找可执行文件 .
在脚本的开头添加以下内容(根据需要进行调整):
PATH=/sbin:/bin:/usr/sbin:/usr/bin
(通常不鼓励这种方法)
在crontab中添加以下行(如果需要,调整):
您可以在终端中执行 echo $PATH 并将输出复制到crontab中的上述变量中 .
1 回答
这是因为您的系统依赖于环境变量来搜索可执行文件的位置,并且该变量未在cron会话中设置 . 此变量名为
$PATH
. 只需在终端中键入echo $PATH
,即可在当前会话中查看其内容 .为要执行的作业启动cron会话时,不会设置此变量 .
要解决这个问题,有几种方法:
方法1:
在shell脚本中使用完整路径名,并且不依赖于PATH变量来查找可执行文件 .
方法2:
在脚本的开头添加以下内容(根据需要进行调整):
方法3:
(通常不鼓励这种方法)
在crontab中添加以下行(如果需要,调整):
您可以在终端中执行
echo $PATH
并将输出复制到crontab中的上述变量中 .