Alternativas para nohup?

5

Eu tenho um script init.d que eu quero que funcione em segundo plano, mesmo quando eu saio do terminal. No entanto eu tentei fazê-lo rodar em segundo plano com nohup mas não tinha "esperança", porque quando eu saí, olhando para o pstree eu posso ver o PID desaparecendo e assim nohup pára de funcionar. p>

P: Existe outra maneira além de nohup de empurrar um script que funciona em primeiro plano para o segundo plano, mesmo depois de você sair do terminal?

    
por 3kstc 25.03.2015 / 03:43

5 respostas

2

Ok, existem várias opções:

  • disown

Você pode combinar disown e & para empurrar seu script para o plano de fundo

$ disown [your_script] &
[your_script] pode ser verificado pelo comando jobs . Uma vez digitado, você verá:

$ jobs
[1]+ Running [your_script]

E a morte pode ser feita por kill %1 , o 1 refere-se ao número do trabalho visto acima. Esta é a melhor alternativa para nohup , pois não deixa os arquivos nohup.out espalhados por todo o sistema de arquivos.

  • screen

É um terminal "virtual" que você pode executar a partir de um terminal "real" (atualmente todos os terminais são "virtuais", mas isso é outro tópico para outro dia). Screen continuará sendo executado mesmo que sua sessão ssh seja desconectada. Qualquer processo iniciado em uma sessão screen continuará sendo executado com essa sessão de tela. Quando você se reconectar ao servidor, você pode se reconectar à sessão de tela e tudo será como se nada tivesse acontecido, além do tempo que passou.

Excelente fonte: Falando UNIX: permanecendo vivo com a tela ".

    
por 3kstc 25.03.2015 / 11:26
3

Aqui está o comando "magic" (explicação abaixo):

thecommand &>/dev/null &
  • thecommand obviamente é o comando.
  • &>/dev/null redireciona toda a saída do comando para um buraco negro.
  • & executa o processo em segundo plano.
por Helio 25.03.2015 / 10:16
1

Use & após seu comando no script como:

your command here > /dev/null 2>&1
exit
    
por Faizan Akram Dar 25.03.2015 / 04:11
1

Não consigo entender perfeitamente o seu problema, mas ...

No meu caso, eu uso screen para trabalhos em segundo plano de longa duração. Ele fornece terminal virtual, que é anexável / destacável a qualquer momento. Assim, posso sair da sessão original sem fechar a sessão virtual e recuperar essa sessão sempre que quiser.

de qualquer forma, isso não é para scripts no estilo init.d.

    
por sio4 25.03.2015 / 09:34
0

Eu tenho que executar um comando de longa execução (rsync) via SSH (em um QNAP nas). Aquela máquina não tem nohup nem tela instalada. Eu gostaria de poder executar o comando sem a necessidade de manter meu laptop com o cliente ssh em execução o tempo todo. As respostas sugeridas aqui com background ou e comercial (& amp;) simplesmente não funcionam. As pessoas podem não estar cientes de que nohup realmente protege o processo para as interrupções SIGINT e SIGTERM. Então sem nohup acabo com o seguinte erro sempre que eu desconecto minha sessão ssh:

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(553) [receiver=3.0.7]rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(553) [generator=3.0.7]

Então, no meu caso, o setsid ajudou em vez de nohup.

    
por Jörg 18.04.2018 / 23:11

Tags