GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Cron-Skript wird nicht wie von crontab erwartet ausgeführt – Fehlerbehebung

Das Problem

Ausführen eines Skripts mit dem cron-Dienst, das normalerweise von der Shell aus ausgeführt wird, aber nicht das gleiche Verhalten zeigt, wenn es von crontab ausgeführt wird.

Ursache

Eine der häufigsten Ursachen dafür, dass der Crontab-Job nicht korrekt ausgeführt wird, ist, dass ein Cronjob nicht unter der Shell-Umgebung des Benutzers ausgeführt wird. Ein weiterer Grund kann sein – nicht den absoluten Pfad der im Skript verwendeten Befehle anzugeben. Wenn das Skript manuell ausgeführt wird, kann die Umgebungsvariable wie PATH anders sein als bei der Ausführung über Cron. Es wird daher immer empfohlen, die absoluten Pfade der verwendeten Befehle in das Skript aufzunehmen.

Aus diesem Grund sind alle Umgebungsvariablen für den Benutzer, die in einer normalen Shell vorhanden sind, während der Cron-Job-Ausführung nicht verfügbar, es sei denn, sie werden explizit vom Skript importiert.

Wenn zum Beispiel die Shell eine ORACLE_HOME-Variable definiert hat und sie in die PATH-Umgebungsvariable einfügt und das Skript diese Variablen verwendet, wird das Skript in sell ausgeführt, aber wenn es von crontab ausgeführt wird, hat das Skript keine Kenntnis von diesen Variablen standardmäßig.

Die Lösung

Definieren oder importieren Sie ORACLE_HOME und die vollständige PATH-Variable in der Cron-Skriptdatei, wie Sie in der Oracle-Benutzer-Shell sehen (oracle_user_shell> echo $PATH).

Eine gute Praxis ist es, die Benutzerumgebung immer am Anfang des Skripts script.sh mit dem Befehl:

zu importieren
#!/bin/bash
. /home/oracle/.bashrc
[rest of script]

Dadurch wird /home/oracle/.bashrc gelesen und die Umgebung darin importiert. Je nach Umgebung des Benutzers kann es auch /home/oracle/.bash_profile oder andere Dateien sein.

HINWEIS :Zwischen dem Punkt „.“ befindet sich ein Leerzeichen. und „/home..“

TIPP :Um die Ausführung eines Crontab-Eintrags besser zu beheben, können Sie ihn so ändern, dass die Ausgabe in einer Datei protokolliert wird, zum Beispiel:

[* * * * *] /home/oracle/script.sh 2> /tmp/crontab_script_log.txt 2>&1

Hinweis :Ersetzen Sie [* * * * *] durch die korrekten Ausführungszeiten für Ihren Fall.

Sie können dann /tmp/crontab_script_log.txt auf die Ausgabe der Ausführung überprüfen. Wenn irgendwelche Variablen undefiniert sind oder wenn das Skript andere Fehler hat, wird die Ausgabe es einfacher machen, die Ursache des Problems zu finden.


Linux
  1. Cron-Job wird nicht ausgeführt?

  2. Crontab-Problem:Cron-Job funktioniert nicht, wenn der Prozentsatz verwendet wird

  3. Führen Sie das Python-Skript über crontab aus

  4. Festlegen einer statischen IP-Adresse, wenn sie nicht von DHCP erhalten wurde (Skript)

  5. atomare Erstellungsdatei, falls nicht aus dem Bash-Skript vorhanden

Sh-Skript aus *.desktop-Datei ausführen?

Crontab-Protokoll:So protokollieren Sie die Ausgabe meines Cron-Skripts

Führen Sie das Bash-Skript von der URL aus

Führen Sie jeden Tag zu einer bestimmten Zeit ein Shell-Skript aus

matlab Skript von der Linux-Befehlszeile ausführen

An welchem ​​Tag/zu welcher Uhrzeit beginnt ein wöchentlicher Cron?