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

Wie man CRON dazu bringt, die richtigen PATHs aufzurufen

Höchstwahrscheinlich wird cron in einer sehr spärlichen Umgebung ausgeführt. Überprüfen Sie die Umgebungsvariablen, die Cron verwendet, indem Sie einen Dummy-Job anhängen, der env ausgibt in eine Datei wie diese:

* * * * * env > env_dump.txt

Vergleichen Sie das mit der Ausgabe von env in einer normalen Shell-Sitzung.

Sie können der lokalen Crontab Ihre eigenen Umgebungsvariablen voranstellen, indem Sie sie oben in Ihrer Crontab definieren.

Hier ist eine schnelle Lösung, um $PATH voranzustellen zur aktuellen Crontab:

# echo PATH=$PATH > tmp.cron
# echo >> tmp.cron
# crontab -l >> tmp.cron
# crontab tmp.cron

Die resultierende Crontab sieht ähnlich aus wie die Antwort von Chrissygormley, wobei PATH vor den Crontab-Regeln definiert ist.


Sie sollten vollständige Pfade in Ihre crontab einfügen . Das ist die sicherste Option.
Wenn Sie das nicht möchten, können Sie ein Wrapper-Skript um Ihre Programme legen und dort den PATH setzen.

z. B.

01 01 * * * command

wird zu:

01 01 * * * /full/path/to/command

Auch alles, was von cron aufgerufen wird sollte sehr vorsichtig mit den Programmen sein, die es ausführt, und wahrscheinlich seine eigene Wahl für PATH setzen Variable.

BEARBEITEN:

Wenn Sie nicht wissen, wo sich der gewünschte Befehl befindet, führen Sie which <command> aus von Ihrer Shell und es wird Ihnen den Pfad sagen.

BEARBEITEN2:

Sobald Ihr Programm also läuft, sollte es als Erstes PATH setzen und jede andere erforderliche Variable (z. B. LD_LIBRARY_PATH ) auf die Werte, die für die Ausführung des Skripts erforderlich sind.
Anstatt darüber nachzudenken, wie Sie die Cron-Umgebung ändern können, um sie für Ihr Programm/Skript besser geeignet zu machen, sorgen Sie dafür, dass Ihr Skript die angegebene Umgebung handhabt, indem Sie beim Start eine geeignete Umgebung festlegen.


Ich habe /etc/crontab verwendet . Ich habe vi verwendet und die von mir benötigten PATHs in diese Datei eingegeben und als root ausgeführt. Die normale Crontab überschreibt PATHs, die Sie eingerichtet haben. Eine gute Anleitung dazu.

Die systemweite Cron-Datei sieht folgendermaßen aus:

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py

Linux
  1. So verwenden Sie Cron unter Linux

  2. Wo ist das Cron/Crontab-Protokoll? / Wie aktiviere ich das Cron-Protokoll?

  3. Wie bekomme ich sicher die Version von Ksh?

  4. So planen Sie Cron-Jobs mit Crontab

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

So automatisieren Sie Aufgaben in Linux mit Crontab

So erhalten Sie die Größe eines Verzeichnisses in Linux

So holen Sie das Beste aus Qmmp 1.0 heraus

Wie bekomme ich das richtige spanische Tastaturlayout?

Wie bekomme ich die Prozess-ID, um einen Nohup-Prozess zu beenden?

Wie erhalte ich das absolute Verzeichnis einer Datei in Bash?