Hi
Ich habe hier gleich mehrfach Bauchschmerzen... *lacht*... schaun wir mal, was da dran ist.
scientific hat geschrieben:Dann gehts aber noch darum, den systemd des Users zu reloaden und den Service zu starten/restarten.
oder
bringt aber nur die Fehlermeldung....
Also, zunächst mal halte ich den "--user" für unnötig, weil es hier nicht den angemeldeten User betrifft, sondern faktisch "root".... und zwar deshalb, weil sowohl "sudo" als auch "su" vorher zu "root" wechseln, bevor "bin/systemctl" gestartet wird. "--user!" würde nur funktionieren, wenn der Aufruf so aussehen würde:
Code: Alles auswählen
thomas@thomaspc:~ $ /bin/systemctl --user daemon-reload
Hierbei geht es dann nicht um den Service-Manager des Systems, sondern um den des Users "thomas"
Deine beiden obenstehenden Aufrufe entsprechen imho eher dem hier:
Hierbei wird der Service-Manager des Systems verwendet, aber der ist sowieso "default", die zusätzliche Übergabe von "--user" ist nicht notwendig.
Die Lösung ist letztendlich gar nicht so kompliziert.... es funktioniert die gleiche, wie bei dem unbeantworteten "Screen-Posting". Du musst Dich nur entscheiden, ob ein, zwei oder gar keine Password-Abfrage sein soll. Dieser folgende Befehl, vom User "thomas" ausgeführt, für den User "inet", verlangt zunächst von mir, dass ich das Password von "inet" eingebe, und dann weiterhin, weil ich einen Job mit root-Rechten starten will, das root-Password, weil "inet" derzeit dazu unberechtigt ist:
Code: Alles auswählen
thomas@thomaspc:~ $ /bin/su -l inet -c "/usr/bin/script -q -c '/bin/systemctl daemon-reload' /dev/null"
Das folgende Statement verlangt zweimal das root-Password, zunächst für den User-Wechsel, dann für den Systemd-Aufruf mit root-Rechten, für den "inet" ja auch nicht berechtigt ist:
Code: Alles auswählen
thomas@thomaspc:~ $ /usr/bin/pkexec -u inet /bin/bash -c "/usr/bin/script -q -c '/bin/systemctl daemon-reload' /dev/null"
Ich würde keinesfalls "
sudo" und einen Eintrag in der sudoers nutzen. Und ich würde auch nicht dem User (hier bei mir "inet") erlauben, 'systemctl' mit irgendwas zu starten.... nicht mal 'daemon-reload'. Der meiner Meinung nach richtige Weg wäre es, einen kleinen Wrapper zu schreiben und speziell für den Wrapper eine Policy-Rule anlegen, die den User berechtigt... und das funktioniert dann wunderbar.
Nur eines kann ich nicht beantworten.... wie schädlich und ob überhaupt ein dynamisches Starten und Schließen von Diensten zur Laufzeit und im User-Fenster (also das Normal-Arbeitszeit-Fenster) ist. Der individuelle Start bei User-Anmeldung ist unkritisch. Und wenns sich um einen User-bezogenen Individual-Service handelt, der gegebenfalls auch mit mehreren eigenen Instanzen bei mehreren Usern lebt, glaube ich auch, dass der "Stop" unkritisch" ist.... solange es sich eben im User-Space abspielt. Aber bei System-Services halte ich das für gefährlich. Aber das kannst letztendlich nur Du selber einschätzen.
Hth