GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die crontab-Ausführung hat nicht die gleichen Umgebungsvariablen wie der ausführende Benutzer

Cron läuft immer mit einer größtenteils leeren Umgebung. HOME , LOGNAME , und SHELL eingestellt sind; und ein sehr begrenztes PATH . 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 mehrere Ansätze, die Sie verwenden können, um Ihre Umgebungsvariablen in cron festzulegen , aber sie alle laufen darauf hinaus, es in Ihrem Skript festzulegen.

Ansatz 1:

Legen Sie jede benötigte Variable manuell in Ihrem Skript fest.

Ansatz 2:

Quelle für Ihr Profil:

. $HOME/.bash_profile (oder . $HOME/.profile )

(Sie werden normalerweise feststellen, dass die obige Datei andere Dateien enthält (z. B. ~/.bashrc --> /etc/bashrc --> /etc/profile.d/* ) - falls nicht, können Sie diese ebenfalls beziehen.)

Ansatz 3:

Speichern Sie Ihre Umgebungsvariablen in einer Datei (als gewünschter Benutzer ausführen):

env > /path/to/my_env.sh

Importieren Sie dann über Ihr Cron-Skript:

env - `cat /path/to/my_env.sh` /bin/sh

Ansatz 4:

In manchen Fällen können Sie global cron setzen Variablen in /etc/default/cron . Dies birgt jedoch ein gewisses Risiko, da diese für alle cron festgelegt werden Arbeitsplätze.


Linux
  1. So setzen/erstellen Sie Umgebungs- und Shell-Variablen in Linux

  2. Was ist der beste distro-/shellunabhängige Weg, um Umgebungsvariablen festzulegen?

  3. Verwenden von Umgebungsvariablen in Tmux.conf-Dateien?

  4. Wo kann ich Umgebungsvariablen festlegen, die crontab verwendet?

  5. Wie geben Sie su die aktuellen Benutzerumgebungsvariablen an?

So legen Sie die Umgebungsvariable in Windows fest

So legen Sie Umgebungsvariablen in MacOS fest

So setzen und listen Sie Umgebungsvariablen in Linux auf

So setzen und listen Sie Umgebungsvariablen in Linux auf

So setzen und löschen Sie Umgebungsvariablen unter Linux

Wo wird die Umgebungsvariable $HOME gesetzt?