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


19

Je lance 16.04 et systemdtue maintenant tmuxlorsque l'utilisateur se déconnecte ( résumé du changement ).

Existe-t-il un moyen d'exécuter tmuxou screen(ou tout programme similaire) avec systemd230?J'ai lu toutes les discussions animées sur les avantages et les inconvénients du comportement, mais aucune solution n'a été suggérée.

(Je vois aussi le comportement en 229)


1
C'est étrange - je l'ai systemd-229-4ubuntu7(de xenial-updates) et je ne vois pas ce comportement. Quoi qu'il en soit, ce comportement a déjà été inversé dans Debiansystemd-230-2 , donc il sera probablement bientôt inversé dans Ubuntu.
MvanGeest

mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support a des packages prevent-systemd- * qui vous permettent d'installer et d'utiliser sysvinit comme précédemment
mirabilos

Réponses:


1

En utilisant Ubuntu 18.04 avec la version 237 de systemd , aucune des solutions suggérées n'a fonctionné pour moi.

La solution qui a fonctionné pour moi était de

  • modifier le /etc/systemd/logind.conf
  • décommenter KillExlcudeUsers
  • ajouter une liste d'utilisateurs séparés par des espaces (par exemple, KillExlcudeUsers=root user1 user2)

19

La bonne solution consiste à désactiver le comportement systemd incriminé à l'échelle du système.

Modifier /etc/systemd/logind.conf( vous devez sudo , bien sûr) et définir

KillUserProcesses=no

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

Redémarrez ensuite systemd-logind.service.

sudo systemctl restart systemd-logind

4
Comment est la bonne solution à un problème spécifique à une unité pour définir un paramètre à l'échelle du système?
jpath

Parce que, comme vous pouvez le voir en ne lisant que la question, sans parler de toutes les autres discussions ailleurs à ce sujet auxquelles la question fait indirectement référence, ce n'est pas spécifique à une application. C'est un point qui est même en gras dans la question.
JdeBP

Il vous suffit d'activer la persistance pour l'utilisateur via loginctl enable-linger <user>. De man loginctl: "S'il est activé pour un utilisateur spécifique, un gestionnaire d'utilisateurs est généré pour l'utilisateur au démarrage et conservé après la déconnexion. Cela permet aux utilisateurs qui ne sont pas connectés d'exécuter des services de longue durée."
Adrian Günter

Ubuntu 18.04 ici. Cela ne fonctionne pas, même après le redémarrage. L'activation de la persistance ne l'est pas non plus.
Pa_

11

Sur la base de la réponse de @ Rinzwind et inspiré d'une description d'unité, le mieux que j'ai pu trouver est d'utiliser TaaS (Tmux as a Service) - une instance générique détachée d' tmuxun qui se rattache.

# cat /etc/systemd/system/tmux@.service

[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 tmux@instanceone.service
# systemctl start tmux@instancetwo.service
# 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)#

C'est bien mais je ne peux pas pour la vie de moi comprendre pourquoi vous l'utilisez! :)
sarnold

5
@sarnold: pour pouvoir contrôler les applications qui démarrent avec une console, mais qui sont supposées s'exécuter au démarrage. Minecraft en est un exemple.
WoJ

5

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 sortis. Par défaut à no.


Merci. J'ai accepté et +1 votre réponse car elle fournit le cœur de la solution. Savez-vous s'il est utilisable en mode interactif (en le lançant de manière tmuxinteractive, contrairement à ma réponse)?
WoJ

j'en doute. systemd ne se souciera probablement pas de votre tmux à moins que vous ne disiez à systemd qu'il devrait: publié. N'hésitez pas à accepter le vôtre et / ou à développer le vôtre ;-) Je n'ai pas besoin du représentant>: - D
Rinzwind

3
Cette réponse a besoin de plus de détails, comme l'endroit où utiliser ce paramètre.
kasperd

1
Bien sûr, mais la réponse va être un copier / coller de la page de manuel ;-)
Rinzwind

1
@WoJ Vous pouvez créer un alias pour tmuxcommencer en tant que systemd-run --remain-after-exit tmux(ou peut-être même avec des --scope --userindicateurs).
Debilski

2

Vous devez définir le Typeservice sur forking, comme expliqué ici .

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


0

Selon /unix//a/287282/117599 invoquant en tmuxutilisant

systemd-run --user --scope tmux

devrait également faire l'affaire.


Malheureusement, cela ne semble plus fonctionner en 18.10 cosmique.
taneli
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.