Como verificar o log de tempo de execução de um trabalho em lote enviado usando o comando `at`?

Como verificar o log de tempo de execução de um trabalho em lote enviado usando o comando `at`?

Eu envio o trabalho em lote no Ubuntu 20.

at now -f myscript.sh

Recebo um e-mail com um registro quando o trabalho é concluído. Mas para um trabalho demorado, gostaria de ver progresso durante a execução. Como eu posso fazer isso?

Responder1

Isso será muito detalhado, no entanto, se você adicionar -x ao shell na primeira linha de myscript.sh, ele mostrará a execução linha por linha do seu script. A saída seria enviada por e-mail para o usuário que envia o trabalho e também estaria presente no cron log.

Exemplo, #!/bin/sh -x em vez de #!/bin/sh

Enquanto o trabalho está em andamento, basta seguir o cron log e você poderá observar o progresso. Lembrete: isso produzirá muitos dados de registro! Você pode optar por modificar seu script para mostrar o progresso ao longo do caminho de alguma forma? echo "concluída a desmontagem, iniciando a configuração de xxx"

Responder2

A atferramenta captura stdout do processo e depois o envia como log. Portanto, sem alterações significativas, atnão é possível ler o log conforme está escrito.

Mas você pode fazer uma solução alternativa com um segundo log. Basta imprimir o log de 'progresso' no arquivo com um nome conhecido. Depois disso, você pode tail -ffazer isso se quiser ou ignorar.

Em outras palavras, o script que você executa atseria algo como:

#!/bin/sh
echo Started at `date` 
echo Started at `date` > /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc
echo Completed at `date` with return code $rc >> /var/myscript.log

Neste caso, você teria um log curto (com apenas duas linhas) para atenviar por e-mail, e todo o log da parte interna de longa execução.

Como extensão desta abordagem você pode usar o tee. Permite duplicar o stdout no arquivo. O que por sua vez pode ajudar na duplicação da impressão de mensagens de log no script.

#!/bin/sh
echo Started at `date` | tee /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc | tee -a /var/myscript.log

informação relacionada