Nutzerprozesse mit Systemd#
Systemd kann nützlich sein, um auf einem Serversystem als "normaler" User Prozesse ("Daemons") nach dem Booten des Servers zu starten und um diese Prozesse in eine eigene Resourcen-Gruppe zu verschieben.
Voraussetzung ist die Installation den Pakets libpam-systemd
apt-get install libpam-systemd
Zunächst muss das Feature für den User aktiviert werden
loginctl enable-linger <someuser>
Danach sollte unter der Kennung des Users someuser eine Instanz des Prozesses "/lib/systemd/systemd --user" laufen.
Ins Environment des Users muss die Umgebungsvariable
export XDG_RUNTIME_DIR="/run/user/$UID"
Eine Unit für den User kann in $HOME/.config/systemd/user/example.service angelegt werden. Dabei "example" durch den Namen des Service ersetzen. Im Folgenden nutze ich "tomcat".
Das Unit-File tomcat.service:
[Unit] Description=Tomcat User Service [Service] WorkingDirectory=%h/tomcat Environment="PATH=/usr/local/bin:/usr/bin:/bin" Environment="JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" ExecStart=%h/tomcat/bin/catalina.sh run Restart=always PrivateTmp=true NoNewPrivileges=true [Install] WantedBy=default.target
Der Service wird aktiviert und gestartet mit:
systemctl --user enable tomcat.service systemctl --user start tomcat.service systemctl --user status tomcat.service systemctl --user stop tomcat.service
Nach Änderungen des Unit-File:
systemctl --user daemon-reload
Ressourcen limitieren#
Die Ressourcen können für jeden User einzeln begrenzt werden:
systemctl set-property user-1000.slice MemoryHigh=128M systemctl set-property user-1000.slice TasksMax=12 systemctl set-property user-1000.slice CPUQuota=33% systemctl cat user-1000.slice systemctl status user-1000.slice