Loop infinito de tarefas agendadas com saída intermediária de cada trabalho

0

Eu tenho um programa que gera material para a saída padrão. Eu estou usando o cron para agendar isso, o que é bom, porque eu estou coletando as coisas que imprime por e-mail e faço algum trabalho estatístico sobre isso. Eu gostaria que isso continuasse essencialmente para sempre.

Semelhante à pergunta 538622 , eu também gostaria que o trabalho fosse "reenviado" quando terminar. Isso não pode ser feito por meio de um script de loop infinito porque preciso coletar continuamente o que é enviado por email do cron.

Se possível, eu também gostaria de ter N trabalhos em paralelo quando o computador tiver N CPUs.

Até agora, agendei os trabalhos para executar cada minuto X, mas como o computador é usado por outros, isso não é um uso muito eficiente do tempo e há o risco de encher a máquina com meus trabalhos que demoram mais e mais tempo (para que X minutos não seja suficiente).

Alguma ideia de como fazer isso?

    
por Community 07.05.2015 / 15:39

1 resposta

0

Com base no script da pergunta em questão, você pode buscar a saída do comando em um arquivo e enviá-lo por e-mail após a conclusão de uma iteração. Nesse caso, você pode ter um loop infinito e, quando você iniciar usando nohup no segundo plano, ele poderá ser executado enquanto o host estiver ativo.

O script de exemplo (chamado parse.sh neste caso) pode ser:

while true
do
    command &> /tmp/output_thread_$1
    cat /tmp/output_thread_$1 | mail -s "output from thread $1" email@recipient
done

Se você chamar o script usando

for thread in 1 2 3 4; do nohup parse.sh $thread & done;

em que 4 é o número de CPUs. Ele vai começar (neste caso) 4 processos fazendo suas coisas

    
por 07.05.2015 / 16:21