¿Cómo ejecutar tmux / screen con systemd> 230?

19

Ejecuto 16.04 y systemdahora mata tmuxcuando el usuario se desconecta ( resumen del cambio ).

¿Hay alguna forma de ejecutar tmuxo screen(o algún programa similar) con systemd230? Leí toda la acalorada discusión sobre los pros y los contras del comportamiento, pero no se sugirió ninguna solución.

(También veo el comportamiento en 229)

WoJ
fuente
1
Eso es extraño: tengo systemd-229-4ubuntu7(de xenial-updates) y no veo este comportamiento. De todos modos, este comportamiento ya se ha revertido en Debiansystemd-230-2 , por lo que probablemente también se revertirá en Ubuntu pronto.
MvanGeest
mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support tiene paquetes prevent-systemd- * que le permiten instalar y usar sysvinit como antes
mirabilos

Respuestas:

1

Usando Ubuntu 18.04 con systemd versión 237 , ninguna de las soluciones sugeridas funcionó para mí.

La solución que funcionó para mí fue

  • editar el /etc/systemd/logind.conf
  • descomentar KillExlcudeUsers
  • agregar una lista de usuarios separados por espacios (por ejemplo, KillExlcudeUsers=root user1 user2)
temor
fuente
19

La solución adecuada es deshabilitar el comportamiento ofensivo de systemd en todo el sistema.

Edite /etc/systemd/logind.conf( debe sudo , por supuesto) y configure

KillUserProcesses=no

También puede poner esta configuración en un archivo separado, por ejemplo /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Luego reinicie systemd-logind.service.

sudo systemctl restart systemd-logind
Michael Hampton
fuente
44
¿Cómo es la solución adecuada a un problema específico de una unidad para establecer una configuración de todo el sistema?
jpath
Porque, como puede ver incluso leyendo solo la pregunta, y mucho menos toda la otra discusión en otra parte sobre esto que la pregunta hace referencia indirectamente, esto no es específico para una aplicación. Este es un punto que está incluso en negrita en la pregunta.
JdeBP
Solo necesita habilitar la demora para el usuario a través de loginctl enable-linger <user>. De man loginctl: "Si está habilitado para un usuario específico, se genera un administrador de usuarios para el usuario en el arranque y se mantiene después de cerrar la sesión. Esto permite a los usuarios que no han iniciado sesión ejecutar servicios de larga duración".
Adrian Günter
Ubuntu 18.04 aquí. Esto no funciona, ni siquiera después de reiniciar. Habilitar la persistencia tampoco.
Pa_
11

Basado en la respuesta de @ Rinzwind e inspirado en una descripción de la unidad, lo mejor que pude encontrar es usar TaaS (Tmux como servicio), una instancia genérica separada de tmuxuno que se vuelve a conectar.

# 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)#
WoJ
fuente
¡Esto está bien, pero no puedo entender por qué lo usarías! :)
sarnold
55
@sarnold: para poder controlar aplicaciones que comienzan con una consola, pero que se supone que se ejecutan en el momento del arranque. Minecraft es un ejemplo.
WoJ
5

RemainAfterExit =

Toma un valor booleano que especifica si el servicio se considerará activo incluso cuando finalicen todos sus procesos. Por defecto no.

Rinzwind
fuente
Gracias. Acepté y hice +1 en su respuesta ya que proporciona el núcleo de la solución. ¿Sabría si es utilizable en modo interactivo (iniciando tmuxinteractivamente, en lugar de mi respuesta)?
WoJ
dudo. systemd probablemente no se preocupará por tu tmux a menos que le digas a systemd que debería :-P (su enfoque para esto es bastante resuelto ... parece que es su manera o no). Necesitas una descripción de la unidad como tú. al corriente. Siéntase libre de aceptar el suyo y / o expandir el suyo ;-) No necesito el representante>: - D
Rinzwind
3
Esta respuesta necesita más detalles, como dónde usar esa configuración.
kasperd
1
Claro, pero la respuesta será copiar / pegar la página del manual ;-)
Rinzwind
1
@WoJ Puede crear un alias para tmuxcomenzar como systemd-run --remain-after-exit tmux(o tal vez incluso con --scope --userbanderas).
Debilski el
2

Debe configurar el Typeservicio forkingcomo se explica aquí .

Supongamos que screense llama al servicio que desea ejecutar minecraft. Luego, se abriría minecraft.serviceen un editor de texto y agregaría o editaría la entrada Type=forkingen la sección [Service].

Robin Hartmann
fuente
0

De acuerdo con /unix//a/287282/117599 invocando tmuxusando

systemd-run --user --scope tmux

También debería hacer el truco.

phk
fuente
Desafortunadamente, esto parece no funcionar más en 18.10 cósmico.
taneli