Cron Job: сохранить последние 20 строк - PullRequest
0 голосов
/ 19 августа 2009

У меня есть процесс, который выводит миллионы строк на консоль во время ее работы. Я хотел бы выполнить это в cronjob, но чтобы избежать отправки писем с несколькими МБ, я хотел бы ограничить вывод в случае успеха (выход == 0) до 0 строк и в случае ошибки (выход ! = 0) до последних 20 строк.

Любые идеи, чтобы достичь этого без особых усилий? Может быть, несколько строк Perl или умное использование стандартных инструментов?

Ответы [ 2 ]

2 голосов
/ 19 августа 2009

Просто передайте вывод в tail, либо непосредственно в crontab, либо в скрипте-оболочке. например,

10 * * * * myprogram 2>&1 | tail -20

Это всегда будет выводить последние 20 строк, успешно или нет. Если вы не хотите выводить данные в случае успеха, а некоторые - в случае ошибки, вы можете создать скрипт-обертку, который вы вызываете из cron, например:

#!/bin/sh
myprogram 2>&1 | tail -20 >/tmp/myprogram.log
if [ $? != 0 ] ; then 
    echo "Failed!"
    cat /tmp/myprogram.log
fi
rm /tmp/myprogram.log 
2 голосов
/ 19 августа 2009

Является ли команда tail подходящей для того, что вы пытаетесь сделать? Возможно, если консольный вывод также доступен в файле (возможно, с использованием tee )?

...