Existem algumas perguntas e respostas aqui em relação ao alerta quando um processo é concluído / sai ( 1 , 2 ) - mas tudo isso pressupõe que o usuário tenha emitido o processo por conta própria e, portanto, pode criá-lo com um alerta incorporado no script de governo ou canalize o processo para algum tipo de alerta.
Minha situação é que eu gostaria de ser alertado sobre a conclusão / saída de um processo que meu usuário não está inicializando. Ou seja, estou processando em massa grandes arquivos de vídeo em um servidor Ubuntu 12.04 LTS. Certas operações nesses arquivos levam muito tempo, então eu gostaria de algum tipo de alerta (o e-mail seria ótimo) quando uma operação específica terminar. Eles demoram tanto tempo que fazer isso de forma única, manualmente, com base no PIT seria perfeitamente adequado.
Para fornecer mais informações - digamos que estou processando um arquivo particularmente grande, e vejo que ele progrediu para um script FFMPEG, o processo em si sendo um script python (que é bastante complexo, não foi escrito por mim mesmo e algo assim) Não desejo modificar - embora essa seja a primeira abordagem lógica). Eu imagino emitir um comando ou script com o PID do referido script python em execução como argumento, e quando o processo com esse PID não estiver mais em execução, o script de alerta fará sua parte.
Alguma ideia?
Respostas:
Eu escrevi process_watcher.py
Atualmente, o corpo do email se parece com:
Crie um problema no GitHub se precisar de melhorias.
fonte
Algo assim?
Substitua
$pid
pela identificação do processo eecho "finished"
pelo que você deseja fazer quando o processo for encerrado.Por exemplo:
fonte
kill -0
relatóriosNo such process
para pids inexistentes eOperation not permitted
para pids propriedade de um usuário diferente, então talvez interpretando a mensagem de erro deve evitar a necessidade desudo
echo -en "\007 \007 \007"
, o que emitirá um 'sino' terminal. Se isso se traduz em um som audível real depende do seu terminal e hardware (mas normalmente depende).Eu uso
&&
para executar um segundo comando quando o primeiro é concluído com êxito. Aqui estão alguns exemplos:Exclua uma pasta grande e bipe:
Compile um kernel e envie um email:
Essa é uma boa maneira de resolver seu problema? Em outro caso, você pode adicionar um
||
e um terceiro comando em caso de falha.Além disso, um script de shell pode receber o status de saída (
$?
) do seu comando e comif/else
e loops você pode fazer o que quiser.fonte
Se você não tiver o pid, isso será executado até que todas as instâncias do ffmpeg sejam concluídas:
fonte
Se você não quiser usar uma opção de pesquisa ou um script externo e já tiver iniciado o processo de longa execução, poderá suspendê-lo com CTRL + Z (envia sinal SIGTSTP) e, em seguida, retome-o com
fg
(move o processo para primeiro plano).Por exemplo:
fonte
Eu criei um aplicativo que enviará uma notificação para o seu telefone Android quando um processo terminar, para que você não precise estar conectado ao seu computador.
Instale e adicione
;notifier.sh
ao final do seu comando.Por exemplo, se o seu comando fosse
make install
, você faria o seu comando:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
fonte