حل مشكلة عدم تشغيل مهام Cron في Nextcloud تلقائيًا باستخدام systemd

لتشغيل مهام Nextcloud في الخلفية تلقائيًا باستخدام systemd، قم بتهيئة خدمة لمرة واحدة تعمل cron.phpبصلاحيات مستخدم خادم الويب، ثم فعّل مؤقتًا لتشغيل هذه الخدمة كل خمس دقائق. أهم الفحوصات هي: تفعيل المؤقت وتحديد وقت التشغيل التالي، وإشارة الخدمة إلى مسارات Nextcloud وPHP الصحيحة، وإظهار سجل الخدمة خروجًا ناجحًا. قد تظهر الخدمة لمرة واحدة "غير نشطة (متوقفة)" بين عمليات التشغيل؛ وهذا أمر طبيعي بعد انتهاء الخدمة.

هذا الإعداد مخصص لتثبيت Nextcloud التقليدي على Ubuntu باستخدام systemd، مع توفر ملفات Nextcloud على الجهاز المضيف. إذا كان Nextcloud يعمل داخل Docker أو Snap أو جهاز مثل Nextcloud All-in-One، فاستخدم طريقة جدولة التوزيعة الموثقة بدلاً من توجيه وحدة مضيفة إلى مسار خاص بالحاويات فقط. تستخدم الأمثلة أدناه المسارين /var/www/nextcloudو www-data؛ استبدلهما بمسار التثبيت الفعلي ومستخدم HTTP على خادمك.

ما الذي يجب أن يحققه المؤقت

يُشغّل Nextcloud cron.phpمهامًا مُجدولة في الخلفية، مثل الصيانة ومهام التطبيق. يعمل مؤقت systemd كساعة، والخدمة هي الأمر الذي يُنفّذ عند انتهاء المؤقت. أنت بحاجة إلى كليهما. إنشاء الملفات دون تفعيل المؤقت يُبقي الجدول غير نشط، بينما تفعيل مؤقت يُشير إلى مسار PHP أو Nextcloud خاطئ قد يُؤدي إلى فشل متكرر في التشغيل.

توصي Nextcloud باستخدام cron النظامي لتشغيل المهام الخلفية في بيئة الإنتاج. كما يوثّق دليل الإدارة الحالي مؤقتات systemd كبديل. يبدأ الجدول الزمني المُقترح بعد خمس دقائق من بدء التشغيل، ثم يُجدول تشغيلًا آخر بعد خمس دقائق من كل تفعيل للخدمة. وهذا يُغني عن الاعتماد على زيارة المستخدم لواجهة الويب.

1. تأكد من مسار التثبيت والمستخدم وواجهة سطر أوامر PHP

قبل تعديل الوحدات، حدد موقع مجلد Nextcloud الفعلي وتحقق من أمر PHP الذي يتوقعه تثبيت خادم الويب. في تثبيت أرشيف نموذجي لنظام Ubuntu، قد يكون المسار هو `/usr/web/ /var/www/nextclouduser`، وغالبًا ما يكون اسم مستخدم الويب هو `/usr/web/user` www-data، ويكون أمر سطر أوامر PHP هو `/usr/ web/user` /usr/bin/php. تحقق من ذلك بدلًا من الافتراض.

ls -l /var/www/nextcloud/cron.php
command -v php
php -v

إذا كان مجلد Nextcloud الخاص بك موجودًا في مكان آخر، فاستبدل هذا المجلد في كلا أمري الوحدة أدناه. إذا كان خادم الويب يستخدم إصدار PHP مختلفًا، فاستخدم ملف CLI التنفيذي لهذا الإصدار في الأمرَين `.systemd` ExecStartو` ExecCondition.systemd` لا يرث مسار PATH أو بيئة التشغيل الخاصة بالصدفة التفاعلية، لذا فإن استخدام مسارات صريحة أكثر موثوقية.

اختبر حالة التحقق باستخدام نفس المستخدم الذي سيستخدمه نظام systemd:

sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e

يجب تشغيل أمر Nextcloud occبصلاحيات مستخدم HTTP للحفاظ على ملكية الملفات والأذونات الصحيحة. إذا أبلغ هذا الاختبار عن خطأ في PHP، أو وضع الصيانة، أو ملف مفقود، فقم بإصلاح ذلك أولاً؛ إذ لا يمكن للمؤقت التعويض عن فشل أمر Nextcloud.

