Auf Shell-Variable in der Crontab-Konfiguration kann nicht zugegriffen werden

Auf Shell-Variable in der Crontab-Konfiguration kann nicht zugegriffen werden

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.outputDatei 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

HOMEwie 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_PATHmanuell einstellen:

# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...

verwandte Informationen