Warum unterscheidet sich die Cron-ENV von der ENV des Benutzers?

Warum unterscheidet sich die Cron-ENV von der ENV des Benutzers?

Bei einer neuen Ubuntu-Installation lautet der Benutzer PATH:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Aber in der Cron-Umgebung desselben Benutzers lautet es:

/usr/bin:/bin

Ich habe mir alle Punktdateien des Benutzers im Home-Verzeichnis angesehen. Nichts darin ändert die PATH.

Was ändert sich PATH? Warum verwendet Cron das nicht PATH?

Antwort1

Zur Frage, warum das so ist: Die Manualpage, die es erklärt crontab(5), ist mit anderen Worten die, über die man darauf zugreifen kann man 5 crontab(nicht die Standardseite in Abschnitt 1). Der Cron-Daemon versucht nicht, eine Shell-Sitzung zu emulieren, sondern richtet eine saubere, minimale Umgebung für die Ausführung der Cron-Jobs ein und ermöglicht dann der Crontab-Datei, ihre eigenen beliebigen Umgebungsvariablen festzulegen. Der neuere Cron-Daemon, der mit Debian ausgeliefert wird, verfügt auch über mehrere zusätzliche Bestimmungen für pam_envusw.

Antwort2

Cron führt keine Prozesse in einer Login-Shell aus. Aus diesem Grund werden bei der Ausführung eines Prozesses alle typischen Skripte nicht als Quelle verwendet.

Die Ausführung des Prozesses innerhalb einer Anmeldeshell sollte die Umgebung des Benutzers replizieren.

Geben Sie etwa Folgendes in eine Crontab ein und vergleichen Sie die beiden Ausgaben:

*/1 * * * * /usr/bin/env > /tmp/env                                             
*/1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv  

Wie Sie sehen, /tmp/bashenvgibt es eine ganze Reihe von Umgebungsvariablen, die dies /tmp/envnicht tun. Dies liegt daran, dass enves in einer Login-Shell mit aufgerufen wurde bash -l.

verwandte Informationen