Uživatelské služby, které přežijí odhlášení uživatele
V systemd 230 byla zavedena novinka a to zabití uživatelských procesů po
odhlášení uživatele. Tzn. veškeré procesy, i ty, které byly spuštěny pomocí
klasického příkazu nohup, byly killnuty. Toto chování lze nastavit
KillUserProcesses= v souboru /etc/systemd/logind.conf. Výchozí nastavení je
yes, ovšem některé distibuce jej překlápějí na no už během kompilace.
Já jsem hledal způsob, jak spouštět uživatelské služby na pozadí “the systemd
way”. Způsobů je víc (například i přes
systemd-run),
v tomto článku se budu zabývat uživatelskými službami.
Nutné balíčky
Alespoň tedy v Debian testing:
libpam-systemd
a nastavení
Jako uživatel root:
loginctl enable-linger tomas
Toto nastavení pro konkrétního uživatele vypne volbu (KillUserProcesses).
Uživatelské služby lze používat i bez aktivního linger, ale po jeho odhlášení
se všechny ukončí.
Uživatelské služby
S uživatelskými službami se pracuje vlastně úplně stejně, jako se systémovými,
akorát příkazu systemctl přidáme parametr --user.
Takže jako příklad si vytvoříme unitu, která při prvním přihlášení uživatele spustí tmux session, do které se potom uživatel může přihlášit. A při jeho odhlášení tmux bude běžet stále na pozadí (v tomto případě je nutné pro uživatele zapnout linger).
Unita pro start tmux může vypadat nějak takto. Soubor ~/.config/systemd/user/tmux.service:
[Unit]
Description=Start tmux in detached session
[Service]
Type=forking
ExecStart=/usr/bin/tmux new-session -s tomas -d
ExecStop=/usr/bin/tmux kill-session -t tomas
[Install]
WantedBy=default.target
Service chceme aktivovat po loginu:
systemctl --user enable tmux
pochopitelně ji můžeme spusti nebo vypnout i ručně:
systemctl --user start tmux
Pracuje se s tím tedy úplně stejně, jako na systémové úrovni, jen je tady navíc
parametr --user.
Tímto způsobem si můžete do svého uživatelského systemd přidat další služby, definovat timery pro uživatelské skripty apod.