Zusammenfassung einiger Gründe, warum geplante Crontab-Aufgaben nicht ausgeführt werden

Zusammenfassung einiger Gründe, warum geplante Crontab-Aufgaben nicht ausgeführt werden

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:
  • So verwenden Sie Linux Crontab, um regelmäßig PHP-Skripte auszuführen
  • Linux verwendet crontab, um PHP-Ausführungsplan-Timing-Aufgaben zu implementieren
  • Detaillierte Erläuterung der Verwendung von crontab zum regelmäßigen Ausführen von Aufgaben unter CentOS 7
  • So verwenden Sie crontab, um eine geplante Aufgabe einmal pro Sekunde in Linux auszuführen
  • Wie man Aufgaben unter Linux regelmäßig ausführt und Anleitungen zur Verwendung von crontab (gesammelt und sortiert)
  • Gründe, warum geplante Crontab-Aufgaben unter Linux nicht ausgeführt werden
  • Detaillierte Erklärung zur Verwendung des Crontab-Befehls zum regelmäßigen Ausführen von PHP-Dateien im Ubuntu-System
  • Detaillierte Erläuterung der at- und crontab-Befehle zur geplanten Ausführung von Aufgaben in Linux
  • Detaillierte Erläuterung des geplanten Ausführungsbefehls von Crontab unter Linux
  • Lösung für die zeitliche Steuerung der Linux-Crontab-Ausführung von Shell-Skripten, wenn bestimmte Befehle ausgeführt werden müssen

<<:  Detaillierte Einführung in den MySql-Index und korrekte Verwendungsmethode

>>:  Detaillierte Erläuterung der Mybatis-Sonderzeichenverarbeitung

Artikel empfehlen

So verwenden Sie nginx, um eine angegebene Schnittstelle (URL) zu blockieren

1. Einleitung Manchmal müssen Sie eine Servicesch...

js zur Realisierung einer einfachen Scheibenuhr

In diesem Artikel wird der spezifische Code von j...

Native JS realisiert einheitliche Bewegungen verschiedener Sportarten

In diesem Artikel wird eine einheitliche Bewegung...

Analyse und Lösung des abnormalen Problems beim Laden von JAR in Tomcat

Beschreibung des Phänomens: Das Projekt verwendet...

JavaScript zum Erzielen eines Vollbild-Seiten-Scrolleffekts

Nachdem ich mit der Lektüre von JavaScript DOM fe...

Zusammenfassung der Linux Logical Volume Management (LVM)-Nutzung

Die Verwaltung des Speicherplatzes ist für System...

Detaillierte Erklärung der MySQL-Dreiwertelogik und NULL

Inhaltsverzeichnis Was ist NULL Zwei Arten von NU...

Tipps, wie Sie aus Pixeln umfassende Markenerlebnisse machen

Herausgeber: In diesem Artikel wird die Rolle erö...

Implementierung der kollaborativen Nutzung von React-Komponenten

Inhaltsverzeichnis Verschachtelung Kommunikation ...

Ursachenanalyse und Lösung des E/A-Fehlers beim Löschen einer MySQL-Tabelle

Problemphänomen Ich habe kürzlich Sysbench verwen...

Eine kurze Diskussion über Makrotasks und Mikrotasks in js

Inhaltsverzeichnis 1. Über JavaScript 2. JavaScri...