Ich versuche, einige Scrapy Spiders auf meinem Server programmgesteuert mit Crontab auszuführen. Ich habe mehrere Befehle ausprobiert und habe schließlich diese Crontab, die nicht ausgeführt wird und mir auch keinen hilfreichen Fehler anzeigt.
#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours
Diese Crontab funktioniert nicht und syslog
ich erhalte Folgendes:
Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)
In der Ausgabe erhalte ich Folgendes:
/bin/sh: 1: scrapy: not found
Ich habe Scrapy installiert und die Befehle funktionieren eigenständig einwandfrei.
Antwort1
Cron sendet standardmäßig eine E-Mail mit der Ausgabe der ausgeführten Befehle an den Benutzer. Da jedoch kein MAT (Mail Transfer Agent) installiert ist, kann Cron die E-Mail nicht senden und verwirft die Befehlsausgabe. Sie können die Ausgabe selbst in eine Datei oder ins Leere (/dev/null) umleiten, indem Sie Ihre Cron-Zeile wie folgt ändern:
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1
oder
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1
Die zweite Möglichkeit besteht darin, einen MTA (Sendmail, Postfix oder ähnliches) zu installieren und ihn für die Verarbeitung lokaler E-Mails zu konfigurieren.
Oder Sie stellen sicher, dass Ihr Skript keine Ausgabe generiert.
Antwort2
Die scrapy
Datei kann nirgendwo gefunden werden PATH
(siehe unten). Um herauszufinden, wo sie sich befindet, verwenden Sie den folgenden Befehl in Ihrer interaktiven Shell:
which scrapy
Es wird der absolute Pfad angezeigt, z. B. /usr/local/bin/scrapy
. Geben Sie den absoluten Pfad zur Crontab ein:
47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours
Bezüglich der PATH
Variablen
DerPATH
Die Variable wird verwendet, um nach Programmen zu suchen, wenn Sie den genauen Pfad nicht in der Befehlszeile oder in einem Skript angeben. Sie wird durch die Profileinstellungen und auch durch Crontabs definiert. Sie sieht normalerweise so aus:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Das Beispiel stammt von mir /etc/crontab
. Der Wert, den du in deiner Crontab angegeben hast, sieht allerdings ungewöhnlich aus…
PATH=/root/
Versuchen Sie nicht, dieArbeitsverzeichnisHier?!
In Bezug auf Shebang
Scharlachrotist die erste Zeile vieler Skripte. Sie gibt an, welcher Interpreter die Datei interpretieren soll. In einer Crontab macht sie keinen Sinn und Sie sollten sie entfernen. Crontab ist einDatenDatei für Cron, kein Skript.