Como executar o tmux / screen com systemd> 230?

19

Eu corro 16.04 e systemdagora mata tmuxquando o usuário desconecta ( resumo da alteração ).

Existe uma maneira de executar tmuxou screen(ou qualquer programa semelhante) com systemd230? Eu li toda a discussão acalorada sobre prós e contras do comportamento, mas nenhuma solução foi sugerida.

(Eu vejo o comportamento em 229 também)

WoJ
fonte
1
Isso é estranho - eu tenho systemd-229-4ubuntu7(das atualizações xenial) e não vejo esse comportamento. De qualquer forma, esse comportamento já foi revertido no Debiansystemd-230-2 , então provavelmente também será revertido no Ubuntu em breve.
MvanGeest
mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support tem pacotes prevenir-systemd- * que lhe permitem instalar e usar sysvinit como anteriores
mirabilos

Respostas:

1

Usando o Ubuntu 18.04 com systemd versão 237 , nenhuma das soluções sugeridas funcionou para mim.

A solução que funcionou para mim foi

  • edite o /etc/systemd/logind.conf
  • descomentar KillExlcudeUsers
  • adicione uma lista de usuários separada por espaço (por exemplo, KillExlcudeUsers=root user1 user2)
medo
fonte
19

A solução adequada é desativar o comportamento do sistema ofensivo em todo o sistema.

Editar /etc/systemd/logind.conf( você deve sudo , é claro) e definir

KillUserProcesses=no

Você também pode colocar essa configuração em um arquivo separado, por exemplo /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Então reinicie systemd-logind.service.

sudo systemctl restart systemd-logind
Michael Hampton
fonte
4
Como é a solução adequada para um problema específico de uma unidade para definir algumas configurações em todo o sistema?
Jspath 13/08
Porque, como você pode ver apenas lendo a pergunta, sem falar em todas as outras discussões em outro lugar sobre isso que a pergunta faz referência indireta, isso não é específico para um aplicativo. Este é um ponto que está em negrito na pergunta.
JdeBP
Você só precisa ativar a permanência para o usuário via loginctl enable-linger <user>. De man loginctl: "Se ativado para um usuário específico, um gerenciador de usuários é gerado durante a inicialização e mantido após o logout. Isso permite que os usuários não conectados executem serviços de longa execução".
Adrian Günter
Ubuntu 18.04 aqui. Isso não funciona, nem mesmo após a reinicialização. A ativação de remanescentes também não.
Pa_
11

Com base na resposta de @ Rinzwind e inspirado na descrição de uma unidade, o melhor que pude encontrar é usar o TaaS (Tmux como um Serviço) - uma instância separada genérica de tmuxuma que se reconecta.

# 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
fonte
Isso é legal, mas não consigo descobrir por que você usaria isso! :)
sarnold
5
@sarnold: poder controlar aplicativos que iniciam com um console, mas que devem estar em execução no momento da inicialização. Minecraft é um exemplo.
woj
5

RemainAfterExit =

Adota um valor booleano que especifica se o serviço deve ser considerado ativo, mesmo quando todos os seus processos terminarem. O padrão é não.

Rinzwind
fonte
Obrigado. Aceitei e marquei sua resposta com +1, pois ela fornece o núcleo da solução. Você saberia se é utilizável em um modo interativo (iniciando tmuxinterativamente, ao contrário da minha resposta)?
WoJ 24/07
duvido. O systemd provavelmente não se importará com o seu tmux, a menos que você diga ao systemd que ele deve :-P (a abordagem deles é bastante objetiva ... parece que é do jeito deles ou não). Você precisa de uma descrição de unidade como você publicado. Sinta-se livre para aceitar o seu e / ou expandir o seu ;-) Não preciso do representante>: - D
Rinzwind
3
Esta resposta precisa de mais detalhes, como onde usar essa configuração.
kasperd
1
Claro, mas a resposta será uma cópia / pasta da página de manual ;-)
Rinzwind
1
@WoJ Você pode criar um alias para tmuxcomeçar como systemd-run --remain-after-exit tmux(ou talvez até com --scope --usersinalizadores).
Debilski
2

Você precisa definir o Typeserviço forkingcomo explicado aqui .

Vamos supor que o serviço que você deseja executar screenseja chamado minecraft. Então você abririaminecraft.service em um editor de texto e adicionaria ou editaria a entrada Type=forkingna seção [Service].

Robin Hartmann
fonte
0

De acordo com /unix//a/287282/117599 chamando tmuxusando

systemd-run --user --scope tmux

também deve fazer o truque.

phk
fonte
Infelizmente, isso parece não funcionar mais em 18.10 cósmico.
taneli