2. إنشاء خدمة لمرة واحدة

يخلق /etc/systemd/system/nextcloudcron.service:

sudo nano /etc/systemd/system/nextcloudcron.service

أدخل هذه الوحدة، مع تعديل المسار والمستخدم إذا كان التثبيت الخاص بك مختلفًا:

[Unit]
Description=Nextcloud cron.php job

[Service]
User=www-data
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process

ExecConditionيتحقق النظام من عمل Nextcloud بشكل طبيعي قبل تشغيل المهمة في الخلفية. إذا لم يتحقق الشرط، يتخطى systemd عملية التشغيل؛ راجع سجل النظام لمعرفة السبب. KillMode=processيسمح هذا النظام للبرامج الخارجية التي تبدأها مهمة في الخلفية بالاستمرار بعد انتهاء عملية cron الرئيسية. لا يتطلب مثال Nextcloud الحالي [Install]قسمًا في ملف الخدمة هذا.

يُنصح باستخدام /usr/bin/phpهذه الطريقة فقط عندما يكون هذا هو مُفسِّر سطر الأوامر الصحيح على خادمك. على سبيل المثال، قد يقوم مستودع PHP مُخصَّص بتثبيت ملف تنفيذي مُرقَّم. استخدم نفس إصدار PHP المُتوافق الذي يتطلبه Nextcloud والذي يستخدمه تكوين خادم الويب الخاص به.

3. إنشاء المؤقت

يخلق /etc/systemd/system/nextcloudcron.timer:

sudo nano /etc/systemd/system/nextcloudcron.timer

يضيف:

[Unit]
Description=Run Nextcloud cron.php every 5 minutes

