Відповіді:
Коли ви видаляєте файл mail.log, rsyslog (в ubuntu) вільно обробляє файл. Щоб повернути його на Ubuntu, будь ласка, дайте:
sudo service rsyslog restart
Це не тільки створить новий файл, але і почне писати журнали.
Це помилка в syslog, але ілюструє поширену проблему, коли ви видаляєте файл, поки він відкритий програмою. Коли ви робите "rm", ви видаляєте запис каталогу, але ви НЕ видаляєте базовий файл. Операційна система зберігає кількість посилань на файл і фактично не видаляє базові дані файлу, доки кількість посилань не перейде до нуля. У випадку середнього файлу, посилання на кількість невідкритих файлів - один (запис у каталозі). Коли файл відкривається, кількість збільшується до двох. Якщо друга програма відкриє той самий файл, кількість буде збільшуватися до трьох. Якщо запис каталогів тепер видалено, кількість зменшується до двох - це означає, що файл анонімний (не має імені),
Коли ви видаляєте / var / log / mail, системний реєстратор все ще відкриває файл для запису. Якщо ви створюєте новий / var / log / mail, він вказуватиме на файл, відмінний від того, який записує системний реєстратор. Єдиний спосіб зробити все послідовним - це перезапустити системний реєстратор. Коли оригінальний системний реєстратор закінчується, всі пов'язані з ним файли закриваються, включаючи анонімний журнал пошти, запис якого ви видалили. Коли ви перезапустите системний реєстратор, він знову відкриє / var / log / mail, коли йому потрібно буде написати повідомлення журналу, і надалі буде відкритим.
Інший спосіб цього часто виявляється, коли запущена програма заповнює весь диск файловими даними; користувач видаляє дуже великий файл, але дисковий простір не звільняється, тому що файл все ще існує і займає місце на диску, але запис каталогу було видалено. Коли програма закінчиться (або тому, що користувач її вбив, або вона сама закінчилася), дисковий простір буде відновлений, оскільки кількість посилань на файл піде до нуля.
Що реєстратор може зробити для запобігання цього, це спочатку написати повідомлення журналу, перевірте, чи існує запис каталогу файлів журналу, а якщо його не існує, закрийте оригінальний файл журналу, відкрийте новий, а потім перепишіть повідомлення - щоб повідомлення не загубилося. Але для того, щоб зробити все це, знадобиться набагато більше складності, ніж повинен мати системний реєстратор - для кожного повідомлення, яке він пише, буде потрібно трохи більше часу, щоб записати через додаткову перевірку каталогів - що буде успішно кожного разу, коли файл має НЕ видалено.
Щоб зрозуміти все вищесказане більш чітко, наступна команда є повчальною, оскільки вона описує системний виклик, який виконує видалення запису каталогу та декремент посилання: "man 3 unlink"
Це не проблема в CentOS 7. Хтось подумав, що було б чудовою ідеєю мати журнали пошти Postfix, щоб пройти через подорож. Якщо ви хочете побачити журнали Postfix:
journalctl -u postfix
(щоб побачити весь журнал)
journalctl -u postfix -f
(для хвоста колоди)
Також вам може знадобитися в main.cf для постфіксу
syslog_name = postfix
journalctl --vacuum-time=1d