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.