Всем привет. Расследую небольшой инцидент, выразившийся в незапуске postgresql после ребута сервера, вижу в логе:
Mar 26 06:49:07 mail postgres[1396]: [1-1] 2019-03-26 06:49:07.477 +04 [1396] СООБЩЕНИЕ: завершение вывода в stderr
Mar 26 06:49:07 mail postgres[1396]: [1-2] 2019-03-26 06:49:07.477 +04 [1396] ПОДСКАЗКА: В дальнейшем протокол будет выводиться в "syslog".
Mar 26 06:49:07 mail postgres[1616]: [2-1] 2019-03-26 06:49:07.538 +04 [1616] СООБЩЕНИЕ: работа системы БД была прервана; последний момент работы: 2019-03-26 06:43:50 +04
Mar 26 06:49:07 mail postgres[1617]: [2-1] 2019-03-26 06:49:07.539 +04 [1617] [н/д]@[н/д] СООБЩЕНИЕ: неполный стартовый пакет
Mar 26 06:49:12 mail postgres[1396]: [2-1] 2019-03-26 06:49:12.849 +04 [1396] СООБЩЕНИЕ: получен запрос на "вежливое" выключение
Mar 26 06:49:22 mail postgres[1616]: [3-1] 2019-03-26 06:49:22.068 +04 [1616] СООБЩЕНИЕ: система БД была остановлена нештатно; производится автоматическое восстановление
Mar 26 06:49:22 mail postgres[1616]: [4-1] 2019-03-26 06:49:22.254 +04 [1616] СООБЩЕНИЕ: неверная длина записи по смещению 1/9BFE0AC0: ожидалось 24, получено 0
Mar 26 06:49:22 mail postgres[1616]: [5-1] 2019-03-26 06:49:22.254 +04 [1616] СООБЩЕНИЕ: данные REDO не требуются
Mar 26 06:49:22 mail postgres[1616]: [6-1] 2019-03-26 06:49:22.858 +04 [1616] СООБЩЕНИЕ: Защита от зацикливания мультитранзакций сейчас включена
Mar 26 06:49:22 mail postgres[2071]: [3-1] 2019-03-26 06:49:22.866 +04 [2071] СООБЩЕНИЕ: выключение
Mar 26 06:49:23 mail postgres[1396]: [3-1] 2019-03-26 06:49:23.591 +04 [1396] СООБЩЕНИЕ: система БД выключена
Как вижу, процесс запуска был почему то остановлен. Судя по всему, процесс был остановлен «вежливо» с помощью systemd. Открываю postgresql.service и вижу:
[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
Не вижу установленного параметра Timeout, который предлагается использовать на сайте postgrespro:
Особого внимания заслуживает значение тайм-аута.
На момент написания этой документации по умолчанию в systemd принят тайм-аут 90 секунд, так что процесс, не сообщивший о своей готовности за это время, будет уничтожен.
Но серверу PostgreSQL при запуске может потребоваться выполнить восстановление после сбоя, так что переход в состояние готовности может занять гораздо больше времени.
Предлагаемое значение 0 отключает логику тайм-аута.
Однако этот параметр не требуется, если тип сервиса установлен в oneshot :
Disabled by default, when service with Type=oneshot is used.
По какой же причине systemd перезапустила сервис?