Доступно ли расширенное ведение журнала для заданий cron?

Доступно ли расширенное ведение журнала для заданий cron?

У меня есть 3 скрипта в /etc/cron.daily. Мои журналы cron написаны в /var/log/cron. Ниже приведена запись для указанного выше cron, который был запущен.

(root) CMD (run-parts /etc/cron.hourly)

Здесь stdoutодин stderrиз скриптов внутри cron недоступен, это означает, что run-partsкоманда была запущена над этой папкой.

Есть ли какие-нибудь приемы, которые помогут зарегистрировать то, что произошло во время выполнения трех скриптов?

ПРИМЕЧАНИЕ: Я не могу редактировать скрипты, cron.dailyчтобы перенаправить ошибки и ошибки в файл журнала.

решение1

В Unix почтовая система — это средство, с помощью которого системные уведомления доставляются пользователям. Вы можете думать об этом как о чем-то подобном в Windows, где что-то будет отображаться на панели задач с всплывающим сообщением, если ему нужно уведомить вас о чем-то. Поскольку cronjobs (теоретически) не должны производить никаких выходных данных (поскольку никто не должен быть там, чтобы их видеть), любой вывод (stdout или stderr) рассматривается как возможное указание на ошибку или проблему, и поэтому владельцу cronjob отправляется электронное письмо с предложением проверить его.

Итак, весь вывод (stdout и stderr) отправляется через локальную почтовую систему владельцу cronjob. Если владелец — не персональная учетная запись, вы можете указать локальному MTA пересылать на реальную учетную запись электронной почты, настроив псевдоним. Например, я добавил в /etc/aliases:

root: [email protected]

Затем запустил newaliasesкоманду (для перестройки базы данных почтовых псевдонимов). После этого я начал получать письма root на свой корпоративный почтовый ящик:

root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only

Посмотрите на него во всей красе.

Итак, это более или менее нормальный способ (позволить системе отправлять уведомления по электронной почте). Есть и другие способы работы с уведомлениями. Несколько альтернатив:

Изменение псевдонимов для сохранения писем в определенном файле:

root: /var/log/rootMails

Передача почты в скрипт:

root: |/usr/local/bin/filterMail

Альтернативой возне с псевдонимами является использование MAILTO=опции внутри crontab пользователя, которую поддерживают многие демоны cron. Это может быть предпочтительнее, если вы хотите получать только определенный набор уведомлений пользователя, а не что-либо, что будет сброшено в его почтовый ящик (что и aliasesдостигается).

Я уверен, что есть и множество других, но вы, вероятно, захотите выполнить первый или последний пункт.

решение2

Вы можете запустить cron с -sопцией использования syslog вместо отправки писем. Это работает по крайней мере в RHEL и его производных, FreeBSD и MacOS.

решение3

Вы можете вести журнал самостоятельно внутри скрипта bash:

logfile=/var/log/mine/whatever.log

log () {
    timestamp=$(date +'%F %T')
    echo -e "$timestamp $1" >> $logfile
    shift
    for a; do
        echo -ne "$a" >> $logfile
    done
}    

log "Hello world.\nAnd so on..."

[...]

Если вы запускаете команды, вывод которых вы хотите записать:

somecommand 2>&1 >> $logfile

Вы также можете отправлять сообщения и ошибки в системный регистратор (см. man logger) и потенциально сортировать их с помощью конфигурации системного журнала.

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