Vorwort Ich hatte kürzlich bei der Arbeit einige Probleme. Die von Crontab geplanten Aufgaben wurden nicht ausgeführt. Als ich später online suchte, stellte ich fest, dass die Hauptgründe waren: 1 Der Crond-Dienst ist nicht gestartet Crontab ist keine Funktion des Linux-Kernels, sondern basiert auf einem Crond-Dienst, der gestartet und gestoppt werden kann. Wenn es gestoppt ist, können keine geplanten Aufgaben ausgeführt werden. Die Lösung besteht darin, es einzuschalten: krone oder Dienst Crond starten Wenn die Meldung erscheint, dass der Crond-Befehl nicht existiert, wurde er möglicherweise versehentlich gelöscht. Sie können ihn unter CentOS mit diesem Befehl neu installieren: yum -y crontabs installieren 2. Berechtigungsprobleme Beispiel: Das Skript verfügt nicht über die Ausführungsberechtigung x. Die Lösung lautet: Fügen Sie Ausführungsberechtigungen hinzu oder verwenden Sie bash abc.sh zur Ausführung Es ist auch möglich, dass der Benutzer, dem die Crontab-Aufgabe gehört, keine Schreibberechtigung für ein bestimmtes Verzeichnis hat, was ebenfalls zum Fehlschlagen der Aufgabe führt. 3-Pfad-Problem Einige Befehle werden in der Shell normal ausgeführt, schlagen aber immer fehl, wenn sie in Crontab ausgeführt werden. Dies kann daran liegen, dass die von crontab verwendete sh den Pfad nicht korrekt identifiziert. Wenn Sie sich beispielsweise als root bei der Shell anmelden und /root/test.sh ausführen, solange Sie ./test.sh Das ist es. Dieses Skript finden Sie jedoch nicht in crontab. Schreiben Sie beispielsweise das komplette: /root/test.sh 4. Zeitunterschiedsproblem Aufgrund der Zeitdifferenz zwischen Server und Client basiert die Crontab-Zeit auf der Serverzeit. Der Zeitunterschied ist wirklich ärgerlich. Ich habe es selbst erlebt. Das Phänomen ist wie folgt: (1) Ich habe ein zeitgesteuertes Skript eingerichtet und den Befehl date verwendet, um die Serverzeit zu beobachten. Als das Skript ausgeführt wurde, wurde es nicht ausgeführt. (2) Aber ich habe das Skript so eingestellt, dass es einmal pro Minute ausgeführt wird, und es funktioniert einwandfrei Verdammt, die Serverzeit stimmt? Müssen wir eine Zeitzone hinzufügen? Also habe ich versucht, die Skriptzeit um 10, 12 oder 8 Stunden zu reduzieren, aber es hat nicht funktioniert. Es ist jedoch offensichtlich, dass die Nichtausführung auf eine zeitliche Inkonsistenz zurückzuführen ist. Schließlich wurde das Problem mit den folgenden beiden Zeilen gelöst: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime Service Crond Neustart Siehe diesen Artikel: https://www.jb51.net/article/154296.htm 5. Variable Probleme Manchmal enthält der Befehl Variablen, aber Crontab hat sie bei der Ausführung nicht, was ebenfalls zu einem Ausführungsfehler führen kann. Nach der Überprüfung wird mein geplantes Skript test.sh aus keinem der oben genannten Gründe ausgeführt. Tatsächlich besteht mein Skript nur aus einem Satz: #!/bin/bash echo 123 >> Testdatei Ich hoffe, das Timing-Skript, das ich auf diese Weise eingerichtet habe, testen zu können. Ich habe das Skript so eingestellt, dass es einmal pro Minute ausgeführt wird, aber ich kann die Datei nicht im Verzeichnis finden, in dem sich das Skript befindet. Ich führe es manuell aus # sh test.sh Sie können diese Datei jedoch im Verzeichnis sehen, in dem sich das Skript befindet Ich vermutete, dass crontab überhaupt nicht ausgeführt wurde, also fügte ich es direkt in crontab ein */1 * * * * echo 123 >> /home/denglinjie/testdatei Die Datei „testFile“ wird generiert und zeigt an, dass crontab ausgeführt wird. Es scheint also, dass mit meinem Skript selbst ein Problem vorliegt. Schließlich stellte ich fest, dass hier der vollständige Pfad für testFile geschrieben werden muss. Ich dachte naiv, dass testFile in dem Verzeichnis generiert würde, in dem sich das Skript befindet, also änderte ich es in die folgende Form #!/bin/bash echo 123 >> /data/denglinjie/testdatei Und dann klappt es. Tatsächlich kann man bei diesem Pfad sehr leicht einen Fehler machen. Angenommen, es gibt eine Skriptdatei test1.sh im Verzeichnis /home/denglinjie und dann gibt es eine Skriptdatei test2.sh im selben Verzeichnis. test2.sh wird in test1.sh ausgeführt und es wird ein relativer Pfad verwendet, d. h. der Pfad relativ zu test1.sh. Wenn Sie es in crontab -e bearbeiten, ist die Ausführungsmethode sh /home/denglinjie/test1.sh. Beim Aufruf von sh test2.sh glaubt das System, dass es im Verzeichnis, in dem sich die Crontab-Datei befindet, nach test2.sh sucht, kann es jedoch nicht finden, wodurch die Ausführung fehlschlägt. Zuerst dachte ich, ich würde die Skriptdateien, die ich zur Ausführung geschrieben hatte, und andere aufgerufene Skripte und Crontab-Dateien an einem Ort ablegen, damit ich sie abrufen könnte. Dies schlug jedoch fehl, wahrscheinlich aufgrund von Berechtigungsproblemen, da ich das Verzeichnis /var/spool/cron nicht aufrufen konnte. Eine andere Lösung besteht darin, das Verzeichnis, in dem sich das Skript befindet, über den Befehl cd /home/denglinjie aufzurufen, bevor das Skript ausgeführt wird. ------------------------------------------------------------------ Kürzlich wurde ein neuer Grund für die Nichtausführung von Crontab entdeckt Was ich hier ausführen möchte, ist das Python-Skript. Das Verzeichnis meines Python-Skripts ist: /data/denglinjie/work/UpdateModuleSwitch Zu Beginn war meine geplante Aufgabe folgendermaßen geschrieben: 0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py Es wurde festgestellt, dass es zu diesem Zeitpunkt nicht ausgeführt wurde. Ein Teil des Inhalts von update_switch.py ist wie folgt: Pymongo importieren Das heißt, ich habe das von mir installierte Pymongo in meinem Skript eingeführt. Beachten Sie, dass dieses Pymongo auf der angegebenen Python-Version installiert ist. Grund für die Nichtausführung: Wenn die geplante Crontab-Aufgabe ausgeführt wird, ist das verwendete Python nicht mein Python, und auf dem verwendeten Python ist Pymongo nicht installiert, was zu einem Importfehler führt Die Lösung besteht darin, es in die folgende Form zu ändern: 0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;/data/zhoumi/install_evn/bin/python update_switch.py Geben Sie das auszuführende Python-Programm an. In diesem Python-Programm ist pymongo installiert und angebunden. Alternativ können Sie das folgende Format verwenden: 0 * * * * export PATH=/data/zhoumi/install_evn/bin/:$PATH;cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py Da mein Python in meinem eigenen Benutzerverzeichnis installiert ist, kann das System dieses Python nicht finden. Daher muss ich mein Python nur zur Umgebungsvariablen PATH des Systems hinzufügen. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Detaillierte Einführung in den MySql-Index und korrekte Verwendungsmethode
>>: Detaillierte Erläuterung der Mybatis-Sonderzeichenverarbeitung
1. Einleitung Manchmal müssen Sie eine Servicesch...
In diesem Artikel wird der spezifische Code von j...
In diesem Artikel wird eine einheitliche Bewegung...
Beschreibung des Phänomens: Das Projekt verwendet...
Nachdem ich mit der Lektüre von JavaScript DOM fe...
Die Verwaltung des Speicherplatzes ist für System...
Inhaltsverzeichnis 1. Erstellen Sie grundlegende ...
Inhaltsverzeichnis Was ist NULL Zwei Arten von NU...
Herausgeber: In diesem Artikel wird die Rolle erö...
Verwenden Sie einen CSS-Filter, um den Mouseover-...
Code kopieren Der Code lautet wie folgt: <thea...
Inhaltsverzeichnis Hintergrund analysieren Datens...
Inhaltsverzeichnis Verschachtelung Kommunikation ...
Problemphänomen Ich habe kürzlich Sysbench verwen...
Inhaltsverzeichnis 1. Über JavaScript 2. JavaScri...