Wie kann man cron PATH global (dh für alle Benutzer) dauerhaft festlegen?

10

Wir müssen / usr / local / bin für alle Benutzer im Pfad von cron haben. Gibt es eine Möglichkeit, es systemweit einzustellen, ohne die Crontab jedes einzelnen Benutzers bearbeiten zu müssen?

Wir haben versucht, PATH zu / etc / crontab hinzuzufügen:

# grep PATH /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Aber wenn Benutzer dies in ihrer Crontab haben:

$ crontab -l | grep PATH
* * * * * echo $PATH > /tmp/current_cron_path

... es zeigt, dass ihr Pfad immer noch auf Standard gesetzt ist:

$ cat /tmp/current_cron_path
/usr/bin:/bin
gröber
quelle
2
Allgemeiner Hinweis: Wenn Sie "es hat nicht funktioniert" schreiben, erhalten Sie normalerweise keine nützliche Antwort. Beschreiben Sie immer, wie genau es nicht funktioniert hat, was genau Sie getan haben und was genau das Ergebnis war.
Sleske
Bitte beachten Sie, dass es möglicherweise unzuverlässig ist, sich auf echoIhr Cron zu verlassen .
Der Hochstapler

Antworten:

4

Sie können Ihren PATH in der crontab-Konfigurationsdatei wie im ersten Code gezeigt konfigurieren, außer dort . Geben Sie zuerst die env-Variablen und dann die Jobs an.

UPD: Aufgrund der Tatsache, dass der Link unterbrochen ist, hier ein Auszug:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
igorp1024
quelle
1
funktioniert nicht auf Ubuntu, auch nach dem Neustart von Cron
Grosser
1
@grosser: Nun, das sollte es. Bitte posten Sie Ihre vollständige Crontab (bearbeiten Sie Ihre Antwort) zusammen mit der Ausgabe, die sie erzeugt, und warum Sie glauben, dass sie nicht funktioniert. Dann werden wir sehen ...
Sleske
Beachten Sie auch, dass das Format der VARIABLE = -Wertzeilen etwas eingeschränkter ist als in einem Shell-Skript: Jede Zuweisung muss in einer eigenen Zeile erfolgen, und Sie dürfen auf der rechten Seite keine Variablen verwenden (z. B. PATH = $) PFAD: / bla wird nicht funktionieren).
Sleske
i die Frage aktualisiert, die PATH in einem individuellen crontab Einstellung hat funktioniert, nur der globale Wandel hat nicht funktioniert
gröberen
Versuchen Sie, PATH-Variablen in jeder Crontab anzugeben, in der Sie sie benötigen. Wahrscheinlich liegt es an Sicherheitsproblemen. Übrigens, in Ubuntu (ich habe es überprüft) ist PATH in / etc / crontab und /etc/cron.d/anacron in Ubuntu definiert. Es scheint also, dass es nicht von / etc / crontab geerbt wird. Versuchen Sie es einfach in root's crontab ( sudo crontab -e) zu definieren
igorp1024
3

Das Festlegen der PATH-Variablen sollte in Ubuntu funktionieren. Wie sagt man, funktioniert es nicht?

Siehe # 14: Linux Crontab: 15 Awesome Cron Job-Beispiele

Der Nerd
quelle
i die Frage aktualisiert, die PATH in einem individuellen crontab Einstellung hat funktioniert, nur der globale Wandel hat nicht funktioniert
gröberen
1

Auch dafür konnte ich keine Lösung finden. Das, was ich einer anständigen Lösung am nächsten kam, ist das Folgende (entnommen aus https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Ändern Sie die Shell für Ihren Cron-Job und verweisen Sie auf ein Bash-Skript. Dh oben am Cronjob hinzufügen: SHELL=/path/to/setup/cron.bash
  • Laden Sie in diesem Shell-Skript Umgebungsvariablen und geben Sie andere Variablen an. Stellen Sie sicher, dass die folgenden 4 Zeilen oben eingefügt werden. Es setzt die SHELL-Variable auf bash zurück und führt eine bash-Shell aus, um die Cronjobs auszuführen.

Zum Beispiel:

#!/bin/bash
set -e

source /etc/environment
source /etc/profile
# restore SHELL env var for cron
SHELL=/bin/bash

# execute the cron command in an actual shell
exec /bin/bash --norc "$@"

Nachteil: Dazu müssen Sie SHELL=...bei jedem Cronjob das oben angegebene angeben. Vorteil: Sie verwenden reguläre Umgebungsvariablen und müssen sich keine Sorgen machen, dass die Variablen zwischen cron und anderen konsistent bleiben

Laurens Rietveld
quelle
0

Wenn Sie root sein können, können Sie versuchen /etc/init.d/cron, den Pfad dort zu bearbeiten und zu ändern? Ich habe dies nicht getestet, wäre aber interessant zu überprüfen.

Reiche Homolka
quelle
schien nicht zu funktionieren, ich habe gerade PATH = xxx in /etc/init.d/cron hinzugefügt, aber die * * * * * echo $ PATH-Ausgabe war dieselbe
gröber