Systemd und User-Prozesse sollen starten und stoppen können

PHuV

Captain
Dabei seit
März 2005
Beiträge
3.241
Ich habe hier gerade ein ziemliches Problem und hoffe auf einen Hinweis von den Linux-Gurus hier.
Aktuell habe ich ein Problem, daß eine Anwendung unter Linux Centos 7.7 mit einem bestimmten Benutzer laufen soll. Er wird mit systemd eingerichtet, so daß im Falle eines Reboots die Services entsprechend sauber gestoppt und neu gestartet werden. Nun wird irgendwann mal der Root-Zugriff weggenommen, und der Benutzer selbst soll die Services stoppen und starten können. Man könnte es über Einträge in /etc/sudoers und und /etc/sudoers.d lösen, das möchte ich aber vermeiden.

Für die Verdeutlichung des Problems nehme ich mal einen üblichen Tomcat-Server, siehe
https://linuxize.com/post/how-to-install-tomcat-9-on-centos-7/

Der Tomcat hat einen eigenen Benutzer tomcat, und der kann über
  • /opt/tomcat/latest/bin/startup.sh
  • /opt/tomcat/latest/bin/shutdown.sh
Seine Prozesse starten und stoppen. Dann gibt es über
  • /etc/systemd/system/tomcat.service
welcher als root über systemd den Tomcatserver starten kann. Er verwendet ebenfalls die gleichen Scripte
Code:
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
und bedient sie korrekt als tomcat Benutzer mit
  • systemctl start|restart|status|stop tomcat.service
Jedoch kann der Systemd über systemctl diesen Prozess nicht sehen, wenn der Tomcat-Benutzer hin gestoppt und gestartet hat. Umgekehrt ebenso, wurde der Tomcat Server automatisch über systemd gestartet, kann er ihn nicht mit den gleichen Scripten stoppen oder starten, er muß per kill abgeschossen werden, damit er neu gestartet werden kann.

Aktuell hab ich mich immer so beholfen, daß ich eben die Prozesse grundsätzlich immer per root/sudo starte und stoppe. Wenn man aber kein root mehr hat, ist es ein Problem. Wie löse ich das nun, so daß beides gleich läuft? Ich nehme mal an, daß der systemd sich die ProzessID anders merkt und erzeugt, und dann von dem Benutzer gestarteten Prozess nichts mehr mitbekommt. Der Benutzer kommt vermutlich wiederum nicht an die systemd-ProzessID und dann dann auch nichts machen, obwohl der Prozess unter ihm läuft.

Eine Lösung habe ich schon probiert, indem ich in den Scripten wie im Systemd-Script eine PID-Datei übergebe
Code:
PIDFile=/opt/tomcat/latest/logs/tomcat.pid
Es brachte aber leider keinen Erfolg.
 

blablub1212

Commodore
Dabei seit
Sep. 2009
Beiträge
5.117

PHuV

Captain
Ersteller dieses Themas
Dabei seit
März 2005
Beiträge
3.241
Tomcat war ein Beispiel, es geht auch um zig andere Programme (Subversion, Nexus, Karaf, Kafka, Zookeeper und so ein Zeugs..).

Vielen Dank für den Hinweis, dann werde es doch durch Einträge in der sudoers.d lösen.
 
Top