Problema durante ./launcher rebuild, Redis non si avvia la seconda volta

Ciao a tutti.

Ho avuto un problema durante la ricostruzione (aggiornamento) di Discourse; nel log ho scoperto che durante l’installazione, Redis viene avviato per la prima volta senza problemi, ma dopo un po’ l’installazione tenta di riavviarlo e va in crash a causa di “server TCP listening socket *:6379: bind: Address already in use”.

Dopo diversi tentativi (anche con l’aiuto di Gemini), ho inserito questo pezzo di codice all’interno di app.yml

hooks: before_db_migrate: - exec: cmd: - "pkill -9 redis-server || true" - "sleep 2" - "exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf &" - "sleep 5"

e alla fine la ricostruzione procede.

Ecco un pezzo di log con la mia correzione che termina l’istanza Redis riluttante e la riavvia:


389:C 24 Feb 2026 17:07:21.756 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

389:C 24 Feb 2026 17:07:21.756 * Redis version=7.4.7, bits=64, commit=00000000, modified=1, pid=389, just started

389:C 24 Feb 2026 17:07:21.756 * Configuration loaded

389:M 24 Feb 2026 17:07:21.756 * monotonic clock: POSIX clock_gettime

389:M 24 Feb 2026 17:07:21.757 * Running mode=standalone, port=6379.

389:M 24 Feb 2026 17:07:21.757 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use

389:M 24 Feb 2026 17:07:21.757 # Failed listening on port 6379 (tcp), aborting.

I, [2026-02-24T17:07:31.750972 #1]  INFO -- : > pkill -9 redis-server || true

I, [2026-02-24T17:07:31.758767 #1]  INFO -- : > sleep 2

I, [2026-02-24T17:07:33.761955 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf &

I, [2026-02-24T17:07:33.765205 #1]  INFO -- : > sleep 5

396:C 24 Feb 2026 17:07:33.773 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

396:C 24 Feb 2026 17:07:33.773 * Redis version=7.4.7, bits=64, commit=00000000, modified=1, pid=396, just started

396:C 24 Feb 2026 17:07:33.773 * Configuration loaded

396:M 24 Feb 2026 17:07:33.773 * monotonic clock: POSIX clock_gettime

396:M 24 Feb 2026 17:07:33.774 * Running mode=standalone, port=6379.

396:M 24 Feb 2026 17:07:33.775 * Server initialized

396:M 24 Feb 2026 17:07:33.776 * Loading RDB produced by version 7.4.7

396:M 24 Feb 2026 17:07:33.776 * RDB age 19606 seconds

396:M 24 Feb 2026 17:07:33.776 * RDB memory usage when created 4.60 Mb

396:M 24 Feb 2026 17:07:33.787 * Done loading RDB, keys loaded: 3413, keys expired: 1.

396:M 24 Feb 2026 17:07:33.788 * DB loaded from disk: 0.013 seconds

396:M 24 Feb 2026 17:07:33.788 * Ready to accept connections tcp

La mia domanda ora è: PERCHÉ due avvii di Redis? E perché il secondo trova il primo ancora bloccato sulla porta 6379? E ancora, perché non tenta di usarlo, se è già disponibile?
E, ultimo ma non meno importante, cosa potrebbe aver causato questo problema? So bene di aver messo un cerotto su una ferita senza sapere PERCHÉ ci sia la ferita, ma almeno ora funziona.

Prima che qualcuno me lo chieda, NO, non ho nessun altro Redis in esecuzione al di fuori di Discourse (altrimenti, il primo tentativo all’inizio della ricostruzione sarebbe fallito), e SÌ, Discourse è in esecuzione con molti altri container su Docker, anche se non ha mai avuto un problema del genere fino a pochi aggiornamenti fa.

Qualsiasi aiuto e suggerimento è apprezzato, e scusate se è già stato risolto in un altro topic, ma ho cercato senza successo.