2013-06-21 23 views
14

Chcę uruchomić mojego robota scrapy z zadania cron.Scrapy crawler in Cron job

tworzę bash getdata.sh pliku, w którym projekt scrapy znajdujące się z jego pająki

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

Moja crontab wygląda tak, chcę go wykonać w każdym 5 minut

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

ale nie działa, co jest nie tak, gdzie jest mój błąd?

kiedy wykonać mój plik bash z terminala sh /myfolder/crawlers/getdata.sh działa dobrze

Odpowiedz

16

I rozwiązać ten problem w tym PATH w pliku bash

#!/bin/bash 

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

+1 Miał ten sam problem i po prostu nie mógł tego zrozumieć. Powinieneś oznaczyć swoje pytanie jako zaakceptowaną odpowiedź. :) – Xethron

+1

Domyślam się, że PATH nie zawsze powinna być ustawiona na/usr/local/bin, zależy to od środowiska i serwera, na którym się znajdujesz, prawda? Do czego więc należy ustawić PATH? Folder z ....? –

0

robi twój skrypt ma wykonać pozwolenie?

np. czy możesz bez niego wykonać

?

jeśli można następnie można upuścić sh w linii w cron

+0

Nie zapisuje, że uprawnienia są odmawiane – beka

+0

musisz wykonać polecenie "chmod u + x/myfolder/crawlers/getdata.sh", aby nadać temu uprawnienie do wykonywania. tak właśnie robi linia '#!/bin/bash' - która musi być pierwszą linią w pliku – KeepCalmAndCarryOn

+0

i daje mu uprawnienia i usuwa" sh "w crontab, ale nadal nie działa: S – beka

2

Inną opcją jest zapomnieć przy użyciu skryptu powłoki i łańcuch z dwa polecenia razem bezpośrednio w cronjob. Tylko upewnij się, że zmienna PATH jest ustawiona przed pierwszym cronjob scrapy na liście crontab. Uruchom:

crontab -e 

do edycji i spojrzenie. Mam kilka robotów do scrapy, które działają w różnych momentach. Niektóre co 5 minut, inne dwa razy dziennie.

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 

Wszystkie prace znajdujące się za zmienną PATH odnajdą scrapy. Tutaj pierwsza będzie biegać co 5 minut, a druga 2 razy dziennie o 1 rano i 1 po południu. Znalazłem to łatwiejsze do zarządzania. Jeśli masz uruchomione inne pliki binarne, może być konieczne dodanie ich lokalizacji do ścieżki.

8

Dodanie następujących wierszy w crontab -e uruchamia indeksowanie scrapy o 5 rano każdego dnia. Jest to nieco zmodyfikowana wersja odpowiedzi Crocs'

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

Bez ustawiania $PATH, cron dałby mi błąd «nie znaleziono polecenia: scrapy». Chyba dlatego, że/usr/bin to skrypty do uruchamiania programów przechowywane w Ubuntu.

Należy pamiętać, że pełna ścieżka do mojego projektu scrapy to /home/user/project_folder/project_name. Uruchomiłem polecenie env w cron i zauważyłem, że katalog roboczy to /home/user.Dlatego zrezygnowałem /home/user w moim crontab powyżej

Dziennik cron mogą być pomocne podczas debugowania

grep CRON /var/log/syslog 
1

Dla każdego, kto zwyczajnie pip3 (lub podobne), aby zainstalować scrapy, tutaj jest to proste rozwiązanie inline:

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

Wymienić:

*/10 * * * * z cron wzór

~/project/path ze ścieżką do projektu scrapy (gdzie scrapy.cfg IS)

something o nazwie Pająk (wykorzystanie scrapy list w projekcie, aby dowiedzieć się)

~/crawl.log ze swojej pozycji w pliku dziennika (w przypadku chcesz mieć logowanie)