Так что я довольно новичок в Arch и у меня странная проблема. Используя systemctl я не могу запустить postgresql. Запуск postgresql напрямую с pg_ctl работает нормально и даже кратко запускается с systemctl .

Файл системного модуля, созданный при установке + инициализации postgresql в Arch linux, содержит команду ExecStart:

ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120

Взглянув на файл модуля, я заметил корреляцию со временем отказа и временем ожидания для команды запуска. Как только я изменил флаг -w (дождаться завершения операции) на флаг -W (не ждать завершения операции) вуаля! Все работает отлично, больше нет таймаутов или неудачных попыток обслуживания.

Это здорово, и я могу создать модифицированный файл без проблем. Мне просто интересно, является ли это побочным эффектом какой-то другой конфигурации при запуске или же сгенерированный файл модуля просто неверен?

1 ответ1

0

Флаг -w работает, периодически пытаясь подключиться к вашему серверу. Конечно, все, что мешает соединению с вашим сервером, заставит pg_ctl думать, что ваш сервер еще не запущен. Так что он зависает, повторяя попытки до истечения указанного вами времени ожидания. По истечении этого времени он возвращает ненулевой код завершения в systemd , и systemd автоматически вызывает настроенную команду ExecStop , фактически останавливая ваш сервер.

Если вы можете подключиться к вашему серверу, когда вы запускаете его вручную с помощью pg_ctl (т.е. не просто видите его в ps -ef), то возможно, что какая-то переменная окружения отличается (PGPORT , PGDATA).

Другая причина, которая может вызвать это, - попытаться выполнить восстановление или запустить сервер горячего резервирования. Пока сервер не будет полностью готов, он будет принимать соединения socker, но будет регистрировать ошибку и отклонять любые запросы. Если вы делаете паузу в конце восстановления или выполняете теплый режим ожидания, сервер никогда не будет полностью готов к работе.

Там может быть некоторая полезная информация в pg_log в вашем каталоге PGDATA . По крайней мере, это будет указывать, видит ли сервер, но отклоняет запросы от pg_ctl .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .