
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_env
usw.
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/bashenv
gibt es eine ganze Reihe von Umgebungsvariablen, die dies /tmp/env
nicht tun. Dies liegt daran, dass env
es in einer Login-Shell mit aufgerufen wurde bash -l
.