¿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)


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)

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

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/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)#

¡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.


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].


0

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

systemd-run --user --scope tmux

También debería hacer el truco.


Desafortunadamente, esto parece no funcionar más en 18.10 cósmico.
taneli
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.