2012-05-22 6 views
4

Я пытаюсь запустить скрипт casper.js через cron. Все отлично работает, когда я запускаю скрипт вручную, но когда я запускаю его через хроны я получаю следующие ошибки:Запуск сценария casper.js из cron

Traceback (most recent call last): 
File "/usr/local/bin/casperjs", line 46, in <module> 
    status = subprocess.call(CASPER_COMMAND) 
File "/usr/lib/python2.6/subprocess.py", line 480, in call 
    return Popen(*popenargs, **kwargs).wait() 
File "/usr/lib/python2.6/subprocess.py", line 633, in __init__ 
    errread, errwrite) 
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

Моей записи кронтаба является:

30 9 * * * /usr/local/bin/casperjs lib/fsaupload.js arg1 arg2 arg3

Я также попытался

30 9 * * * python /usr/local/bin/casperjs lib/fsaupload.js arg1 arg2 arg3

Это дает мне тот же результат. Есть идеи? Я предполагаю, что это может быть вопрос path, но не знаю, куда идти отсюда!

ответ

4

Вы должны, вероятно, использовать абсолютный путь к вашему Casper сценарий, что-то вроде:

30 9 * * * /usr/local/bin/casperjs /absolute/path/to/lib/fsaupload.js arg1 arg2 arg3 

Мои два цента.

Edit:

Хорошо, это было немного глупо. Вы можете также установить пользовательский путь к phantomjs исполняемого файла, установив переменную PHANTOMJS_EXECUTABLE среды:

$ export PHANTOMJS_EXECUTABLE="/path/to/phantomjs" 

Затем запустите скрипт как обычно:

/usr/local/bin/casperjs /absolute/path/to/lib/fsaupload.js arg1 arg2 arg3 

Подсказка: Если ваш кронтаб работает в качестве другого пользователя, проверка что он имеет доступ к пути phantomjs.

Надеюсь, что это поможет (и работает).

Edit снова

Подождите, трассировки стека вы получаете говорит, что вы используете старую версию CasperJS (например. subprocess модуль не более б). Попробуйте с более поздней версией :)

+0

Хмммм ... Все еще ничего. Я все равно получаю ту же ошибку. Я даже попробовал указать полный путь к Python, но все равно не кубик. Есть идеи? – Pezholio

+0

Отредактировано, держите меня в курсе :) – NiKo

+0

У этого есть - спасибо! :) – Pezholio

3

Это старый вопрос, но по-прежнему актуальный - я просто провел 4 часа, пытаясь разрешить это, не найдя прямого решения. То, что происходило для меня, было точно таким же, я мог запустить скрипт casper.js из командной строки оболочки, но не через задание cron. Как указано в NiKo, но недостаточно ясно для меня до получить, casper должен знать, где Phantomjs для работы.

Я создал сценарий оболочки, cron_wrap.sh, который содержит путь к директории бен Phantomjs:

#!/bin/bash 
PATH=/usr/local/src/phantomjs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
/usr/local/bin/casperjs --ignore-ssl-errors=true /srv/www/apps/myscript.js 

Сделайте свой .sh исполняемый файл, теперь вы можете добавить скрипт хрон:

00 09 * * * /srv/www/apps/myscript.js 
2

Это старый, более старый вопрос, но я тоже занимался этим некоторое время. Я больше не мог перезапускать Apache (для Django) через cron (говорить о времени простоя), и это в конечном итоге стало проблемой.Вместо того, чтобы сценарий обёртку Джесси Q используется, я просто добавил мой casperjs/фантомным дополненного пути к вершине моего кронтаба

PATH=/usr/local/src/phantomjs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
/usr/local/bin/casperjs 

и теперь он работает. Вы можете проверить свою среду хрон путем записи в файл в кронтаб так:

* * * * * env > ~/cronenv 

просто ВИМ в нее, чтобы увидеть, что ваш текущий хрон путь. Приятно отлаживать эту проблему.