Ich habe Probleme beim Zugriff auf eine Shell-Variable, während ich einen Cron-Job ausführe. Eigentlich habe ich einen Job erstellt, der zwei Shell-Variablenwerte in eine env.output
Datei druckt.
Ich schreibe einen Cronjob mit einem Befehl $ crontab -e
(ohne Sudo-Benutzer).
Meine Crontab-Konfigurationsdatei sieht folgendermaßen aus: -
# varibales
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/usr/games:/usr/local/games
[email protected]
HOME=/home/ubuntu
JOBS_PATH=${HOME}/cronjobs
# Jobs
* * * * * echo "$HOME and $JOBS_PATH" >> ${HOME}/env.output 2>&1
Wenn ich mir jetzt den Inhalt der Datei ansehe env.output
, erhalte ich diese Ausgabe
/home/ubuntu and ${HOME}/cronjobs
was nicht zu erwarten war, nahm ich an.
Meine Ausgabe soll folgendermaßen aussehen: -
/home/ubuntu and /home/ubuntu/cronjobs
Schlagen Sie mir eine Möglichkeit vor, dieses Problem zu lösen.
Antwort1
Dies ist eine Einschränkung des Cron-Daemons. Siehe hierzu denManpage von crontab:
Die Wertezeichenfolge istnichtauf Umgebungssubstitutionen oder Variablenersetzungen analysiert, also Zeilen wie:
PATH = $HOME/bin:$PATH
wird nicht wie erwartet funktionieren.
Sie können einen Workaround machen, da Bash die Tilde ( ~
) als Ersatz für behandelt $HOME
. Verwenden Sie daher:
JOBS_PATH=~/cronjobs
Antwort2
Ich habe ein Problem beim Zugriff auf eine Shell-Variable
HOME
wie oben in einer Crontab definiert ist, handelt es sich nicht um eine Shell-Variable, sondern um eine Umgebungsvariable.
Sie können oben in einer Crontab nicht auf Umgebungsvariablen verweisen, da diese von keiner Shell verarbeitet werden und daher nicht erweitert (und wörtlich interpretiert) werden.
Sie müssen Folgendes JOBS_PATH
manuell einstellen:
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...