web-dev-qa-db-fra.com

Comment exécuter tmux / screen avec systemd> 230?

Je lance 16.04 et systemd tue maintenant tmux lorsque l'utilisateur se déconnecte ( résumé du changement ).

Est-il possible d'exécuter tmux ou screen (ou tout programme similaire) avec systemd 230? J'ai lu toute la discussion animée sur les avantages et les inconvénients du comportement mais aucune solution n'a été suggérée.

(Je vois le comportement dans 229 aussi)

17
WoJ

RemainAfterExit =

Prend une valeur booléenne qui spécifie si le service doit être considéré comme actif même lorsque tous ses processus sont terminés. La valeur par défaut est non.

4
Rinzwind

La solution appropriée consiste à désactiver le comportement fautif de systemd à l'échelle du système.

Editez /etc/systemd/logind.conf ( vous devez Sudo , bien sûr) et réglez

KillUserProcesses=no

Vous pouvez également placer ce paramètre dans un fichier séparé, par exemple. /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Puis redémarrez systemd-logind.service.

Sudo systemctl restart systemd-logind
18
Michael Hampton

Sur la base de la réponse de @Rinzwind et inspirée par un description de l'unité , le mieux que je puisse trouver est d'utiliser TaaS (Tmux en tant que service) - une instance détachée générique de tmuxle qui est réattaché.

# cat /etc/systemd/system/[email protected]

[Unit]
Description=tmux default session (detached)
Documentation=man:tmux(1)

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/tmux new-session -d -s %I
ExecStop=/usr/bin/tmux kill-server
KillMode=none

[Install]
WantedBy=multiplexer.target

# systemctl start [email protected]
# systemctl start [email protected]
# tmux list-sessions

instanceone: 1 windows (created Sun Jul 24 00:52:15 2016) [193x49]
instancetwo: 1 windows (created Sun Jul 24 00:52:19 2016) [193x49]

# tmux attach-session -t instanceone

(instanceone)#
11
WoJ

Vous devez définir le Typedu service sur forkingname__, comme expliqué ici .

Supposons que le service que vous souhaitez exécuter dans screens'appelle minecraftname__. Ensuite, ouvrez minecraft.service dans un éditeur de texte et ajoutez ou modifiez l'entrée Type=forking dans la section [Service].

2
Robin Hartmann

Selon https://unix.stackexchange.com/a/287282/117599 invoquer tmux à l'aide de

systemd-run --user --scope tmux

devrait aussi faire l'affaire.

0
phk