Scrapy crawler in Cron-job
Ich durchführen wollen mein scrapy crawler von cron-job .
ich erstellen bash-Datei getdata.sh wo scrapy-Projekt befindet sich mit Spinnen
#!/bin/bash
cd /myfolder/crawlers/
scrapy crawl my_spider_name
Meine crontab sieht so aus , ich wollt in jeder 5-Minuten -
*/5 * * * * sh /myfolder/crawlers/getdata.sh
aber es nicht funktioniert , was ist falsch , wo ist mein Fehler ?
wenn ich Sie ausführen, meine bash-Datei aus dem terminal-sh /myfolder/crawlers/getdata.sh es funktioniert gut
- ist die
sh
"Präfix" in*/5 * * * * sh /myfolder/crawlers/getdata.sh
erforderlich zum ausführen von shell-Skripts auscrontab
???
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löste ich dieses problem, einschließlich PFAD in bash-Datei
Hinzufügen der folgenden Zeilen in
crontab -e
läuft mein scrapy crawl um 5 Uhr morgens, jeden Tag. Dies ist eine leicht modifizierte version von crocs - ' AntwortOhne Einstellung
$PATH
, cron würde mir eine Fehlermeldung "Befehl nicht gefunden: scrapy". Ich denke, das ist, weil /usr/bin ist, wo Skripte ausgeführt werden Programme, gespeichert in Ubuntu.Beachten Sie, dass der vollständige Pfad für meine scrapy Projekt ist
/home/user/project_folder/project_name
. Ich lief die env-Befehl in cron und bemerkt, dass das Arbeitsverzeichnis ist/home/user
. Daher habe ich übersprungen/home/user
in meiner crontab obenDen cron-log kann hilfreich sein beim Debuggen
Andere Möglichkeit ist, zu vergessen, mit einem shell-Skript und die Kette die die beiden Befehle zusammen, die direkt in den cronjob. Nur stellen Sie sicher, dass die PATH-variable gesetzt ist, bevor die ersten scrapy cronjob in die crontab Liste. Ausführung:
Bearbeiten und haben einen Blick. Ich habe mehrere scrapy-crawler, die zu den verschiedenen Zeiten. Einige alle 5 Minuten, andere zweimal am Tag.
Alle jobs befindet sich nach der PATH-variable finden scrapy. Hier der erste Lauf alle 5 Minuten und die 2. zweimal am Tag um 1 Uhr nachts und 1 Uhr. Ich fand das einfacher zu verwalten. Wenn Sie andere Binärdateien ausführen, dann müssen Sie Ihre Standorte auf den Weg.
Für alle, die mit
pip3
(oder ähnlich) zu installierenscrapy
, hier ist eine einfache inline-Lösung:Ersetzen:
*/10 * * * *
mit Ihrem cron-pattern~/project/path
mit dem Pfad zu Ihrem scrapy-Projekt (wo Ihrscrapy.cfg
ist)something
mit der spider-Namen (verwenden Siescrapy list
in Ihrem Projekt herausfinden)~/crawl.log
mit Ihren log-Datei-position (im Falle Sie haben wollen, Protokollierung)~/.local/bin/scrapy
kommen, oder welche Bedeutung hat es?scrapy
Befehl war günstig für mich, wenn es bei der Installation mitpip3
. Da die Ebenescrapy
Befehl nicht verfügbar war in meinem cron-Kontext, ich löste es, indem der Zugriff direkt.PATH
?PATH
ist irrelevant, wenn der Zugriff auf den Befehl direktÜberprüfen, wo scrapy installiert ist mit "die scrapy" - Befehl.
In meinem Fall, scrapy ist installiert in
/usr/local/bin
.Öffnen Sie die crontab zur Bearbeitung mit
crontab -e
.PATH=$PATH:/usr/local/bin
export PATH
*/5 * * * * cd /myfolder/path && scrapy crawl spider_name
Sollte es funktionieren.
Scrapy läuft alle 5 Minuten.
nicht, Ihr shell-Skript über die execute-Berechtigung?
z.B. können Sie tun,
ohne sh?
wenn Sie können dann löschen Sie die sh in der Zeile in der cron
chmod u+x /myfolder/crawlers/getdata.sh
geben Sie die execute-Berechtigung. das ist das, was die#!/bin/bash
Linie macht - das muss die erste Zeile in der Datei>/tmp/cron.log 2>&1
an das Ende des Befehls, um die Fehler sehen. Möglicherweise ist das script nicht zugreifenscrappy
wenn es in einem non-standard Platzin meinem Fall scrapy ist in .local/bin/scrapy geben Sie den richtigen Pfad der Abstreifer und nennen es Arbeit perfekt
/home/user/scrapy.melden Sie es verwenden, um speichern Sie die Ausgabe und Fehler in scrapy.melden Sie sich für das check it-Programm arbeiten, oder nicht
danke.