2011-06-02 2 views
0

Я полностью сбив с толку поведение cron под Mac OS 10.6 Server. Я пытаюсь запустить два сценария в cronjob, как это:mac os 10.6 server: crontab не запускает сценарий wget

00 16 * * * /Users/myusername/script.sh 
04 16 * * * /Users/myusername/crontest.sh 

В то время как '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 записывает файл журнала где-нибудь?

(я тестировал команду 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 в.)

или вы можете установить PATH в вашем кронтаб:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 
00 16 * * * /Users/myusername/script.sh 
04 16 * * * /Users/myusername/crontest.sh 
+0

Спасибо большое! Первый способ работает отлично. Я просто слепой или это редко упоминается в cron tutorials/FAQs ?? – ssulger

+0

[top google hit for 'cron faq'] (http://216.147.18.102/unixfaq/cron.shtml) упоминает эту проблему в разделе устранения неполадок (наряду с некоторыми другими распространенными ошибками), но это единственная страница, на которую я смотрел, что упоминает об этом. Вероятно, это должно быть более широко документировано, поскольку это довольно распространенная проблема при настройке записей cron. –

+0

Большое вам спасибо. Я боролся с этим больше недели. –

0

Извините за вопрос очевидного: Выполнить флаг и разрешения установлены одинаково на обоих сценариях?

+0

Да, они настроены на одинаковые настройки, и оба являются исполняемыми скриптами. – ssulger

+0

И вы выполнили скрипт.sh в оболочке или в ее команде wget? – Martin

+0

Я тестировал как скрипт, так и команду wget, содержащиеся в скрипте; оба работают отлично за пределами cron. – ssulger

0

Также подумайте о том, чтобы сделать скачок для запуска. Как давний человек из Unix, я изначально обнаружил, что запущен досадно сложный, но теперь, когда я его использую, я считаю, что набор функций богатого качества превосходит надежный ole cron.

Смежные вопросы