sync

<acct-file>

Сбрасывать ли записи учёта на диск регулярно
в конфигурации это строкаsync falseвнутри блока <acct-file>
Что останется в файле после внезапной перезагрузки

Записи учёта сначала попадают в буферы операционной системы и лишь потом на диск. Строка заставляет сбрасывать их регулярно. Умолчание — false.

Разница видна только при аварии. При обычной остановке MTA буферы сбрасываются сами. Строка спасает от внезапного — отключения питания, паники ядра, жёсткой перезагрузки: без неё последние записи пропадут, а хвост файла может оказаться битым.

Цена — обращения к диску. На потоке учёт пишется постоянно, и регулярный сброс превращает последовательную запись в череду вынужденных обращений. На узле с быстрым накопителем это малозаметно, на медленном — заметно.

Главная ловушка — включать «для надёжности», не зная зачем. Учёт — не письма: потеря последних записей означает пробел в статистике, а не потерю почты. Соразмерять надо с этим, а не с ценой потери письма.
Что делает Хаб. Не пишет — сброс остаётся выключенным.

🔎 Довод в пользу такого выбора у нас есть, и он не про диск: основной поток учёта идёт вебхуком, то есть пачками раз в минуту. Максимум, что теряется при аварии, — незавершённая минута; всё остальное уже ушло к нам и лежит в базе. Файловый блок при этом страховочный, и требований к его хвосту нет.

В основном файле шаблон пишет ещё sync-msg-create false и sync-msg-update false — строки из конфигурации Protosender, к учёту отношения не имеют. В руководстве PowerMTA 6 их нет ни в главе 3, ни в указателе; узлы строки принимают. Смысл дают комментарии образца конфигурации прежних версий PowerMTA: сброс писем очереди на диск после приёма и после отметки обработанных получателей. false быстрее, но при аварии системы письмо, ещё не записанное на диск, может пропасть, а часть получателей — получить его повторно.

Рекомендуемые значения

Решение зависит от того, чем узел рискует:

Значение Когда
false (умолчание) учёт уходит вебхуком или пробел в статистике терпим
true файл учёта — единственный источник, узел на ненадёжном питании
Умолчание false и назначение (защита от порчи данных при сбое системы) — из руководства (§ 3.3.11.15). Разбор цены и довод про вебхук — наши.
Пример в конфигурации
# файл учёта — единственный источник, и терять хвост нельзя
<acct-file /var/log/pmta/acct.csv>
    records d, b
    sync true</acct-file>
Там, где учёт уходит вебхуком, смысла в строке меньше: пачки уже отправлены, и потеряется в худшем случае незавершённая минута.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается1 ошибка▶

Включают сброс на потоковом узле с медленным диском

наш опыт

Чем чреватоПоследовательная запись учёта превращается в череду вынужденных обращений к диску. На объёме это заметно, а выигрыш — сохранность последних записей статистики.
Как заметитьПосле правки выросло время ожидания диска.
Как правильноСоразмерять с ценой потери: учёт — не письма. Там, где учёт уходит вебхуком, строка почти не нужна.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
sync <boolean>
Значения
yes | no | true | false
Умолчание
false § 3.3.11.15
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<acct-file>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка живёт внутри своего <acct-file> и касается только его файла. Разные потоки учёта могут решать это по-разному — страховочный файл со сбросом, вебхучный без.
Как проверить на узле
Действующее значение видно только в самом блоке учёта:
grep -n -A10 '<acct-file' /etc/pmta/config | grep -i 'sync\|acct-file'
Нет строки sync в блоке — действует false. Сам эффект проверяется только аварией, и на работающем узле этого делать не стоит.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Собрать телеметрию