حل مشكلة تعليق وضع الصيانة في Nextcloud مع OCC
قم بمسح صفحة صيانة Nextcloud العالقة بأمان باستخدام OCC، وتحقق مما إذا كانت الترقية غير مكتملة، وتأكد من أن المثيل جاهز للمستخدمين.
إذا أبلغت منصة ownCloud عن انتهاء مهلة قفل الملف أثناء المزامنة أو التحميل أو النقل أو إعادة التسمية أو تجميع الأجزاء، فاعلم أن الخطأ عادةً ما يتعلق بقفل الملفات للمعاملات ، وليس بميزة قفل الملفات اليدوي المتاحة للمستخدم. قفل المعاملات هو آلية أمان داخلية تمنع طلبين من حفظ أو تعديل الملف نفسه في الوقت ذاته. وهو مُفعّل افتراضيًا في ownCloud، ويمكنه استخدام قاعدة البيانات أو Redis كخادم خلفي للقفل.
لا تزال وثائق ownCloud 11 الحالية توصي باستخدام Redis لتأمين الملفات في المعاملات، لأن التأمينات المدعومة بقواعد البيانات تُسبب عبئًا كبيرًا على قاعدة البيانات. في عمليات التثبيت المُجمّعة، يجب أن تستخدم كل عقدة تطبيق نفس مثيل Redis المشترك للتأمين. هذا هو الحل الأمثل الذي يجب فهمه قبل تغيير قيم المهلة الزمنية أو حذف سجلات التأمين.
يشرح هذا الدليل المشكلة من منظور مسؤول مبتدئ: ما معنى القفل، وما يجب نسخه احتياطيًا، وكيفية تأكيد المكون المعطل، وكيفية تكوين Redis، وكيف تغير المجموعات الصورة، وما هي الاختصارات التي يمكن أن تجعل الوضع أسوأ.
عندما يُجري ownCloud تغييرًا على ملف، فإنه يحصل على قفل يمنع أي طلب آخر من إجراء تغيير غير متوافق في الوقت نفسه. يمكن أن يشمل القفل أيضًا مجلدًا رئيسيًا، مما يمنع إعادة تسميته أثناء إجراء العمل داخله. إذا تعذر الحصول على القفل في الوقت المناسب، فقد تفشل العملية بظهور خطأ متعلق بمورد مقفل أو خطأ انتهاء المهلة، بدلًا من المخاطرة بتلف الملف.
وفقًا لوثائق قفل الملفات المعاملاتية في ownCloud 11 ، فإن هذه الآلية تتعامل أيضًا مع عمليات التحميل المتقطعة والملفات المشتركة والتخزين الخارجي والملفات المشفرة.
يختلف هذا عن ميزة قفل الملفات اليدوي ، وهي ميزة اختيارية لتسجيل الدخول/الخروج تعتمد على بروتوكول WebDAV، وتتيح للمستخدم قفل ملف عمدًا عبر واجهة الويب. تتميز الأقفال اليدوية بقيم انتهاء صلاحية قابلة للتكوين من قِبل المستخدم. ولا يُصلح تغيير هذه القيم مشكلة في نظام قفل المعاملات الخلفي المُثقل أو المُكوّن بشكل غير صحيح.
config/config.php...يشير انقطاع الخدمة على نطاق واسع والذي يؤثر على العديد من المستخدمين عادةً إلى وجود خلل في أحد المكونات المشتركة، مثل نظام قفل الملفات، أو قاعدة البيانات، أو Redis، أو وحدة التخزين. أما الخطأ المتكرر في ملف واحد فقد يكون ناتجًا عن عملية جارية بالفعل أو قفل قديم لم تنتهِ صلاحيته بعد.
ابدأ بفحص سجلات ownCloud، وسجلات خادم الويب، وسجلات PHP-FPM، وحالة خدمة Redis. ابحث عن حالات متكررة لاستثناءات الموارد المقفلة، أو أخطاء انتظار قفل قاعدة البيانات، أو فشل الاتصال بـ Redis، أو نمط يبقى فيه المسار نفسه محظورًا لفترة طويلة بعد انتهاء العملية الأصلية.
تتضمن الفحوصات المفيدة على مضيف لينكس ما يلي:
systemctl status redis-server
redis-cli PING
ps -ef | grep php
tail -n 200 /path/to/owncloud/data/owncloud.log
يجب أن يُعيد أمر Redis السليم قيمة صحيحة PONG. إذا تم تكوين ownCloud للوصول إلى Redis عبر مقبس أو اسم مضيف حاوية أو كلمة مرور أو مضيف بعيد، فاختبر مسار الاتصال نفسه الذي يستخدمه ownCloud فعليًا بدلاً من افتراض أن redis-cliالاختبار المحلي يثبت اتصال التطبيق.
إذا احتوى سجل النظام على رسالة قاعدة بيانات مشابهة لـ "انتهت مهلة انتظار القفل"، فابحث أيضًا عن مشكلة التنازع على قاعدة البيانات. نظام قفل قاعدة البيانات القديم يعمل، لكن وثائق ownCloud تحذر صراحةً من أنه يُحمّل قاعدة البيانات بعبء كبير.
لتثبيت ownCloud بالطريقة التقليدية، قم بتهيئة Redis كخادم memcache.lockingخلفي في ملف التكوين config/config.php. توفر وثائق التخزين المؤقت للذاكرة الحالية لـ ownCloud مثالاً على استخدام Redis TCP مشابهاً لما يلي:
'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
'timeout' => 0,
'password' => '',
],
لا تقم بنسخ كلمة المرور الفارغة حرفيًا إلى إعداد Redis مُعرَّض للإنترنت. توصي وثائق التخزين المؤقت للذاكرة في ownCloud بحماية Redis بشكل مناسب. من الأفضل أن يكون الوصول إلى Redis متاحًا فقط من مضيفي ownCloud الموثوق بهم أو شبكة الحاويات الداخلية.
في إعدادات دوكر الرسمية لـ ownCloud، يتم تفعيل Redis باستخدام متغيرات البيئة. توضح وثائق ownCloud 11 الحالية ما يلي:
OWNCLOUD_REDIS_ENABLED=true
OWNCLOUD_REDIS_HOST=redis
OWNCLOUD_REDIS_PORT=6379
عند تفعيل Redis في نموذج النشر هذا، يقوم ownCloud تلقائيًا بتعيين كلٍ من ذاكرة التخزين المؤقت الموزعة وذاكرة التخزين المؤقت للقفل إلى Redis. استخدم التكوين الخاص بالنشر والموثق لتثبيتك بدلاً من دمج متغيرات بيئة Docker مع ملف يتم صيانته يدويًا، config.phpإلا إذا كنت تفهم أي طبقة لها الأولوية.
المجموعة هي عملية نشر تتضمن عدة خوادم تطبيقات ownCloud خلف موازن تحميل. في هذا التصميم، يجب أن يكون القفل المُنشأ على إحدى عقد التطبيق مرئيًا لجميع العقد الأخرى. لا يمكن لذاكرة التخزين المؤقت APCu الخاصة بكل عقدة أو مثيلات Redis المنفصلة لكل عقدة توفير حالة القفل المشتركة هذه .
دليل التخزين المشترك المجمع في ownCloud واضحٌ تمامًا: استخدم نسخة Redis مشتركة واحدة يمكن الوصول إليها من جميع عُقد التطبيق. ويحذر من الاعتماد على أقفال نظام الملفات أو NFS لتأمين تطبيقات ownCloud.
تحقق من كل عقدة للتأكد من استخدام نفس نقطة نهاية Redis وبيانات الاعتماد. من أنماط الفشل الشائعة أن إحدى العقد لا تزال تستخدم قاعدة البيانات أو Redis محليًا بينما تستخدم العقد الأخرى الخدمة المشتركة. يؤدي ذلك إلى سلوك قفل غير متسق قد يبدو متقطعًا لأن النتيجة تعتمد على عقدة التطبيق التي تعالج كل طلب.
بعد تهيئة Redis، تحقق من إعدادات ownCloud النشطة باستخدام الأمر occ. اعتمادًا على تثبيتك، قد يتم استدعاء الأمر كمستخدم خادم الويب أو من خلال Docker Compose.
sudo -u www-data php occ config:system:get memcache.locking
sudo -u www-data php occ config:system:get filelocking.enabled
يجب أن يُظهر الأمر الأول رسالة خطأ \OC\Memcache\Redis، ويجب أن يبقى قفل الملفات للمعاملات مُفعّلاً. لا تُحاول "حل" المشكلة بتعطيل قفل الملفات، فهذا يُزيل ضمانة سلامة البيانات بدلاً من إصلاح النظام.
أعد الآن محاولة العملية الفاشلة نفسها. إذا انتهت مهلة تحميل عميل سطح المكتب، فأعد تحميله. إذا فشلت عملية نقل مجلد، فأعد نقله. راقب سجلات ownCloud وRedis أثناء الاختبار. تُعد إعادة المحاولة الناجحة دون حدوث مهلة قفل متكررة دليلاً أقوى بكثير من تشغيل أمر صيانة غير ذي صلة.
حدد أولاً ما إذا كانت عملية أخرى لا تزال تستخدم الملف فعلاً. قد تؤدي عمليات التحميل الكبيرة، أو استدعاءات التخزين الخارجي، أو نقل الملفات، أو التشفير، أو التخزين البطيء إلى احتفاظ الملفات بالقفل لفترة أطول من المتوقع. إنهاء القفل أثناء استمرار العملية قد يُسبب حالة التزامن التي صُمم القفل لمنعها.
صُممت أقفال المعاملات ليتم تحريرها بعد انقطاع المعاملات. كما توثق مراجع تكوين ownCloud القديمة آلية مدة صلاحية القفل، بحيث يمكن تنظيف الأقفال القديمة تلقائيًا. نظرًا لاختلاف تفاصيل التكوين الدقيقة باختلاف إصدارات ownCloud، يُرجى التحقق من الخيار في الوثائق المتوافق مع إصدارك المُثبّت قبل تغييره. لا تجعل مدة الصلاحية قصيرة جدًا لمجرد إخفاء مشكلة في التخزين أو قاعدة البيانات.
إذا كانت البيانات الوصفية نفسها غير متناسقة، يوفر ownCloud أوامر فحص ملفات مُخصصة للإصلاح. توصي وثائق أوامر occ الرسمية بعمل نسخة احتياطية من قاعدة البيانات قبل إجراء فحص الإصلاح. يُستخدم فحص الإصلاح لمعالجة البيانات الوصفية التالفة أو غير المتناسقة للملفات؛ وهو ليس الحل الأولي لمشاكل التنازع على الأقفال العادية.
| ميزة | غاية | التحكم النموذجي |
|---|---|---|
| قفل الملفات المعاملاتية | يحمي عمليات الملفات المتزامنة ويحفظها | memcache.locking، عادةً ما يكون Redis |
| قفل الملفات يدويًا | يقوم المستخدم عمداً بسحب/قفل ملف مشترك | إعدادات مهلة قفل WebDAV وكسر القفل |
تشير وثائق ownCloud 11 الحالية إلى أن خاصية قفل الملفات يدويًا معطلة افتراضيًا في واجهة الويب. عند تفعيلها، تكون مدة القفل الافتراضية في واجهة الويب 30 دقيقة، والحد الأقصى الافتراضي 24 ساعة. هذه القيم موثقة في دليل قفل الملفات يدويًا .
إذا كانت مشكلتك تتعلق تحديدًا بقفل يدوي أنشأه المستخدم، فإن أوامر مثل هذه ستكون ذات صلة:
docker compose exec owncloud occ config:app:set files lock_timeout_default --value 1800
docker compose exec owncloud occ config:app:set files lock_timeout_max --value 86400
إذا كانت مشكلتك هي مهلة داخلية أثناء مزامنة أو حفظ ملف، فإن تغيير قيم القفل اليدوي هذه عادة ما يكون الحل الخاطئ.
قد يتعارض هذا مع الطلبات الجارية، وقد يؤدي إلى إزالة الأقفال الصحيحة. كما أنه يعالج العرض فقط دون إصلاح إعدادات قاعدة البيانات أو Redis التي تسببت في انتهاء المهلة.
يُستخدم نظام قفل المعاملات لحماية عمليات الملفات من التعديل المتزامن. أبقِه مُفعّلاً وقم بإصلاح النظام الخلفي.
APCu عبارة عن ذاكرة تخزين مؤقت محلية لكل عقدة. وهي مناسبة للتخزين المؤقت المحلي، ولكنها لا توفر حالة قفل مشتركة عبر خوادم التطبيقات المتعددة. استخدم Redis المشترك للتخزين المؤقت الموزع والمؤمَّن في عمليات النشر العنقودية.
هذا يعني أن كل خادم سيتمتع برؤية مختلفة لأقفال الملفات. تحتاج جميع العُقد إلى خدمة Redis مشتركة لتنسيق الأقفال.
قد يؤدي تمديد مهلة قاعدة البيانات إلى زيادة وقت انتظار المستخدمين. نقل حركة بيانات تأمين المعاملات إلى Redis يقلل من عبء تأمين قاعدة البيانات ويعالج مشكلة الاختناق المعماري.
قد تحتاج عملية تخزين خارجية بطيئة أو عملية تحميل كبيرة إلى وقتٍ كافٍ. انتهاء صلاحية قفلها قبل الأوان قد يسمح لطلب آخر بتعديل نفس المورد في الوقت نفسه.
memcache.lockingعلى \OC\Memcache\Redis.filelocking.enabledالجهاز مُفعّلاً.إنّ الحل الأمثل لمشاكل انتهاء مهلة قفل الملفات في ownCloud ليس إزالة الأقفال أو رفع قيم المهلة بشكل عشوائي. ابدأ بتحديد ما إذا كان الخطأ ناتجًا عن قفل المعاملات، ثم انقل عبء عمل القفل هذا إلى Redis وتأكد من أن جميع عقد ownCloud ترى نفس مثيل Redis. أعد اختبار العملية التي فشلت تحديدًا، وتحقق من زمن استجابة قاعدة البيانات أو التخزين إذا استمرت الأقفال نشطة لفترة طويلة جدًا.
يتبع هذا النهج وثائق ownCloud الحالية: يبقى قفل الملفات المعاملاتي ممكّنًا، ويتعامل Redis مع حالة القفل المشترك، ويتم التعامل مع إعدادات مهلة قفل الملفات اليدوي كميزة منفصلة بدلاً من إصلاح مهلة القفل الشاملة.
قم بمسح صفحة صيانة Nextcloud العالقة بأمان باستخدام OCC، وتحقق مما إذا كانت الترقية غير مكتملة، وتأكد من أن المثيل جاهز للمستخدمين.
قم بتشخيص أخطاء تأجيل البريد الصادر في Zimbra على المنفذ 25. تحقق من قائمة الانتظار، وMX DNS، وجدران الحماية، وحظر الموفر، وقم بتكوين مرحل SMTP معتمد.
قم بإعداد خادم منزلي خفيف الوزن من نوع Matrix على Raspberry Pi 4 باستخدام Conduit و Docker و NGINX و HTTPS وعناصر التحكم في التسجيل والاتحاد والفحوصات.
أضف خوادم Jitsi Videobridge إلى نشر Jitsi Meet مشترك، وقم بتكوين التسجيل والوصول إلى جدار الحماية، وتحقق من اختيار الجسر، وتعرف على متى تكون هناك حاجة إلى Octo.
قم بتثبيت شهادة SSL تجارية على Zimbra بأمان: أنشئ طلب توقيع الشهادة (CSR)، وقم ببناء سلسلة CA، وتحقق من المفتاح والشهادة، وقم بنشرها، وأعد تشغيل الخدمات، وتأكد من HTTPS.
قم بتغيير شعار BigBlueButton الافتراضي، وأضف شعارًا إلى الاجتماعات الفردية، وافهم متى تتطلب العلامة التجارية الأوسع للواجهة إصدارًا مخصصًا للعميل.
تعرف على كيفية تحديد سجلات التدقيق القديمة لـ Zimbra وأرشفتها وضغطها وإزالتها، ومتى يجب تجنب اقتطاع ملف audit.log، وكيفية التحقق من استعادة مساحة القرص والتسجيل بشكل صحيح.
قم باستكشاف أخطاء اتصال خادم تخزين Kopano dagent وإصلاحها عن طريق التحقق من حالة الخادم، ومقبس الخادم، وأذونات مقبس Unix، والمستمعين عن بعد، واختبارات التسليم المتحكم بها.
قم بإصلاح أخطاء مهلة قفل الملفات في ownCloud عن طريق تحديد الأقفال المعاملاتية، ونقل تخزين القفل إلى Redis، والتحقق من المجموعات، وإعادة الاختبار بأمان.
قم باستكشاف أخطاء Matrix Synapse المتعلقة بـ OOM أثناء /sync عن طريق فحص ضغط الذاكرة، وضبط ذاكرة التخزين المؤقت بعناية، وعزل المزامنة الأولية، ومراقبة العمال.