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 ) &
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.
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.