PuTTY ou OUTRO - Continue executando o comando mesmo depois de sair do PuTTY [duplicado]

13

Eu tenho alguns comandos que preciso executar. Esses comandos precisam ser executados continuamente, mesmo depois que eu sair da minha interface. Quando tenho acesso à GUI do Linux, executo algo como:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Qualquer ajuda será muito apreciada.

user3331952
fonte
Existe alguma razão para você não estar executando esses serviços como daemons?
SevenSidedDie
Os comandos destinam-se a serviços que devem ser executados com quase 100% de tempo de atividade "para sempre" ou uma tarefa de processamento de longa duração que deve terminar após algum tempo? Todas as respostas "funcionarão" para ambos os casos, mas a recomendação adequada será diferente.
Peteris
Qual distribuição específica do Linux você está usando? Descobri que a execução set -m;faz com que meus scripts continuem em execução depois que eu sair do CentOS e do RHEL.
ArtOfWarfare

Respostas:

33

Experimentar

Background_ScriptX &

nohup garante que um processo não seja finalizado quando um terminal estiver fechado. O símbolo & coloca o processo em segundo plano.

Espero que isso tenha sido útil.

Eamonn Travers
fonte
nohup definitivamente faz o trabalho
Pitto
Feliz por ajudar.
Eamonn Travers
15
A tela tem uma clara vantagem sobre o nohup : o nohup não permite retornar a um comando em execução (por exemplo, na manhã seguinte, para ler seu stdout e, em seguida, optar por matá-lo, etc). A tela permite fazer exatamente isso.
Andreas M
1
nohup envia a saída para um arquivo onde pode ser processado.
precisa
Para quem é nohupiniciante, é basicamente "no hangup" - com nohup, o HUPsinal hangup ( ) é ignorado.
Dan7119
20

Se você quiser ler a saída posteriormente, poderá usar screen:

screen -d -m my_command

Isso fornece um terminal desconectado ao qual você pode se conectar mais tarde ( screen -r) para ler a saída stdout / stderr.

Marca
fonte
2
+1. Por um lado, se você fechar o terminal (por exemplo, massa de vidraceiro) e depois abri-lo novamente e reconectar à tela ( screen -r), você também terá toda a saída produzida pelo programa e, caso contrário, "perderá". Além disso, a tela pode fazer muitas coisas incríveis, como telas divididas, etc.! :)
Alberto Santini
6

Outra opção se o nohupcomando não estiver disponível é usar o comando disown .

Primeiro, você pode visualizar suas tarefas em segundo plano executando jobsno terminal. Você pode obter o número do trabalho de lá.

Agora basta executar disown %[job number]e o processo será desconectado do terminal atual e permanecerá ativo quando você sair.

Nota lateral: verifique se você está fazendo a pergunta correta. Se você estiver executando serviços reais conforme sugerido em sua amostra, convém examinar como criar um daemon no sistema operacional de sua escolha. Isso é para garantir que o processo ainda seja executado após uma reinicialização e torná-lo mais consistente com outros serviços.

Espero que isto ajude.

user391035
fonte
3

Desde screenque foi mencionado: existem outros multiplexadores de terminal por aí. Eu gosto tmuxmuito, veja, por exemplo, essa outra questão de superusuário, tmux vs screen para uma comparação.

1k5
fonte
0

Você também pode tentar: setsid Setsid também funciona em programas em segundo plano e permite que continuem em execução após a sessão do terminal / ssh ser desconectada.

Use-o assim:

setsid program-to-background

Página de manual: http://man7.org/linux/man-pages/man2/setsid.2.html

nulldev
fonte