Curl 在 cron 执行时不起作用

Curl 在 cron 执行时不起作用

我有如下脚本

#!/bin/bash

date

curl http://lab.nextt.com.br/somefile1.html -z ../public_html/somefile1.html -o ../public_html/somefile1.html --silent --show-error --location

curl http://lab.nextt.com.br/somefile2.html -z ../public_html/somefile2.html -o ../public_html/somefile2.html --silent --show-error --location

curl http://lab.nextt.com.br/somefile3.html -z ../public_html/somefile3.html -o ../public_html/somefile3.html --silent --show-error --location

curl http://lab.nextt.com.br/somefile4.html -z ../public_html/somefile4.html -o ../public_html/somefile4.html --silent --show-error --location

我有一个像这样的 crontab

* * * * * /home/user/cronjobs/cronjob-updatefiles >> /home/user/cronjobs/log

我的目的是:每当公共文件有更新时,就将其下载到我的服务器。

到目前为止一切都很好。

当我在 shel 上手动运行脚本时,文件会按预期下载并更新。

而且 cron 正在运行... /home/user/cronjobs/log 正在使用日期进行更新(在脚本的开头)。但是 curl 命令不会通过 cron 执行。文件未更新。

为什么当我直接在 shell 上运行时它可以运行,而当我通过 cron 运行时却不运行?

答案1

当您从命令行运行脚本时,您自己的环境变量(包括 $PATH)正在使用中。但是,当您从 cron 运行脚本时,$PATH 会有所不同。我猜是因为您在 cron 的 $PATH 环境变量中的路径中没有 curl。

解决方案:在脚本中,使用 cron 的完整路径。

答案2

我已经解决了这个问题,我可以手动运行脚本,但是当我从 cron 尝试时,它失败并显示“curl:未找到”。

在脚本中写入“curl”的任何位置都输入完整路径。

如何找到完整路径?只需在您的机器上运行命令“which curl”,您就会看到 curl 的路径并将其复制粘贴到您的脚本中。

答案3

我解决了这个问题。

Cron 在文件目录引用中迷失了。

当我改变的时候

curl http://lab.nextt.com.br/somefile1.html -z ../public_html/somefile1.html -o ../public_html/somefile1.html --silent --show-error --location

curl http://lab.nextt.com.br/somefile1.html -z /home/user/public_html/somefile1.html -o /home/user/public_html/somefile1.html --silent --show-error --location

有效。

我会让任何将来遇到此类问题的人都知道这一点。

相关内容