Ich hatte ein Problem beim Ausführen eines Skripts von Crontab. Nach einigen Recherchen habe ich verstanden, dass das Problem darin besteht, dass der PATH-Parameter / sbin nicht enthält.
Ich habe nachgeschaut, was es in / etc / crontab beinhaltet:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
Als Test - einfacher Cron-Job zum Drucken der PATH-Variablen:
* * * * * echo $PATH &> /root/TMP.log
die Ausgabe ist:
cat /root/TMP.log
/usr/bin:/bin
Ich verstehe dieses Verhalten nicht ... Wie setze ich die PATH-Variable ..? Oder besser - wie fügt man Pfade hinzu?
bash -lc
hilft nicht. Im Moment kann ich PATH manuell einstellen, aber wenn ich einige Skripte installiere, möchte ich, dass sie in Cronjobs erkannt werden, ohne dass vollständige Pfade angegeben werden. Ich bin sicher, es ist irgendwie möglich undbash -lc
ist auf dem Weg zu einer Lösung :)Wenn Sie systemweite Standard-PATHs und andere ENV-Variablen (die in /etc/profile.d definiert sind) benötigen, geben Sie einfach Folgendes ein:
quelle
Es ist möglich, den PATH (oder andere Parameter) in der Cronjob-Zeile oder in einer einzelnen Zeile einzustellen. Aber Sie sind nicht in der Lage, Shell-Erweiterung wie zu verwenden
PATH=$PATH:/usr/local/bin
. Die Tilde ist jedoch für Verknüpfungen zum Basisverzeichnis zulässig.Aus den Büchern:
Siehe
man 5 crontab
für weitere Informationen.Das sollte also funktionieren:
quelle
Ich hatte das gleiche Problem und fand eine andere Möglichkeit, mein Skript in Crontab auszuführen. Ich denke, die einfachste Möglichkeit, Ihr Programm auszuführen, besteht darin, ein Skript zu erstellen , das in das Verzeichnis Ihres Programms aufgenommen werden kann. Rufen Sie dann Ihr Programm in diesem Skript auf.
Dies ist ein Beispiel für ein Skript (Skriptname = launcher.sh):
Dann machen Sie Ihr Skript ausführbar:
Und schließlich fügen Sie Ihr Skript zu crontab hinzu
und füge diese Zeile am Ende hinzu:
(Ich stelle das Programm so ein, dass es bei jedem Neustart ausgeführt wird.)
quelle