Posso programar a execução de um script dentro de um determinado processo de shell de vez em quando?

2

O cron pode ser usado para agendar a execução de um programa de vez em quando. Mas parece não ser específico para um processo de shell existente.

Se eu tiver um script que acesse o estado de um processo bash específico (por exemplo, para acessar a saída de execução jobs e dirs no shell por source do script), como posso agendar sua execução em o processo bash específico de vez em quando?

Obrigado.

update: nenhuma resposta pode acessar diretamente o estado de um processo bash existente. Eles podem indiretamente para alguma informação de estado copiada do processo de shell pai para o processo do shell filho. Não me lembro por que aceitei um.

    
por Tim 26.07.2018 / 20:08

2 respostas

2

Não tenho certeza do que você está procurando, mas você pode dar início a um trabalho em segundo plano que faz alguma coisa e depois aguarda X segundos, antes de repetir.

Exemplo

( while : ; do echo hello ; sleep 10 ; done ) &
    
por 26.07.2018 / 20:32
2

Você pode usar o comando date para ajustar dinamicamente a duração da operação de suspensão.

Exemplo

now() { date '+%s'; }
next() { date -d $(date -d "1 hours" '+%H:00:00') '+%s'; }

( while : ; do echo "Your Tasks Here" ; sleep $(next) - $(now) ; done ) $ 

O formato de data interna da função next () é estruturado para ser executado na hora. Se você quisesse que ele fosse executado a cada quinze minutos, você poderia ajustar da seguinte forma.

next() { date -d $(date -d "15 minutes" '+%H:%M:00') '+%s'; }

Veja também: Comando de data do Linux, localizando segundos para a próxima hora

Nota: Matar o script acima é um pouco chato devido à operação de sono que acontece em segundo plano. Mate por PID ou considere não fazer o back-ground da operação de loop.

    
por 27.07.2018 / 23:58

Tags