2013-06-21 2 views
14

Я хочу выполнить свой сканирующий гусеничный станок с помощью cron.Scraw crawler in Cron job

я создать Баш getdata.sh файл, где SCRAPY проект расположен с его пауков

#!/bin/bash 
cd /myfolder/crawlers/ 
scrapy crawl my_spider_name 

Мой кронтаб выглядит так, я хочу, чтобы выполнить его в каждые 5 минут

*/5 * * * * sh /myfolder/crawlers/getdata.sh 

но не работает, что не так, где моя ошибка?

когда я исполню мой файл Баш от терминала ш /myfolder/crawlers/getdata.sh он работает отлично

ответ

16

Я решил эту проблему, в том числе PATH в Баш файл

#!/bin/bash 

cd /myfolder/crawlers/ 
PATH=$PATH:/usr/local/bin 
export PATH 
scrapy crawl my_spider_name 
+0

+1 У той же проблемы и просто не мог понять это. Вы должны отметить свой вопрос как принятый ответ. :) – Xethron

+1

Я думаю, что PATH не всегда должен быть установлен в/usr/local/bin, это зависит от того, какая среда и сервер вы находитесь, правильно? Итак, что нужно установить PATH? Папка ....? –

0

делает ваш сценарий оболочки иметь разрешение?

например. вы можете сделать

/myfolder/crawlers/getdata.sh 

без sh?

, если вы можете, то вы можете отказаться от ш в строке в хрон

+0

Нет, он пишет, что разрешения запрещены. – beka

+0

вам нужно сделать 'chmod u + x/myfolder/crawlers/getdata.sh', чтобы дать ему разрешение на выполнение. это то, что делает строка '#!/bin/bash', которая должна быть первой строкой в ​​файле – KeepCalmAndCarryOn

+0

. Я даю ему разрешения и удаляю« sh »в crontab, но он все равно не работает: S – beka

2

Другой вариант забыть, используя сценарий оболочки и цепи на две команды вместе непосредственно в cronjob. Просто убедитесь, что переменная PATH задана перед первой cropjob scrapy в списке crontab. Пробег:

crontab -e 

Редактировать и посмотреть. У меня есть несколько сканирующих сканеров, которые работают в разное время. Каждые 5 минут, другие два раза в день.

PATH=/usr/local/bin 
    */5 * * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_1 
    * 1,13 * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_2 

Все задания, расположенные после переменной PATH, будут найдены. Здесь первый будет проходить каждые 5 минут, а второй - два раза в день в 1:00 и 13:00. Мне было легче справиться. Если у вас есть другие исполняемые файлы, вам может потребоваться добавить их места в путь.

8

Добавление следующих строк в crontab -e запускает мой сканирующий ползание в 5 утра каждый день. Это слегка измененный вариант ответа Crocs'

PATH=/usr/bin 
* 5 * * * cd project_folder/project_name/ && scrapy crawl spider_name 

Без установки $PATH, хрон бы дать мне ошибку „команда не найдена: Scrapy“. Я предполагаю, что это потому, что/usr/bin - это где скрипты для запуска программ хранятся в Ubuntu.

Обратите внимание, что полный путь для моего проекта по очистке - /home/user/project_folder/project_name. Я запустил команду env в cron и заметил, что рабочий каталог /home/user.Поэтому я пропустил /home/user в моем кронтабе выше

Журнал хрон может быть полезно при отладке

grep CRON /var/log/syslog 
1

Для тех, кто использовал pip3 (или аналогичный) для установки scrapy, вот простое рядное решение:

*/10 * * * * cd ~/project/path && ~/.local/bin/scrapy crawl something >> ~/crawl.log 2>&1 

Заменить:

*/10 * * * * с рисунком хрон

~/project/path с путем к вашему проекту Scrapy (где ваш scrapy.cfg есть)

something с именем паука (используйте scrapy list в проекте, чтобы узнать)

~/crawl.log с вашей позицией файла журнала (в случае вы хотите вести журнал)