Поэтому я создал простой сценарий для отправки оповещения по электронной почте, когда определенный веб-сервис перестает работать.
Он имеет простой поток:
test = $( curl [address] | grep [a certain string in response] | wc -l )
if [ $test -ne 1 ]; then
echo "there has been an error" | mail -s "Error" -t "[my-mail-address]"
fi
а в crontab он настроен на выполнение проверки каждые пять минут:
*/5 * * * * sh /path/to/script/
Пару дней он работал хорошо, но внезапно, минут десять назад, с сервера одновременно были получены почти сотня электронных писем. Это вообще не кажется возможным, поскольку в скрипте даже нет циклов.
Системный журнал:
Jan 26 01:05:01 sv1 CRON[23310]: (munin) CMD (if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi)
Jan 26 01:10:01 sv1 CRON[23815]: (munin) CMD (if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi)
Jan 26 01:12:12 sv1 kernel: [5962667.417178] [ 1106] 0 1106 5914 168 17 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417250] [27493] 0 27493 14949 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417252] [27939] 0 27939 14949 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417254] [28436] 0 28436 14948 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417256] [28943] 0 28943 14949 224 34 0 0 cron
Jan 26 01:12:12 sv1 kernel: [5962667.417258] [29408] 0 29408 14949 224 34 0 0 cron
...
* это продолжается примерно 800+ строк с аналогичной меткой времени (до 01:12:24). Отметки времени этих 800+ строк совпадают с одновременными отправками писем. Это странно, так как cron должен запускаться каждые 5 минут, отсюда первые 2 строки. Строки, начинающиеся с 01:12:12, выглядят подозрительно.
Обновить:
Просто снова отключил службу и позволил cron и скрипту сделать свою работу. Было отправлено одно письмо.
Поскольку тест очень прост: истина / ложь, я изо всех сил пытаюсь понять, какие особые обстоятельства могут привести к одновременной отправке нескольких писем.
Ты уверен It was working well for a couple of days....
? Это означает, что письмо отправлялось каждые 5 минут.
Возможно, письма не могли быть отправлены по какой-либо причине, что привело к возникновению очереди, а когда проблема с подключением была решена, все письма были отправлены. Чтобы найти проблему, необходимо проверить почтовый журнал.
Cron надо отлаживать. Проверьте системный журнал и хронлог:
sudo less /var/log/cron
Некоторая информация о cron должна быть найдена во время отправки 124 писем.
Также проверьте этот вопрос и ответ. Если система слишком загружена, задания cron могут быть суммированы, и тогда следует рассмотреть возможность использования демона.
Проверьте вывод curl [address] | grep [a certain string in response] | wc -l
. Прошло ли много времени, прежде чем команда будет выполнена? Почему вы видите все сходства? Первого удара должно хватить. | голова -1 может быть использован.