C’est la première fois que je vois l’erreur suivante en essayant de reconstruire.
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.
Je peux évidemment lire l’indice, mais je ne sais pas comment procéder. Quelqu’un peut-il m’éclairer ?
ID DU CONTENEUR IMAGE COMMANDE CRÉÉ STATUT PORTS NOMS
57c2a0746e93 local_discourse/app « /sbin/boot » Il y a 6 mois En cours d'exécution depuis 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
2022-10-04 15:26:43.452 UTC [1699] FATAL: le fichier de verrouillage « postmaster.pid » est vide
2022-10-04 15:26:43.452 UTC [1699] HINT: Soit un autre serveur est en cours de démarrage, soit le fichier de verrouillage est le vestige d'un crash de démarrage précédent du serveur.
Cela se produit car le processus de build pense que PG est déjà en cours d’exécution, donc peut-être que quelque chose concernant le processus de mise à niveau de PG est erroné. Pouvez-vous inclure les journaux complets du lanceur (en supprimant les mots de passe) afin que nous puissions voir ce qui se passe.
Peut-être qu’il serait utile de regarder un système qui fonctionne correctement. Je vois mon fichier de verrouillage ici :
# 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
et le 15 novembre est la date à laquelle j’ai démarré l’application pour la dernière fois. Si j’entre dans l’application, je peux voir les processus postgres :
Si j’arrêtais l’application, je m’attendrais à ne pas voir de fichier de verrouillage à cet emplacement, et aucun processus postgres en cours d’exécution. (Je devrais, bien sûr, exécuter la commande ps directement sur l’hôte, car le conteneur ne serait plus en cours d’exécution.)
Dans votre situation, je pense que c’est ce que je ferais en premier : arrêter l’application et vérifier qu’aucun processus postgres n’est en cours d’exécution. Il semble possible que vous ayez deux instances en cours d’exécution qui entrent en collision.
C’est peu probable, mais il est aussi possible que le disque soit plein et que ce soit la raison pour laquelle le fichier de verrouillage est vide. Ou peut-être y a-t-il un problème de permissions d’une manière ou d’une autre.
Modifier : à l’intérieur du conteneur, le fichier de verrouillage a un emplacement et une propriété différents :
# ./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
#
Comme le note Sam, nous aurions besoin de voir plus d’informations.