مشكلة أثناء ./launcher rebuild، Redis لا يبدأ في المرة الثانية

مرحباً بالجميع.

واجهت مشكلة في إعادة بناء (تحديث) Discourse؛ وفي السجل وجدت أنه أثناء الإعداد، يتم تشغيل Redis لأول مرة، دون مشكلة، ولكن بعد فترة يحاول الإعداد تشغيله مرة أخرى ويتعطل بسبب “خادم TCP يستمع إلى المقبس *:6379: ربط: العنوان مستخدم بالفعل”.

بعد عدة محاولات وخطأ، وبمساعدة Gemini أيضاً، وضعت هذا الجزء من الكود داخل 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"

وفي النهاية استمرت عملية إعادة البناء.

إليكم جزء من السجل مع الإصلاح الخاص بي بقتل مثيل Redis المتردد وإعادة تشغيله:


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

سؤالي الآن هو: لماذا تشغيلان لـ Redis؟ ولماذا يجد الثاني الأول لا يزال عالقاً على المنفذ 6379؟ ومرة أخرى، لماذا لا يحاول استخدامه إذا كان متاحاً بالفعل؟ وأخيراً وليس آخراً، ما الذي يمكن أن يكون قد سبب هذه المشكلة؟ أنا أعلم جيداً أنني وضعت مرهمًا على جرح دون معرفة سبب وجود الجرح، ولكن على الأقل هو يعمل الآن.

قبل أن يسألني أحد، لا، ليس لدي أي مثيل آخر لـ Redis يعمل خارج Discourse (وإلا، لكانت المحاولة الأولى في بداية إعادة البناء قد تعطلت)، ونعم، يعمل Discourse مع العديد من الحاويات الأخرى على Docker، على الرغم من أنه لم يواجه مثل هذه المشكلة حتى التحديثات القليلة الماضية.

أي مساعدة أو نصيحة محل تقدير، وأعتذر إذا كان هذا قد تم حله بالفعل في موضوع آخر، ولكني بحثت دون جدوى.