FATAL: file di blocco "postmaster.pid" è vuoto

È la prima volta che vedo il seguente errore durante il tentativo di ricostruzione.

2022-10-04 14:39:49.780 UTC [1700] FATAL:  lock file "postmaster.pid" is empty
2022-10-04 14:39:49.780 UTC [1700] HINT:  Either another server is starting, or the lock file is the remnant of a previous server startup crash.

Posso ovviamente leggere l’indizio, ma non sono sicuro di come procedere. Qualcuno può offrire qualche spunto?

Quando sta succedendo? È un’installazione standard?

Installazione standard ed esecuzione di ./launcher rebuild app

Forse prova un

 ./launcher start app

Ha funzionato prima?

È un errore o un avviso. Hai provato ad aprirlo nel tuo browser?

Cosa dice

 docker ps

Risposta a ./launcher start app:

57c2a0746e93
Niente da fare, il tuo container è già avviato!

E poi nel browser ricevo 502 Bad Gateway.

docker ps output

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS          PORTS                                                                                                                 NAMES
57c2a0746e93   local_discourse/app   “/sbin/boot”   6 mesi fa      Su 16 minuti   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

È strano. Penso che potrei riavviare e ricostruire di nuovo.

O forse

   ./launcher stop app; ./launcher rebuild app

Stai eseguendo un container vecchio, non uno che hai appena creato (creato 6 mesi fa).

E forse ci sono stati altri errori nella ricostruzione che non hai notato.

Stesso risultato

2022-10-04 15:26:43.452 UTC [1699] FATAL:  lock file \"postmaster.pid\" is empty
2022-10-04 15:26:43.452 UTC [1699] HINT:  Either another server is starting, or the lock file is the remnant of a previous server startup crash.

Non ci sono abbastanza dati qui per eseguire il debug.

Questo sta accadendo perché il processo di build pensa che PG sia già in esecuzione, quindi forse qualcosa riguardo al processo di aggiornamento di PG è fuori strada. Puoi includere i log completi del launcher (rimuovendo le password) in modo che possiamo vedere cosa sta succedendo.

Forse potrebbe aiutare esaminare un sistema che funziona correttamente. Vedo il mio lockfile qui:

# 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

e il 15 novembre è la data in cui ho avviato l’app l’ultima volta. Se entro nell’app posso vedere i processi 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

Se avessi fermato l’app, mi aspetterei di non vedere alcun lockfile in quella posizione e nessun processo postgres in esecuzione. (Ovviamente, dovrei eseguire il comando ps direttamente sull’host, perché il container non sarebbe più in esecuzione.)

Nella tua situazione, penso che farei prima questo: fermare l’app e verificare che nessun processo postgres sia in esecuzione. Sembra possibile che tu abbia due istanze in esecuzione che si stanno scontrando a vicenda.

È improbabile, ma è anche possibile che il disco si sia riempito ed è per questo che il lockfile è vuoto. O forse c’è un problema di permessi in qualche modo.

Modifica: all’interno del container, il lockfile ha una posizione e una proprietà diverse:

# ./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
# 

Come osserva Sam, avremmo bisogno di vedere maggiori informazioni.

1 Mi Piace