Como executar um processo durante a noite em um servidor remoto depois de sair do ssh

3

Sou muito novo no Linux (como no início desta semana, quando comecei), então me desculpe se esta é uma pergunta muito simples. Eu estou executando um programa em um servidor remoto e é um processo demorado que lida com algumas centenas de gb de dados, então eu queria deixá-lo funcionando durante a noite. Longa história curta Eu ssh em, eu começo o programa, assisto para ver que ele está em execução e, em seguida, feche fora do terminal. Eu volto esta manhã e vejo que parou exatamente onde estava quando terminei meu ssh na noite anterior. Existe uma maneira de manter o processo em execução no servidor quando eu fechar?

    
por Ayedu 06.09.2017 / 16:09

4 respostas

11

Como as outras respostas sugerem. Você pode usar nohup <command> & .

Você também pode usar screen , este (basicamente) é um terminal destacável. Você pode iniciar um terminal usando o comando screen e quando quiser desanexá-lo. Ctrl + a d . E para reativar sua execução de terminal screen -r <terminal_name> . Se você tem mais de um terminal desanexado, você pode usar o comando screen -r para ver os nomes dos terminais desanexados.

Screen is a full-screen window manager that multiplexes a physical ter‐ minal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows.

EDITAR:

Você também pode usar tmux . Dê uma olhada aqui para um "como usar tmux " básico.

tmux is a terminal multiplexer. What is a terminal multiplexer? It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal. And do a lot more.

    
por 06.09.2017 / 16:23
2

O comando que você quer é chamado nohup . A sintaxe básica é:

nohup <command>

Isso executará <command> e forçosamente ignorará SIGHUP (o sinal enviado aos processos quando seu terminal de controle é fechado, como quando a sessão SSH pai é finalizada). Note que é possível em um sistema baseado em Systemd impedir que isso funcione, mas nenhuma distribuição que eu conheço usa essa configuração por padrão.

Como alternativa, verifique se o comando at está presente e atd está em execução. Se ambos forem o caso, você poderá instruir o sistema a executar seu script como um trabalho em lotes e, possivelmente, até enviar por e-mail a saída usando o seguinte:

at "'date +%FT%T'" << EOF
<command>
EOF

Você pode substituir o conteúdo das aspas duplas por qualquer especificação razoável de data e hora ( at é inteligente o suficiente para lidar com coisas razoavelmente humanas como '8AM amanhã' ou 'próximo domingo'), mas o comando dado será iniciado o trabalho imediatamente (o comando date retornará a data e a hora atuais como um registro de data e hora ISO 8601).

    
por 06.09.2017 / 16:15
0

Faça login no seu servidor por SSH e execute:

nohup YOUR_PROGRAM &

Isso executará seu programa em segundo plano e o processo de execução não será interrompido se sua sessão SSH for desconectada e parar o shell que você estava usando.

Confira este tópico para obter detalhes sobre nohup e & .

    
por 06.09.2017 / 16:15
0

Você pode usar nohup neste caso.

Tente

$ nohup ./YourExecutableFile &

Isto irá executar o seu arquivo executável e colocá-lo em segundo plano e ele não parará mesmo se você sair.

    
por 06.09.2017 / 16:14