Eu tenho um processo que inicia e retorna para um arquivo de log. O script que inicia inicia em um GNU screen
e depois segue o log com tail
.
O processo começará imediatamente a gravar no arquivo de log e é útil vê-lo iniciar dessa maneira para detectar qualquer erro de configuração e, em seguida, retornar ao prompt com ctrl-c
. Estou ciente de que isso apenas para o tail
não encerra o processo que está registrando; isso é desejado.
O que eu quero fazer é iniciar um segundo processo de watchdog a partir do script de shell que serve para executar uma ação somente após o processo que está sendo executado no screen
terminar de inicializar; isso ocorre somente APÓS toda a saída do log de inicialização.
Se eu executar um loop no meu script de inicialização e aguardar a inicialização do processo screen
para que ele possa executar sua ação, perco a saída tail
em tempo real. Se, em vez disso, eu tentar monitorar o log e gerar seu conteúdo enquanto espero no loop, o usuário não poderá ctrl-c
sair do script antes, sem quebrar o loop que está aguardando a inicialização ser concluída.
Para suportar o watchdog e o tail -f
do arquivo de log, posso iniciar uma tarefa e, em seguida, disown
para garantir que um logout não a mate.
Esta é uma grande quantidade de informações para uma pergunta simples, mas eu queria incluir todos os detalhes relacionados ao meu caso de uso para fornecer esclarecimentos, caso haja uma alternativa melhor.
Além disso, eu poderia começar outro screen
, mas não preciso interagir com ele e disown
parece ser uma alternativa mais simples.
Também estou ciente de que preciso redirecionar a saída conforme necessário para impedir a saída para o shell pai.
Exemplo de código, testado e executado corretamente ao iniciar a partir de um script e, em seguida, efetuar logout e voltar em:
#!/bin/bash
( sleep 10s; echo 1 > b ) &
disown
Tags bash job-control nohup disown