FATAL: файл блокировки "postmaster.pid" пуст

Впервые столкнулся с такой ошибкой при попытке пересборки.

2022-10-04 14:39:49.780 UTC [1700] FATAL:  файл блокировки "postmaster.pid" пуст
2022-10-04 14:39:49.780 UTC [1700] HINT:  Либо запускается другой сервер, либо файл блокировки остался после сбоя предыдущего запуска сервера.

Я, конечно, могу прочитать подсказку, но не уверен, как действовать. Может ли кто-нибудь дать совет?

Когда это произойдёт? Это стандартная установка?

Стандартная установка и после выполнения ./launcher rebuild app

Попробуйте выполнить команду

 ./launcher start app

Раньше это работало?

Это ошибка или предупреждение? Пробовали ли вы открыть это в браузере?

Что показывает команда

 docker ps

Ответ на команду ./launcher start app:

57c2a0746e93
Нечего делать, ваш контейнер уже запущен!

А затем в браузере я получаю ошибку 502 Bad Gateway.

Вывод команды docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS          PORTS                                                                                                                 NAMES
57c2a0746e93   local_discourse/app   "/sbin/boot"   6 months ago   Up 16 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   app

Это странно. Мне кажется, стоит перезагрузить и снова пересобрать.

Или, возможно,

   ./launcher stop app; ./launcher rebuild app

Вы запускаете старый контейнер, а не тот, который только что пересобрали (он был создан 6 месяцев назад).

Возможно, при пересборке возникли и другие ошибки, которые вы не заметили.

То же самое

2022-10-04 15:26:43.452 UTC [1699] FATAL:  файл блокировки "postmaster.pid" пуст
2022-10-04 15:26:43.452 UTC [1699] HINT:  Либо другой сервер запускается, либо файл блокировки остался после предыдущего сбоя при запуске сервера.

Здесь недостаточно данных для отладки.

Это происходит потому, что процесс сборки считает, что PG уже запущен, возможно, что-то пошло не так в процессе обновления PG. Можете ли вы предоставить полные логи лаунчера (удалив пароли), чтобы мы могли понять, что происходит?

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

# ls -l /var/discourse/shared/standalone/postgres_data/postmaster.pid
-rw------- 1 systemd-resolve input 92 Nov 15 16:20 /var/discourse/shared/standalone/postgres_data/postmaster.pid

и дата 15 ноября — это дата последнего запуска приложения. Если я войду в приложение, я смогу увидеть процессы postgres:

# cd /var/discourse/
# ./launcher enter app
x86_64 arch detected.
# ps auxfc|egrep -1 postm
root        45  0.0  0.0   2332     0 ?        S    Nov15   0:00      \_ svlogd
postgres    48  0.0  0.1 213160  1784 ?        S    Nov15   0:27      \_ postmaster
postgres    67  0.0  2.6 213380 26924 ?        Ss   Nov15   0:34          \_ postmaster
postgres    68  0.0  0.4 213292  4236 ?        Ss   Nov15   0:15          \_ postmaster
postgres    69  0.0  0.1 213160  1068 ?        Ss   Nov15   3:44          \_ postmaster
postgres    70  0.0  0.1 213840  1520 ?        Ss   Nov15   0:16          \_ postmaster
postgres    71  0.0  0.0  68184   380 ?        Ss   Nov15   0:56          \_ postmaster
postgres    72  0.0  0.0 213716   468 ?        Ss   Nov15   0:00          \_ postmaster
postgres    92  0.0  0.0 225364   324 ?        Ss   Nov15   0:01          \_ postmaster
postgres   176  0.0  0.1 217944  1484 ?        Ss   Nov15   0:01          \_ postmaster
postgres  9126  0.0  0.7 215052  7336 ?        Ss   Nov16   0:19          \_ postmaster
postgres  1574  0.0  5.7 223540 58300 ?        Ss   17:28   0:00          \_ postmaster
postgres  1973  0.0  3.3 221032 33960 ?        Ss   17:34   0:00          \_ postmaster
postgres  2320  0.1  3.5 218080 36120 ?        Ss   17:39   0:00          \_ postmaster
postgres  2321  0.1  2.9 218068 29928 ?        Ss   17:39   0:00          \_ postmaster
postgres  2336  0.0  1.4 215052 14340 ?        Ss   17:40   0:00          \_ postmaster
# exit

Если бы я остановил приложение, я бы ожидал не видеть файл блокировки в этом месте и не видеть запущенных процессов postgres. (Конечно, мне пришлось бы запускать команду ps напрямую на хосте, так как контейнер больше не будет работать.)

В вашей ситуации, я думаю, я бы сначала сделал следующее: остановил приложение и проверил, что процессы postgres не запущены. Возможно, у вас запущены два экземпляра, которые конфликтуют друг с другом.

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

Редактирование: внутри контейнера файл блокировки имеет другое расположение и владельца:

# ./launcher enter app
x86_64 arch detected.
# ls -l /shared/postgres_data/postmaster.pid
-rw------- 1 postgres postgres 92 Nov 15 16:20 /shared/postgres_data/postmaster.pid
# exit
logout
# 

Как отмечает Сэм, нам нужно увидеть больше информации.