Problemas que terminam script com tail -f

0

Eu uso o seguinte script para reiniciar um servidor Java em execução em uma caixa do Solaris Sun 5.10 ...

pkill -9 java

nohup ./start_java.sh &

tail -f smx.log

Eu SSH para a caixa (usando Putty ) para executar o script.

Funciona bem desde que eu ctrl-c fora do tail -f antes de fechar putty. Se eu não parar a cauda (basta fechar a janela da massa), ela mata o processo start_java .

Desde então, mudei o script para remover o tail -f , mas estou confuso sobre o porquê isso aconteceria?

    
por Ben ODay 16.02.2010 / 01:42

3 respostas

2

Escreva um script que faça isso:

#!/bin/bash    
trap 'echo hup' hup
trap 'echo int' int
trap 'echo quit' quit
trap 'echo abrt' abrt
trap 'echo kill' kill
trap 'echo usr1' usr1
trap 'echo usr2' usr2
trap 'echo term' term
trap 'echo chld' chld
trap 'echo cont' cont
trap 'echo stop' stop
trap 'echo tstp' tstp
trap 'echo ttin' ttin
trap 'echo ttou' ttou

shopt huponexit
sleep 10
echo $(date) process $$ done

Escreva um segundo script que faça : > nohup.out; nohup firstscript& echo sleeping; sleep 10 . Execute o segundo script, aguarde um segundo ou dois e feche seu terminal PuTTY. Abra um novo terminal PuTTY e inspecione o arquivo nohup.out. Ele deve informar o sinal que o primeiro script recebeu que o fez parar. Isso ajudará você a descobrir como proceder. Você poderia tentar fazer trap '' THEGUILTYSIGNAL por uma coisa.

Ele também deve informar o valor de huponexit. Se isso estiver ativado, experimente o shopt -u huponexit e veja se isso melhora a situação. (Melhoria = você pode rodar o segundo script e fechar o seu terminal PuTTY, mas o primeiro script ainda é executado até a conclusão).

    
por 16.02.2010 / 13:56
0

Nohup deve funcionar, mas na minha experiência, algumas vezes os clientes realmente fazem sigkill em vez de suspender, então acaba matando seus processos em vez de apenas dizer para eles desligarem (como nohup impede). Screen é uma solução possível para o problema, uma vez que ignora sigkill, mas também tem seus próprios problemas que você terá que contornar.

Pode ser que ter um processo em execução faça com que seu terminal (ou Putty) envie sigkill.

    
por 16.02.2010 / 01:59
0

Embora screen seja provavelmente a melhor maneira de lidar com isso, uma alternativa, se você estiver criando scripts com bash , seria disown seu processo start_java.sh depois de iniciá-lo. Isso desassocia o processo do terminal, portanto, quando você fechar o PuTTY, qualquer SIGKILL enviado para processos em execução não será enviado para esse processo.

Outra alternativa seria usar tcsh , que automaticamente rejeita os processos em segundo plano quando sai, em vez de SIGKILL'em eles.

Eu acho que você pode adicionar disown em seu script assim:

#!/bin/bash
# might need to specify bash in the line above for this to work right

pkill -9 java
nohup ./start_java.sh &
disown

tail -f smx.log
    
por 16.02.2010 / 05:15