Автоматически обновляет почту только при ошибке или перезагрузке?

У меня установлены автоматические обновления на нескольких серверах, некоторые версии 12, некоторые 14. Я хотел бы включить для них MailOnlyOnError, но все равно хотел бы получать уведомления по электронной почте, когда обновление требует перезагрузки.

Буду ли я получать уведомления о необходимости перезагрузки с включенной MailOnlyOnError?

Спасибо!

2 ответа

Решение

Вот решение, основанное на ответе в этом обсуждении. Хитрость в том, что на запрос на перезагрузку указывает наличие файла /var/run/reboot-required,

Создать файл /usr/local/sbin/email_update_required с содержанием

if [ -f /var/run/reboot-required ]; then
    echo "A reboot is required following updates to server `hostname`" | mail -s "Reboot Required" <mail-address>
fi

регулировать <mail-address> (например, для root или ваш личный адрес электронной почты). Проверьте разрешения и сделайте файл исполняемым.

Поместите следующую строку в ваш корневой crontab (sudo crontab -e)

00 08 * * * /usr/local/sbin/email_update_required

(Он запускает скрипт email_update_required каждый день в 8 часов, настраивайте по мере необходимости.)

Я применил вышеупомянутый метод к серверу Ubuntu 14.04 с unattended-upgrades а также MailOnlyOnError true"и это работает.

Тем не менее, было бы неплохо иметь более "официальный" Ubuntu или автоматический способ получения этих уведомлений. Переключатель похож на MailOnlyOnError было бы замечательно.

Спасибо @Whatsisname и @azimut за вопрос и решение. Сейчас 2023 год, и я использую Ubuntu 22.04. Хотя решение все еще работает, я улучшил этот скрипт...

      # To get ADMIN_EMAIL if defined
[ -f ~/.envrc ] && source ~/.envrc
email_address=${ADMIN_EMAIL:-"root@localhost"}

if [ -f /var/run/reboot-required ]; then
    echo "The server `hostname` will be rebooted, unattended, as per the schedule!" \
        | mail -s "Unattended Reboot" $email_address
fi

Два момента, на которые следует обратить внимание из предыдущего ответа @azimut...

  • Скрипт можно запустить от имени обычного пользователя (как/var/run/reboot-requiredможет прочитать каждый)

  • По поводу времени cron. Это должно произойти между временем, когда сервер запускает службу, и временем, определенным в/etc/apt/apt.conf.d/50unattended-upgradesфайл. В противном случае мы не будем уведомлены, так как автоматическая перезагрузка могла уже произойти. Срокиapt-daily-upgradeсервис можно увидеть, выполнив команду (как обычный пользователь...systemctl status apt-daily-upgrade.timer).Automatic-Reboot-Timeопределяется пользователем. Значение по умолчанию — «сейчас», что обычно не рекомендуется, когда мы хотим предупредить себя о предстоящей автоматической перезагрузке.

Другие вопросы по тегам