Evitar o desligamento usando o script shell executado no desligamento

1

Histórico:

Eu tenho um script Python que é executado (infinitamente) a partir da inicialização no plano de fundo de um servidor Ubuntu. O processo termina enviando um SIGINT que é manipulado pelo script que finaliza todos os trabalhos antes de sair. Se alguém desligar o servidor, terminando o script, dados importantes serão perdidos. Eu queria saber se havia uma maneira de esperar que o script terminasse antes do desligamento, ou impedir o desligamento completo (se estivesse impedindo, seria bom se ele pudesse exibir uma mensagem).

Tentativa:

Meu script Python (test.py) tem um manipulador SIGINT, onde quando ele recebe um SIGINT, ele conclui todas as tarefas antes de sair. Eu escrevi o seguinte script de shell:

PROCESS=$(pgrep -f 'python test.py')
echo $PROCESS
kill -2 $PROCESS
while kill -2 $PROCESS 2> /dev/null; do
        sleep 1
done

Este script irá enviar continuamente kill comandos para o script python até que ele saia (funciona quando executado). Coloquei o script no diretório /etc/init.d , executei chmod -x no script, criei links simbólicos para os diretórios /etc/rc0.d e /etc/rc6.d com nomes começando com K99. Como os scripts no diretório /etc/rc0.d / /etc/rc6.d são executados no encerramento / reinicialização, o script deve (teoricamente) ser executado e aguardar até que o script python seja encerrado / reinicializado. Isso não parece estar funcionando. Ele desliga / reinicia sem concluir as tarefas.

A ajuda seria muito apreciada.

    
por Mocking 16.04.2016 / 05:40

1 resposta

2

Você vinculou seu script a K99 . Ao alterar o nível de execução, os scripts K * são chamados com a opção stop , e os scripts S * são chamados com a opção start ou stop para o nível de execução 0 (shutdown). Eles são chamados em ordem numérica.

Portanto, você deve remover seus links K99 e substituí-los por K00 links para que eles sejam executados primeiro (antes do script que realmente interrompe o sistema!).

    
por 16.04.2016 / 14:21