为什么curl在cron的shell脚本中运行时不会产生输出?

时间:2013-12-20 10:11:55

标签: shell curl cron crontab

我有一个shell脚本,用于从~/.bin/shellScript

中的某些服务器获取数据
OLD="$(curl --silent http://someServer:12345/stats.json | json someKey)"
NEW="$(curl --silent http://otherServer:12345/stats.json | json someKey")

echo "OLD $OLD - NEW $NEW"

我想回应交互式运行它的结果,但我一直想记录收集的结果。 所以crontab -e,然后添加*/5 * * * * /home/user/.bin/shellScript >> /media/dump/scriptDump

以交互方式运行脚本工作正常 - 我得到OLD 123 - NEW 456,但是当我查看从cron运行的内容时,我得到OLD - NEW,没有数据被curl抓住。

1 个答案:

答案 0 :(得分:1)

正如在评论中发现的那样,您需要在调用时添加json的完整路径。这是因为crontab的环境有限。

所以而不是

OLD="$(curl --silent http://someServer:12345/stats.json | json someKey)"
NEW="$(curl --silent http://otherServer:12345/stats.json | json someKey")

必须是

OLD="$(curl --silent http://someServer:12345/stats.json  | /path/to/json someKey)"
NEW="$(curl --silent http://otherServer:12345/stats.json | /path/to/json someKey)"
                                                           ^^^^^^^^^^^^^

[[注意您的第二行有")而不是)"]]


否则,您还可以将json路径添加到crontab中,如How to get CRON to call in the correct paths所示:

PATH=/usr/local/sbin: ... :/path/of/json