Как проверить журнал выполнения пакетного задания, отправленного с помощью команды `at`?

Как проверить журнал выполнения пакетного задания, отправленного с помощью команды `at`?

Я отправляю пакетное задание в Ubuntu 20.

at now -f myscript.sh

Я получаю письмо с журналом, когда работа завершена. Но для работы, требующей много времени, я хотел бы видеть прогресс в ходе выполнения. Как это сделать?

решение1

Это будет очень многословно, однако, если вы добавите -x к оболочке в первой строке myscript.sh, он покажет вам выполнение вашего скрипта построчно. Вывод будет отправлен по электронной почте пользователю, отправившему задание, а также будет представлен в журнале cron.

Пример, #!/bin/sh -x вместо #!/bin/sh

Пока работа выполняется, просто выполните tail -f в журнале cron, и вы сможете наблюдать за ходом выполнения. Напоминаем, что это создаст много данных журнала! Вы можете изменить свой скрипт, чтобы каким-то образом показывать ход выполнения? echo "finished teardown, beginning setup of xxx"

решение2

Инструмент atзахватывает stdout процесса, а затем отправляет его в виде журнала. Поэтому без существенного изменения atневозможно прочитать этот журнал в том виде, в котором он написан.

Но вы можете обойти это с помощью второго журнала. Просто распечатайте журнал «прогресса» в файле с известным именем. После этого вы можете tail -fего использовать, если хотите, или проигнорировать.

Другими словами, скрипт, который вы запустите, atбудет выглядеть примерно так:

#!/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

В этом случае у вас будет короткий журнал (всего из двух строк), который можно atотправить вам по почте, и весь журнал из длинной внутренней части.

В качестве расширения этого подхода можно использовать tee. Он позволяет дублировать stdout в файл. Что в свою очередь может помочь с дублированием вывода сообщений журнала в скрипте.

#!/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

Связанный контент