Postfix больше не регистрируется в / var / log / mail после того, как он был удален и заново создан?

10

Я случайно удалил /var/log/mailфайл. До этого момента я мог контролировать это с помощью постфикса. Теперь кажется, что Postfix не отправляет свои журналы /var/log/mail, так как файл не обновляется новыми сообщениями журнала.

drpaneas
источник

Ответы:

9

Когда вы удаляете файл mail.log, rsyslog (в Ubuntu) теряет дескриптор файла. Чтобы заставить его работать на Ubuntu, пожалуйста, дайте:

sudo service rsyslog restart

Это не только создаст новый файл, но и начнет писать логи.

Ashish
источник
1
Вместо того чтобы сказать, что вы сделали, сделайте ответ более общим (поучительным образом), объясняя нам, почему.
Джули Пеллетье
4

Даже после создания пустого файла

touch /var/log/mail

Вы должны перезапустить системный журнал

service syslog restart

и тогда это лог-усиление :)

drpaneas
источник
4

Это ошибка в системном журнале, но она иллюстрирует распространенную проблему, когда кто-либо удаляет файл, когда он открыт программой. Когда вы делаете «rm», вы удаляете запись каталога, но вы НЕ удаляете основной файл. Операционная система ведет подсчет ссылок на файл и фактически не удаляет данные базового файла, пока счетчик ссылок не станет равным нулю. В случае среднего файла счетчик ссылок нераспечатанного файла равен единице (запись каталога). Когда файл открыт, счетчик увеличивается до двух. Если вторая программа откроет тот же файл, счетчик будет увеличен до трех. Если запись в каталоге теперь удалена, счетчик уменьшается до двух - это означает, что файл является аномальным (не имеет имени),

Когда вы удаляете / var / log / mail, системный регистратор все еще имеет файл, открытый для записи. Если вы создадите новую / var / log / mail, она будет указывать на файл, отличный от того, который в данный момент записывает системный регистратор. Единственный способ сделать все согласованно - перезапустить системный регистратор. Когда оригинальный системный регистратор завершает работу, все связанные с ним файлы закрываются, включая анонимный почтовый журнал, запись каталога которого вы удалили. Когда вы перезапустите системный регистратор, он снова откроет / var / log / mail, когда ему потребуется написать сообщение журнала, и оставит его открытым после этого.

Другой способ, который часто обнаруживается, это когда работающая программа заполняет весь диск данными файла; пользователь удаляет очень большой файл, но дисковое пространство не освобождается, поскольку файл все еще существует и занимает дисковое пространство, но запись каталога была удалена. Когда программа завершается (либо потому, что пользователь ее убил, либо она сама себя закончила), дисковое пространство будет восстановлено, поскольку счетчик ссылок в файле станет равным нулю.

Чтобы предотвратить это, регистратор может сначала написать сообщение журнала, проверить, существует ли запись в каталоге файла журнала и, если она не существует, закрыть исходный файл журнала, открыть новый, а затем переписать сообщение - чтобы сообщение не потерялось Но для того, чтобы сделать все это, потребуется гораздо больше сложности, чем должно быть у системного регистратора - для каждого записываемого сообщения запись будет занимать немного больше времени из-за дополнительной проверки каталога, которая будет выполняться каждый раз, когда файл имеет НЕ был удален.

Для более ясного понимания всего вышеперечисленного полезна следующая команда, которая описывает системный вызов, который выполняет удаление записи каталога и уменьшение ссылки: «man 3 unlink»

Дуглас Кэмпбелл
источник
4

Это не проблема в CentOS 7. Кто-то подумал, что было бы неплохо иметь почтовые журналы с постфиксом, чтобы пройти через журналиста. Если вы хотите увидеть логи постфикса:

journalctl -u postfix

(чтобы увидеть весь журнал)

journalctl -u postfix -f

(за хвостом бревно)

Вам также может понадобиться в main.cf для postfix

syslog_name = postfix
ник портной
источник
1
Я потратил три часа, пытаясь восстановить систему, в которой исчезло ведение журнала. Если бы я не нашел этот пост, я бы потратил еще 3 часа. В моем журнале было 10000 строк, поэтому эта команда мне тоже очень помоглаjournalctl --vacuum-time=1d
Юджин ван дер Мерве
2

Fwiw более новые версии журнала postfix, /var/log/mail.logи мне также пришлось запустить sudo chmod a+w /var/log/mail*и service postfix restartвернуть свои журналы postfix после удаления

bsautner
источник