É possível manter um processo do servidor em execução após sair da máquina?
Normalmente eu usaria screen
, tmux
, ou nohup
, todos funcionando quando NÃO estou usando ssh, mas estou usando a máquina localmente. (Ele também está executando o Gnome Desktop.)
Então, existe alguma maneira de iniciar um processo de servidor quando você está logado localmente em uma máquina?
Responder1
A partir do systemd 230, KillUserProcesses
está habilitado por padrão:
https://github.com/systemd/systemd/commit/97e5530cf2076a2b4fc55755917262607aaa6338
Você pode alterar isso editando /etc/systemd/logind.conf
, por exemplo, configurando KillUserProcesses=no
para desativar esse comportamento globalmente ou definindo KillExcludeUsers=<your-username>
para excluir seu nome de usuário desse comportamento.
Ou você pode contornar isso de forma ad hoc, iniciando o processo do servidor usando systemd-run --scope --user <executable>
. Você pode encontrar mais detalhes sobre isso na Example 5. Start screen as a user service
parte inferior doexecução do systemd (1).
Responder2
Estou executando o Debian Stretch e KillUserProcesses
está desabilitado por padrão em meu sistema, mas screen
não sobreviveria a um logout. Após algumas experiências, o seguinte parece manter a sessão de tela em execução após o logout local:
screen -m
ou se você deseja separar imediatamente
screen -m -d
Não sei por que esse é o caso, mas parece funcionar para mim.
Editar:
Fiz mais alguns testes e parece que a execução da tela com um comando não sobrevive. Comecei 4 sessões e me desliguei delas se necessário:
Antes de sair:
user 31365 1 0 16:20 ? 00:00:00 SCREEN -S mdc -m -d vim
user 31376 1 0 16:20 ? 00:00:00 SCREEN -S md -m -d
user 31391 1 0 16:20 ? 00:00:00 SCREEN -S mc -m vim
user 31399 1 0 16:21 ? 00:00:00 SCREEN -S m -m
Depois de sair e entrar novamente:
user 31376 1 0 16:20 ? 00:00:00 SCREEN -S md -m -d
user 31399 1 0 16:21 ? 00:00:00 SCREEN -S m -m
Parece que as duas instâncias iniciadas com um comando foram encerradas durante o logout. Anexei as duas sessões restantes e iniciei o VIM, depois desconectei e efetuei logout novamente. Depois de fazer login novamente, as sessões ainda estavam em execução e o VIM ainda estava em execução em cada sessão.