mata a execução do script

1

Eu tenho um script que tenho que executar com certa frequência. Este script executa vários programas, em um loop, definindo algumas variáveis em cada loop. Como esse script é executado por horas, eu o executo usando o comando linux "at", doint

    at now
    >> ./myscript >> output

mas de vez em quando, eu tive que matar o script. O que eu fiz foi matar o PID dos programas que ele executa, pesquisando com ps -A | grep 'name'. A questão aqui é que, como há um loop, posso fazer isso por um longo tempo. 10 minutos apenas matando processos. Isso não é eficiente.

Como posso encontrar o PID de um script iniciado com "agora" algumas horas ou dias atrás? ps-A | O grep 'bash' não oferece nenhum processo que tenha sido executado por tanto tempo.

Eu quero matar o script, então não preciso matar todo o processo iniciado pelo loop até que ele termine, mas não consiga encontrar o PID.

    
por jbcolmenares 14.02.2013 / 14:39

3 respostas

1

Se você tem pgrep e pkill disponível, isso é mais fácil.

pgrep myscript.sh vai te dar o (s) pid (s) de myscript.sh. Uma opção -o vai te dar o mais antigo pid.

pgrep -P $myscriptPid para o pid do comando acima fará com que você tenha todos os filhos do script pai.

pkill terá os mesmos parâmetros, mas como o nome sugere ...

Se pgrep não estiver disponível, um ps -ef | awk '/myscript.sh/ && !/ awk / { print $2 }' obterá o (s) pid (s)

ps -ef | awk -v pid=$myscriptPid '{ if ( $3 == pid ) { print $2 }' obteria os filhos do seu script.

Isso não recorre a árvore de processos até os filhos de crianças, mas deve ser suficiente

    
por 14.02.2013 / 18:04
2

o fusor mostra o PID do (s) processo (s) que abriu a saída do arquivo.

A solução mais elegante é usar cgroups, no entanto. Você poderia usar o systemd para isso. Basta criar um arquivo de serviço para o seu script e iniciá-lo com

systemctl start myscript.service

Se você precisar matá-lo

systemctl stop myscript.service

mata o script e todos os processos criados por ele.

Eu não entendo qual é o uso do at now . Se você quiser apenas desanexar o processo do terminal, use nohup ou screen. Dar à sessão de tela um nome tornaria fácil matar o script também.

    
por 14.02.2013 / 14:50
0

O processo de script deve aparecer com o nome "myscript". Como alternativa, você pode encontrar um dos programas que ele executa e rastrear os PPIDs de volta até onde você precisar.

    
por 14.02.2013 / 14:41

Tags