[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

OnBootSecيُجدول التشغيل الأول بعد خمس دقائق من بدء تشغيل systemd عند الإقلاع. OnUnitActiveSecويُجدول تشغيلًا آخر بعد خمس دقائق من آخر تفعيل للخدمة. يختلف المؤقت عن الخدمة نفسها: فعّل الوحدة وابدأ .timerتشغيلها لتشغيل الجدول تلقائيًا.

4. أعد تحميل systemd وقم بتفعيل المؤقت

اطلب من نظام systemd قراءة ملفات الوحدة الجديدة، ثم قم بتمكين المؤقت وبدء تشغيله في أمر واحد:

sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer

تحقق من المؤقت:

systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron

يجب تحميل المؤقت وتفعيله، ويجب list-timersأن يُظهر وقتًا مستقبليًا أسفل "التالي". إذا كان معطلاً، أو غير مُحمّل، أو لا يحتوي على تفعيل تالٍ، فتأكد من أن اسم الملف ينتهي بـ "." .timer، وأن [Install]القسم يحتوي على " . WantedBy=timers.target"، وأنك قمت بتشغيله daemon-reloadبعد حفظ الملفات.

5. قم بإجراء اختبار واحد وافحص نتيجته

يمكنك تشغيل الخدمة مرة واحدة دون انتظار دقات المؤقت التالية:

sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager

ابحث عن نتيجة الخدمة وأي أخطاء في PHP أو Nextcloud. بعد انتهاء الأمر، nextcloudcron.serviceقد يعود النظام إلى نقطة البداية inactive (dead)لأنه مهمة تُنفذ لمرة واحدة. هذا لا يعني بالضرورة فشلها. يجب أن يبقى المؤقت نشطًا ويُجدول التشغيل التالي؛ ويجب أن يُظهر سجل النظام ما إذا كان التشغيل السابق قد انتهى بنجاح.

في إعدادات إدارة Nextcloud، افتح قسم حالة مهام الخلفية وتأكد من أن وقت تنفيذ المهمة الأخيرة يتقدم بعد انتهاء المؤقت. سيختفي تحذير النظرة العامة عندما يكتشف Nextcloud نشاطًا حديثًا في الخلفية. انتظر فترة زمنية واحدة على الأقل بعد تفعيل المؤقت قبل الجزم بأن الجدول الزمني لم يُنفذ.

تشخيص أنماط الأعطال الشائعة

ما تراهما الذي يجب فحصه؟الخطوة التالية
المؤقت "غير نشط" أو معطلما إذا كانت وحدة المؤقت قد تم تمكينها وبدأت العملقم بتشغيله sudo systemctl enable --now nextcloudcron.timer، ثم تحققsystemctl list-timers
المؤقت نشط، لكن الخدمة تفشلسجل الخدمة، ملف PHP القابل للتنفيذ، مسار Nextcloud، ومستخدم الخدمةقم بتشغيل اختبار الحالة كـ www-data؛ أصلح أول خطأ تم الإبلاغ عنه في PHP أو خطأ في أذونات الملف
تكون الخدمة غير نشطة بين عمليات التشغيلوقت المؤقت التالي وآخر إدخال في سجل الخدمةإذا تم إنهاء الخدمة بنجاح وظل المؤقت نشطًا، فهذا أمر طبيعي بالنسبة لوحدة تعمل لمرة واحدة.
تنتهي الخدمة دون تشغيلهاcron.phpالنتيجة ExecConditionوما إذا كان Nextcloud في وضع الصيانةقم بحل مشكلة الفشل وتحقق من حالة Nextcloud قبل إعادة تشغيل المهمة يدويًا.
لا تزال صفحة الإدارة تُشير إلى أن cron لم يتم تشغيلهما إذا كانت الخدمة تستدعي النسخة الصحيحة بالفعل، وما إذا كان وقت تنفيذها الأخير يتغيرانتظر فترة زمنية محددة، ثم افحص السجلات، وتأكد من أنك تتحقق من نفس تثبيت Nextcloud.

للحصول على مزيد من التفاصيل، راجع سجلات الخدمة الأخيرة وملف سجل Nextcloud:

sudo journalctl -u nextcloudcron.service --since "30 minutes ago" --no-pager
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ background-job:list

تُظهر قائمة المهام العمل المُسجّل، لكنها لا تُعدّ دليلاً كافياً على أن المؤقت يعمل. استخدم وقتي التنشيط الأخير والتالي للمؤقت، وسجل الخدمة، ومؤشر آخر تشغيل في Nextcloud معاً.

متى يجب استخدام مُجدول مختلف

تعمل مؤقتات Systemd بكفاءة عندما يُشغّل الخادم نظام systemd وترغب في جدولة محلية تُدار بواسطة الخدمة. إذا كنت تُشغّل بالفعل برنامج cron قياسيًا ويمكنك التحقق من ملف crontab الخاص به، فسيتم دعم إدخال cron النظامي الذي يستدعي نفس الأمر cron.php. www-dataتجنّب جدولة كلا الطريقتين لنفس مثيل Nextcloud؛ لأن الاستدعاءات المتداخلة قد تُهدر الموارد وتُعقّد عملية استكشاف الأخطاء وإصلاحها.

يعتمد جدولة AJAX على زيارات المستخدمين لـ Nextcloud، وهو أقل موثوقية للخوادم المشغولة أو متعددة المستخدمين. تُجرى استدعاءات Webcron cron.phpعبر HTTP، وقد تكون مناسبة للخوادم الصغيرة جدًا حيث لا يتوفر الوصول إلى النظام، ولكن Nextcloud تُشير إلى أن تنفيذ الويب يُحد من حجم العمل الذي يُمكن تنفيذه لكل استدعاء. إذا كان Nextcloud مُحوسبًا في حاوية أو مُدارًا بواسطة جهاز، فاستخدم مُجدوله أو إعدادات الحاوية المُدعمة؛ /var/www/nextcloudلن تعمل خدمة المضيف التي تستخدم هذه الطريقة إذا لم يكن هذا المسار موجودًا على المضيف.

يتضمن الإعداد السليم مؤقتًا مُفعّلًا بوقت تشغيل متكرر، وتشغيلات خدمة تُنجز دون أخطاء PHP، ووقت تشغيل Nextcloud الأخير الذي يتقدم. إذا تحققت الشروط الثلاثة، ولكن لا تزال مهمة تطبيق معينة متأخرة، فقد يكون المُجدوِل يعمل بينما تنتظر تلك المهمة جدولها الزمني، أو فترة الصيانة، أو شروط قائمة الانتظار. شخّص تلك المهمة بشكل منفصل قبل تغيير فاصل المؤقت.

المراجع الرسمية

اترك تعليقاً

إصلاح أخطاء التشفير التام بين الأطراف (E2EE) في عنصر الويب "فشل في فك تشفير الحدث"

إصلاح أخطاء التشفير التام بين الأطراف (E2EE) في عنصر الويب "فشل في فك تشفير الحدث"

قم باستكشاف أخطاء فك تشفير Element Web وإصلاحها عن طريق التحقق من الجهاز، ونسخ المفاتيح الاحتياطية، ومفاتيح الاسترداد، ومفاتيح الغرف المفقودة - دون المخاطرة بسجل الرسائل.

كيفية إعداد وتفعيل المصادقة الثنائية (2FA) في Nextcloud

كيفية إعداد وتفعيل المصادقة الثنائية (2FA) في Nextcloud

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

كيفية تقييد إعادة توجيه البريد الإلكتروني الصادر حسب عنوان IP في زيمبرا

كيفية تقييد إعادة توجيه البريد الإلكتروني الصادر حسب عنوان IP في زيمبرا

قم بتقييد إعادة توجيه البريد الصادر غير المصادق عليه في Zimbra إلى عناوين IP الموثوقة باستخدام zimbraMtaMyNetworks. تعرّف على كيفية فحص قائمة السماح وتحديثها وإعادة تحميلها والتحقق منها بأمان.

إصلاح تحذير حد ذاكرة PHP في Nextcloud

إصلاح تحذير حد ذاكرة PHP في Nextcloud

قم بتعيين قيمة memory_limit لـ PHP إلى 512 ميجابايت على الأقل لـ Nextcloud، وابحث عن تكوين PHP الصحيح للويب، وأعد تشغيل Apache أو PHP-FPM، وتحقق من إزالة التحذير.

كيفية إعداد خادم Matrix Coturn TURN/STUN للمكالمات الصوتية والمرئية

كيفية إعداد خادم Matrix Coturn TURN/STUN للمكالمات الصوتية والمرئية

قم بإعداد Coturn مع Synapse لإجراء مكالمات Matrix WebRTC. قم بتكوين بيانات الاعتماد المشتركة، وNAT، ومنافذ جدار الحماية، وخيارات TLS، وميّز بين TURN القديم وMatrixRTC وLiveKit.

How to Configure Nextcloud Mail App with OAuth2 Authentication

How to Configure Nextcloud Mail App with OAuth2 Authentication

Configure Nextcloud Mail with OAuth2 for Gmail or Microsoft 365, verify IMAP/SMTP access, troubleshoot redirect issues, and know the limits.

كيفية إصلاح تحذير جلسة "تعذر التحقق من الهوية" في Element

كيفية إصلاح تحذير جلسة "تعذر التحقق من الهوية" في Element

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

نقل صناديق بريد كوبانو إلى جرومونيو أو زاماد: اختر المسار الصحيح

نقل صناديق بريد كوبانو إلى جرومونيو أو زاماد: اختر المسار الصحيح

قارن بين عملية ترحيل البيانات إلى Kopano و grommunio و Zammad. تعرّف على بيانات صناديق البريد التي يمكن لكل مسار الاحتفاظ بها، وكيفية تجربة النتائج والتحقق منها، ومتى يكون استخدام IMAP أو الاستيراد المخصص مناسبًا.

كيفية نقل مجلد بيانات Nextcloud بأمان إلى قرص صلب خارجي

كيفية نقل مجلد بيانات Nextcloud بأمان إلى قرص صلب خارجي

انقل مجلد بيانات Nextcloud إلى قرص صلب خارجي دون الإخلال بمراجع الملفات. استخدم النسخ الاحتياطية، والربط الدائم، وrsync، والأذونات، والروابط الرمزية بأمان.

حل مشكلة عدم تشغيل مهام Cron في Nextcloud تلقائيًا باستخدام systemd

حل مشكلة عدم تشغيل مهام Cron في Nextcloud تلقائيًا باستخدام systemd

قم باستكشاف أخطاء مؤقتات Cron الخاصة بنظام Nextcloud على Ubuntu وإصلاحها عن طريق التحقق من مستخدم الخدمة ومسارات PHP و Nextcloud وتفعيل المؤقت وسجل تشغيل المهمة.