Verwenden Sie Variablen in Pfaden in Crontab

Verwenden Sie Variablen in Pfaden in Crontab

Die von mir verwendete Crontab ist komplexer, aber ich habe das Problem auf einen minimalen Problemsatz heruntergebrochen.

Meine Crontab funktioniert folgendermaßen:

mypath='/home/user/opt/script_home'
myscript='/home/user/opt/script_home/myscript.py'
* * * * * "$myscript"

Aber nicht so:

mypath='/home/user/opt/script_home'
myscript="${mypath}/myscript.py"
* * * * * "$myscript"

Fehlermeldung im Maildir:

/bin/sh: ${mypath}/myscript.py: No such file or directory

Der Python-Interpreter ist unter dem eingeschränkten Cron $PATH verfügbar, das ist also nicht das Problem.

Bearbeiten: Auch wenn ich die Crontab mit Bash oder Sh ausführe, läuft sie ohne Fehler. (Natürlich nach dem Entfernen von * * * * *)

Es kann sein, dass ich hier etwas ganz Grundlegendes übersehe, aber ich habe mich schon seit einiger Zeit damit beschäftigt und im Internet gesucht. Bisher hatte ich mit meinen Suchparametern jedoch kein Glück. Die Crontab arbeitet mit der hässlichen Verwendung des gemeinsamen Pfads an mehreren Stellen, aber das ist kein guter Code und stört mich daher. Bitte helft mir aus meiner Qual =)

Antwort1

TL;DR: das kannst du nicht.

entsprechendman 5 crontab

Der Wertestring wird nicht auf Umgebungssubstitutionen oder Variablenersetzungen analysiert, daher Zeilen wie

PATH = $HOME/bin:$PATH

wird nicht wie erwartet funktionieren.

cronDer Parser von ist nicht so leistungsfähig wie bashder von .

Antwort2

Sie können diese Variable „mypath“ in der Datei .bash_profile oder .bashrc konfigurieren, dann ist sie zugänglich.

vi .bash_profile or vi .bashrc 

Fügen Sie dann den folgenden Pfad hinzu und speichern Sie

 mypath='/home/user/opt/script_home'

Antwort3

Da cron weder eine interaktive noch eine Login-Shell ist, werden weder .bashrc noch .bash_profile als Quelle verwendet. Wenn Sie also mypath in diesen Dateien definieren, haben Sie diese Variable bei der Verwendung von cron nicht. Meines Wissens besteht die einzige Möglichkeit, sie in cron zu haben, darin, sie direkt (d. h. ohne Umgebungssubstitutionen oder Ersetzung von Variablen, wie bereits erwähnt) im Crontab-Skript zu definieren.

verwandte Informationen