retry-interval

<acct-file>

Как часто перезапускать программу-приёмник учёта после сбоя
в конфигурации это строкаretry-interval 5mвнутри блока <acct-file>
Только для учёта, отдаваемого программе

Записи учёта можно отдавать не в файл, а программе — тогда в теге блока вместо пути пишется вертикальная черта и команда. Эта строка задаёт, как часто пытаться запустить программу заново, если запуск сорвался. Умолчание — 5m.

К файлам и вебхукам строка отношения не имеет. Руководство оговаривает это прямо.

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

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

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

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

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

Интервал соразмеряют с тем, сколько данных не жалко:

Значение Когда
5m (умолчание) программа падает редко
1m падает часто, и каждая минута данных дорога

И в любом случае — файловый блок рядом, иначе промежуток теряется целиком.

Умолчание 5m и то, что строка только для формы с каналом, — из руководства (§ 3.3.11.6). Опасность потери в промежутке и совет держать файл рядом — из § 12.1.1.
Пример в конфигурации
# форма с каналом: учёт отдаётся программе
<acct-file |/usr/local/bin/collector.pl>
    retry-interval 1m    write-timeout 30s
</acct-file>

# и файл рядом — данные за промежуток между сбоем и перезапуском
<acct-file /var/log/pmta/acct.csv>
    records d, b
</acct-file>
Второй блок — прямой совет вендора. Без него сбой программы означает дыру в статистике, которую нечем закрыть.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Отдают учёт программе без файла рядом

§ 12.1.1

Чем чреватоПри неудачной записи узел бросает попытки до перезапуска или таймаута. Записи за этот промежуток не сохраняются нигде.
Как заметитьПосле перезапуска программы-сборщика в статистике дыра.
Как правильноЗавести второй блок учёта с обычным файлом — прямой совет вендора.

Задают строку для файлового или вебхучного потока

§ 3.3.11.6

Чем чреватоОна применяется только к форме с каналом. В остальных блоках ничего не делает и вводит в заблуждение читающего конфигурацию.
Как заметитьСтрока стоит в блоке с обычным путём или с адресом вебхука.
Как правильноУбрать: для вебхука повторы устроены сами, а для файла их нет.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
retry-interval <time-interval>
Значения
интервал времени
Умолчание
5m § 3.3.11.6
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<acct-file>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка живёт внутри своего <acct-file> и применяется только тогда, когда этот блок отдаёт записи программе.
Как проверить на узле
Сбои и перезапуски программы MTA пишет в свой журнал:
grep -i "acct\|pipe" /var/log/pmta/log | tail -20
Повторяющиеся сообщения о перезапуске означают, что программа падает и данные в промежутках теряются. Лечить надо программу, а не интервал.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Собрать телеметрию