Stellen Sie PATH für eine systemd-Einheit ein

12

Wie wird der Pfad für Nicht-Login-Shells in CentOS 7 festgelegt?

Insbesondere habe ich eine systemd-Einheit, die Binärdateien benötigt /usr/local/texlive/2016/bin/x86_64-linux.

Ich versuchte , es zu setzen in /etc/environmentmit , PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHaber dann ist mein Weg war /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

Ich habe /etc/profile.d/texlive.shmit , export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"aber das nur für Login - Shells gearbeitet.

Ich habe mir den Pfad für alle Benutzer festlegen (Login- und Nicht-Login-Shells) angesehen, aber die Lösung wurde bereits oben versucht.

Ich habe mir angesehen, wie man einen Pfad zum System $ PATH für die Nicht-Login-Shell und die Login-Shell aller Benutzer auf Debian hinzufügt, aber es gibt keine akzeptierte Lösung und ich bin nicht sicher, ob ich Änderungen vornehmen möchte, /etc/login.defsda diese möglicherweise in einem Update geändert werden.

Agrajag9
quelle

Antworten:

15

Die einfachste Antwort besteht darin, das PATHals Teil Ihres ExecStartBefehls in der systemd Unit-Datei festzulegen. Zum Beispiel, wenn Sie derzeit haben

ExecStart=/bin/mycmd arg1 arg2

dann ändern Sie es in

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'

Die Erweiterung von $PATHwird durch bash erfolgen, nicht durch systemd. Alternativen wie die Verwendung Environment=PATH=/new/path:$PATHfunktionieren nicht, da systemd das nicht erweitert $PATH.

meuh
quelle
Wenn ich den Befehl auf diese Weise umbrechen UND die Datei profile.d verwenden möchte (ich möchte, dass der Pfad auch für Login-Shells hinzugefügt wird), muss ich den Pfad dann noch in ExecStart festlegen? Oder wird das aus profile.d gelesen?
Agrajag9
Ich denke, Sie müssen den Pfad noch im ExecStart festlegen. Die Bash wird wahrscheinlich nur aus profile.d gelesen, wenn es sich um eine Login-Shell handelt. Sie könnten versuchen, --loginvor dem hinzuzufügen -c, um dies zu erzwingen, anstatt den PATH festzulegen, aber Sie werden bash dazu bringen, viele Setups auszuführen, die in der nackten Systemumgebung möglicherweise nicht gut funktionieren, und Ihnen Fehler im Journalprotokoll geben.
Meuh