пятница, 29 августа 2008 г.

Назойливый Cron

Каджый, мало-мальски использующий для решения определенных задай crontab или просто cron, знаком с сообщениями о "проделанной работе". Конечно, они будут приходить только если корректно настроена почтовая система. У меня именно такой случай, и я регулярно (раз в сутки) получал сводки типа:
Return-Path:
Delivered-To: me@domain.com
Received:
From: root (Cron Daemon)
To: root
Subject: Cron run-parts /etc/cron.daily
/etc/cron.daily/ххх.sh:
А с возрастанием задач, "навешанных" на крон, количество такий сообщений будет возрастать. А не проще ли, настроив такие задачи, получать не текст о выполнении, а сводку если что-то пойдет не так??
Как это сделать? - сравнивать лог выполнения текущей задачи, с логом выполнения предыдущий раз!

Крон отправляет на почту все сообщения stdout, stderr возникшие в процессе своего выполнения. Следовательно, перенаправив этот вывод в текстовый файл и добавив процедуру сравнения, можно легко избавиться от такой "назойливости" крона.
Выглядеть скрипт может следующим образом:

!#/bin/sh
# избавляемся от сообщений с ошибками при первом запуске
touch /some/place/old.log

# "документируем" все действия вызываемых программ/скриптов
/usr/local/sbin/....sh &> /some/place/curr.log
или
for ... &>> /some/place/curr.log

# сравниваем что изменилось с прошлого раза
diff /some/place/curr.log /some/place/old.log

# переносим текущий лог действий в лог для сравнения в следующий раз
mv -f /some/place/curr.log /some/place/old.log