Ich habe meinen crontab-Job 0 2 */1 * * /aScript >aLog.log 2>&1
als 'root'-Benutzer ausgeführt und festgestellt, dass sich die env von der env des' root'-Benutzers unterscheidet und daher ein anderes Laufzeitverhalten meiner Skripte auftritt.
Ein Fehlerbehebungsversuch platzierte Exportbefehle in rc.d-Dateien, die jedoch immer noch nicht angezeigt wurden. Am Ende platziere ich Exportbefehle im aScript selbst.
Meine Frage ist, dass es einen besseren Weg gibt, um dieses Problem anzugehen? und warum fehlt env, obwohl es vom selben Benutzer 'root' stammt? (Ich ändere crontab, indem ich 'crontab -e' vom root aus starte.)
linux
cron
environment-variables
Bambus
quelle
quelle
source
Ihr (Bash-) Profil ändern.Antworten:
Cron läuft immer mit einer meist leeren Umgebung. HOME, LOGNAME und SHELL sind eingestellt; und ein sehr begrenzter Pfad. Es ist daher ratsam, vollständige Pfade zu ausführbaren Dateien zu verwenden und alle Variablen zu exportieren, die Sie in Ihrem Skript benötigen, wenn Sie cron verwenden.
Es gibt verschiedene Ansätze, mit denen Sie Ihre Umgebungsvariablen in cron festlegen können. Sie können sie jedoch alle in Ihrem Skript festlegen.
Ansatz 1:
Stellen Sie jede Variable ein, die Sie manuell in Ihrem Skript benötigen.
Ansatz 2:
Geben Sie Ihr Profil an:
. $HOME/.bash_profile
(oder. $HOME/.profile
)(Normalerweise werden Sie feststellen, dass die obige Datei andere Dateien enthält (z. B. ~ / .bashrc -> / etc / bashrc -> /etc/profile.d/*). Andernfalls können Sie diese ebenfalls verwenden.)
Ansatz 3:
Speichern Sie Ihre Umgebungsvariablen in einer Datei (als gewünschter Benutzer ausführen):
Dann importieren Sie über Ihr Cron-Skript:
Ansatz 4:
In einigen Fällen können Sie globale Cron-Variablen festlegen
/etc/default/cron
. Dies birgt jedoch ein gewisses Risiko, da diese für alle Cronjobs festgelegt werden.quelle
bash: SHELL=/bin/bash: No such file
Cron erstellt seine OWN-Shell unter der angegebenen Verwendung, unter der sie ausgeführt wird.
Wenn Sie also dieselbe Variable Ihres Benutzers beibehalten möchten, versuchen Sie, sie mit Ihrem eigenen Benutzer anstelle von root oder einem anderen Benutzer auszuführen.
Oder
Am besten exportieren Sie diese Variablen in Ihr eigenes Skript.
quelle
In RedHat CentOS können Sie /etc/rc.d/init.d/functions default PATH dauerhaft festlegen. /etc/rc.d/crond ruft beim Start Funktionen auf.
quelle
Ich hatte ein ähnliches Problem mit meiner AWS. Fand es so heraus
gab mir den
/usr/bin/local/python3
Standortund dann
quelle