!!!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
}}}
* [https://unix.stackexchange.com/questions/351466/set-a-default-resource-limit-for-all-users-with-systemd-cgroups]
* [https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html]