我有如下脚本
#!/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
有效。
我会让任何将来遇到此类问题的人都知道这一点。