Crontab läuft mit Fehlern

Crontab läuft mit Fehlern

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 syslogich 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 scrapyDatei 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 PATHVariablen

DerPATHDie 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.

verwandte Informationen