Wie man ein Shell Skript per Cron-Job
Habe ich ein Shell-Skript, wie unter
echo "Hello World"
Das Skript befindet sich in /root/scripts/
Ordner wie test.sh
Ich habe auch ein cron-job wie folgt
0-59 * * * * ./scripts/test.sh
Nun der cron-job wird nicht gedruckt, der Inhalt test.sh
jede minute.
Lassen Sie mich wissen, ob ich einen falschen Verzeichnis oder ich habe ein anderes problem in meinem code.
InformationsquelleAutor user1093513 | 2012-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde
/root/scripts/test.sh
. Ich weiß nicht, was cron betrachten würde als die aktuellen Verzeichnis...test.sh > /tmp/cron.log
(würden Sie wahrscheinlich wollen redirect stderr irgendwann auch mit2>&1
). Ansonsten wirst du nicht um die Ausgabe zu sehen. Es wird per post an die cronjob Besitzerchmod +x /root/scripts/test.sh
)#!/bin/sh
oder ähnlicheImmer Sachen laufen unter cron ist notorisch schwierig. Cron-jobs laufen mit einem Massen - " cut-down-Umgebung. Es ist lehrreich, drucken Sie die Umgebung zur Verfügung, um Ihr Skript (verwenden Sie
env
) und vergleichen/Kontrast mit dem, was Sie zur Verfügung haben, aus Ihren interaktiven shell.Nein, die Ausgabe von cron-Befehle per E-Mail an den Besitzer der crontab.
thx für den Hinweis re-mailing. Ich habe in der Antwort
InformationsquelleAutor Brian Agnew
Sollten Sie verwenden
zur " run " - Skript in jeder minute
und überprüfen Sie Eigentümer Ihres Skript-Ordner, wenn Besitzer nicht permssion auf execute script-Erlaubnis oder den Eigentümer ändern, über die Berechtigung
InformationsquelleAutor Vaibhav Jain
Beim hinzufügen der Datei in das cron nicht verstehen,'. /scripts/test.sh'. So sollten Sie cron wie folgt:
Und fügen Sie die Berechtigung für die Datei:
Wenn das Skript ausführen, okey.
InformationsquelleAutor Tannetto
Einem gemeinsamen problem konfrontiert sind, neue unix-Benutzer bei der Verwendung von cron zu starten Skripts ist, dass deren cronjobs nicht haben Zugang zu der gleichen Umgebung wie Ihre Benutzer-shell. So ein Skript ausgeführt, in der shell eines Benutzers funktioniert perfekt, aber schlägt fehl, wenn der Aufruf über cron. Die Nummer eins Täter in diesem Fall ist, dass die shell $PATH-environment-variable unterscheidet sich von dem der cronjob der Schale.
Test '/bin/echo $PATH > myShellPath'. In der cron-Lauf "/bin/echo $PATH > myCronPath'. Vergleichen Sie myShellPath mit myCronPath.
Im Beispiel wird vorausgesetzt, dass das Skript ausgeführt wird echo, die sich auf meinem CENTOS6-system ist zu finden unter /bin. Der echo-Befehl wird von der shell durch die Suche nach der 'echo' die Datei in einem der Verzeichnisse, die in der $PATH-Umgebungsvariable. Wenn dein cronjob die $PATH-Umgebungsvariable nicht enthalten /bin, der echo-Befehl wird fehlschlagen.
Ob das das problem ist, die einfachste Lösung ist es, explizit den Pfad zu 'echo' in Ihrem Skript. Zum anzeigen Ihres Systems vollständigen Pfad für echo, Art 'das echo' in der shell.
Beispiel:
In diesem Fall Bearbeiten Sie das Skript, und ersetzen Sie das "echo" mit '/bin/echo'. Besser noch, setzen Sie die $PATH-variable in Ihrem Skript enthalten das Verzeichnis, in dem echo befindet.
Weitere Informationen Forschung ", was shell bin ich laufen und wie sind meine Umgebungsvariablen setzen?", "was ist eine shell cron verwenden und wie kann ich cron-Umgebungsvariablen?", "wie sehen meine cronjob - Umgebungsvariablen?"
InformationsquelleAutor mcchiz