Солнце палит, а мы пашем, вот такая доля наша.

Хелло май диа френдз. Сегодня попиздим поговорим про логирование и cron.

Но поговорим не про системное логирование процесса crond, а про более развернутое. Развернем наизнанку, кровь кишки, как ты любишь…

К примеру у тебя есть консольное приложение, после запуска которого, на экран выводится какой-либо результат.

Всё хорошо когда запустил ручками и посмотрел. Словил ВАУ эффект! Но если повесить эту задачу на cron, то в системном журнале ты увидишь лишь дату и время запуска.

Jul 11 00:00:01 bashdays CRON[123456]: (user) CMD (/var/www/htdocs/bin/console export:users)

Пожалуй очень информативно, правда? Ну запустился, а что произошло внутри, хуй пёс его знает.

Щас исправим и получим красивое. Достаточно в конец команды добавить:

» /var/log/cronlogs/www-console.log

тип того:

* */1 * * * php /var/www/htdocs/bin/console export:users >> /var/log/cronlogs/www-console.log

Теперь весь выхлоп с команды console export:users будет аккуратненько логироваться в файл www-console.log. По итогу в файле получаем красоту:

Папку только не забудь создать в /var/log, а то оно дурное и не додумается само.

```text [2023-07-11 10:04:20] service.stats.INFO: Processing users [2023-07-11 10:04:20] service.stats.INFO: Updating local stats [2023-07-11 10:04:20] service.stats.INFO: Updating count users [2023-07-11 10:04:26] service.stats.INFO: Updating total stats [2023-07-11 10:04:26] service.stats.INFO: Export Success ``` По желанию грепаем нужное нам, ну и всегда остаемся в курсе событий, зная что же происходит под капотом. Кстати отлично помогает при дебаге. То, что кроновская задача выполнилась, еще ни о чем не говорит, внутри может быть злобный эксепшен

Да и не забываем накинуть logrotate, чтобы место на диске не сжирало бигдатой, а лучше сразу перенаправляй это дело в какой-нибудь агрегатор логов типа ELK или LOKI.

Бонусом лови конфиг для logrotate, чтоб в гугле не лопатить:

/var/log/cronlogs/www-console.log {
   su root root
   daily
   missingok
   rotate 14
   compress
   notifempty
   sharedscripts
}

Есть ли другие способы мониторинга для подобных ситуаций? Конечно есть! Но способ, который я описал выше, используется практически всеми. По крайней мере я на него натыкаюсь постоянно у ребят в различных компаниях.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Потому что люди не любят усложнять и предпочитают быстренько наговнокодить, получить желаемый результат и дальше смотреть свои любимые сериальчики и наши мемчики тут и тут.

О других способах я обязательно напишу отдельный пост, пусть это будет интригой, ну а может ты сам загуглишь и нам потом расскажешь.

В общем адью, албибэк, увидимся!