我对Mac OS 10.6服务器下cron的行为感到困惑。我试图在这样的cronjob中运行两个脚本:
00 16 * * * /Users/myusername/script.sh
04 16 * * * /Users/myusername/crontest.sh
while' script.sh'包含一个wget命令:
#!/bin/sh
wget -r -l3 --no-parent -nc -A ".shtml" 'http://some.url/somethingelse/'
' crontest.sh'只包含一个测试脚本:
echo "hi" >> /Users/myusername/crontest.txt
问题是,' script.sh'不会开火,但是' crontest.sh'确实。 wget脚本没有触发的原因是什么?脚本是否需要特定的编码? cron是否在某处写了一个日志文件?
(我在shell中测试了wget命令,它工作正常。)
答案 0 :(得分:2)
cron在非常小的环境下运行脚本。特别是,它的PATH不包含所有常用的二进制目录,只包含/ usr / bin和/ bin,因此其他二进制目录(如wget)中的任何命令都不可用。
有几种方法可以解决这个问题。一种选择是让您的脚本提供wget的完整路径:
#!/bin/sh
/usr/local/bin/wget -r -l3 --no-parent -nc -A ".shtml" 'http://some.url/somethingelse/'
(或其实际路径 - 使用which wget
查找。)
另一种方法是在脚本中显式设置PATH:
#!/bin/sh
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
wget -r -l3 --no-parent -nc -A ".shtml" 'http://some.url/somethingelse/'
(或者你通常使用的任何路径;确保它包含wget的位置。)
或者您可以在crontab中设置PATH:
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
00 16 * * * /Users/myusername/script.sh
04 16 * * * /Users/myusername/crontest.sh
答案 1 :(得分:0)
很抱歉显而易见:两个脚本上的执行标志和权限设置相同吗?
答案 2 :(得分:0)
同时考虑实现这一目标。作为一个长期以来的Unix用户,我最初发现启动困难复杂,但现在我一直在使用它,我发现丰富的功能设置优于可靠的ole cron。