[{"data":1,"prerenderedAt":185},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-healthchecks-على-vps-مراقبة-مهام-cron-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-healthchecks-على-vps-مراقبة-مهام-cron-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":119,"ctaBody":120,"ctaButton":121,"ctaUrl":122,"relatedPosts":123},504,"استضافة-healthchecks-على-vps-مراقبة-مهام-cron",{"fr":12,"en":13,"ar":10,"es":14},"self-host-healthchecks-vps","self-host-healthchecks-cron-monitoring-vps","autoalojar-healthchecks-monitorizar-cron-vps","Healthchecks على VPS: مراقبة مهام cron باستضافة ذاتية","ثبّت Healthchecks على خادم افتراضي: كل مهمة cron أو نسخة احتياطية أو مهمة مجدولة ترسل إشارة ping، وتُنبَّه فور غيابها أو فشلها أو طول مدتها.",6,0,false,"2026-10-24T00:00:00+00:00","2026-10-24T23:28:56+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-healthchecks-vps-poster.svg",{"categorySlug":34,"appSlug":35},"المراقبة-وقابلية-الرصد","healthchecks","مهمة cron التي تتوقف لا تُحدث أي ضجيج. تفشل النسخة الاحتياطية الليلية، ويتوقف تنظيف السجلات، وتنقطع المزامنة مع مزوّد — ولا شيء ينبّهك، لأن لا شيء يُنفَّذ. Healthchecks أداة مفتوحة المصدر (رخصة BSD-3) تقلب المشكلة: كل مهمة ترسل إشارة ping عند انتهائها، وينبّهك Healthchecks عندما لا تصل الإشارة. يثبّته هذا الدليل في حاوية Docker واحدة على خادم افتراضي، ويضعه خلف وكيل عكسي HTTPS، ويربط أول مهمة cron.",[38,42,52,84,87,103,107,110,113,116],{"type":39,"title":40,"body":41},"h2","لماذا تراقب ما يجب أن يُنفَّذ، لا ما يستجيب فقط","تتحقق مراقبة التوفّر من أن الخدمة تستجيب. لكنها لا ترى ما يحدث بين طلبين: نسخة الساعة الثالثة فجراً، وإرسال الفواتير، وتجديد شهادة، والتصدير إلى المحاسب. تفشل هذه المهام في صمت — قرص ممتلئ أو كلمة مرور منتهية أو خادم أُعيد تشغيله دون مؤقّته — ولا تنتبه إلا يوم تحتاج إليها.\n\nلا يفيد متغير `MAILTO` في cron كثيراً: لا يرسل رسالة إلا إذا نُفّذت المهمة وكتبت في مخرجاتها، ولا يقول شيئاً حين لا تبدأ المهمة أصلاً. ينطلق Healthchecks من الغياب: لكل مهمة جدولة متوقعة، والصمت بعد مهلة السماح يطلق التنبيه.",{"type":43,"title":44,"items":45},"ul","ما يقدّمه Healthchecks",[46,47,48,49,50,51],"**مراقبة بالـ ping** — كل مهمة تستدعي رابطاً فريداً، وغياب الإشارة يطلق التنبيه.","**جدولة cron أو بالمدة** — تعبير cron مع المنطقة الزمنية أو فاصل بسيط، مع مهلة سماح.","**مدة التنفيذ** — إشارتا `\u002Fstart` و`\u002Ffail` تقيسان المدة وتبلّغان عن الفشل الصريح.","**رموز الخروج والسجلات** — رمز الخروج وآخر مخرجات الأمر، تُعرض في لوحة التحكم.","**أكثر من عشرين تكاملاً** — البريد وwebhook وSlack وDiscord وMatrix وntfy وTelegram وGotify وPagerDuty وOpsgenie…","**الفريق وواجهة API** — مشاريع منفصلة وأعضاء مدعوّون وشارات حالة وواجهة REST لإنشاء المراقبات من سكربتاتك.",{"type":53,"title":54,"headers":55,"rows":59},"comparison","Healthchecks مقارنةً بالطرق الشائعة",[5,56,57,58],"Healthchecks","MAILTO في cron","مراقبة التوفّر",[60,64,68,71,75,80],[61,62,63,63],"تنبيه إذا لم تبدأ المهمة","نعم","لا",[65,66,67,63],"تنبيه إذا فشلت المهمة","نعم، برمز الخروج أو \u002Ffail","فقط إن كتبت في مخرجاتها",[69,70,63,63],"مدة التنفيذ","تُقاس",[72,73,62,74],"أجهزة دون منفذ مفتوح","نعم، باستدعاء HTTPS صادر","لا، يجب الوصول إلى الهدف",[76,77,78,79],"قنوات التنبيه","أكثر من عشرين تكاملاً","بريد محلي","حسب الأداة",[81,82,63,83],"سجل مركزي","نعم، لكل مراقبة","نعم، للخدمات",{"type":39,"title":85,"body":86},"المتطلبات","يكفي خادم Ubuntu 24.04 بذاكرة **1 غيغابايت**: يعمل Healthchecks في حاوية واحدة ويخزّن بياناته في قاعدة SQLite. تحتاج إلى Docker مع إضافة Compose، وإلى **اسم نطاق** يشير إلى الخادم، مع nginx وشهادة HTTPS: تُبنى روابط ping وروابط التنبيهات على هذا العنوان، ويرفض التطبيق الطلبات الموجّهة إلى اسم آخر.\n\nيفضّل تثبيت Healthchecks على جهاز **منفصل** عن الخوادم التي يراقبها: إن توقّف معها فلن ينبّهك أحد.",{"type":88,"title":89,"steps":90},"steps","تثبيت Healthchecks باستخدام Docker Compose",[91,94,97,100],{"title":92,"body":93},"تحضير ملف ‎.env","أنشئ مجلد التطبيق وملف `.env` يحمل المفتاح السري والعنوان العام. استبدل `hc.example.com` بنطاقك.\n```bash\nmkdir -p \u002Fopt\u002Fhealthchecks && cd \u002Fopt\u002Fhealthchecks\ncat > .env \u003C\u003CEOF\nSECRET_KEY=$(openssl rand -hex 24)\nSITE_ROOT=https:\u002F\u002Fhc.example.com\nEOF\n```",{"title":95,"body":96},"إنشاء ملف Compose","ضع ملف `docker-compose.yml` هذا في المجلد نفسه. يُنشر المنفذ على واجهة الحلقة المحلية فقط، والتسجيل العام مغلق، وقاعدة SQLite في وحدة تخزين.\n```yaml\nservices:\n  healthchecks:\n    image: healthchecks\u002Fhealthchecks:v5.0.1\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8102:8000\"\n    env_file: .env\n    environment:\n      DEBUG: \"False\"\n      DB_NAME: \u002Fdata\u002Fhc.sqlite\n      REGISTRATION_OPEN: \"False\"\n      GUNICORN_WORKERS: \"2\"\n    volumes:\n      - healthchecks-data:\u002Fdata\nvolumes:\n  healthchecks-data: {}\n```",{"title":98,"body":99},"التشغيل وإنشاء حساب المسؤول","عند التشغيل تطبّق الحاوية الترحيلات ثم تشغّل خادم الويب وعمليات إرسال التنبيهات. أنشئ بعد ذلك حسابك: يطلب الأمر بريداً إلكترونياً وكلمة مرور.\n```bash\ndocker compose up -d\ndocker compose exec healthchecks .\u002Fmanage.py createsuperuser\n```",{"title":101,"body":102},"النشر عبر HTTPS خلف nginx","أضف كتلة `server` لنطاقك مع شهادة Let's Encrypt، ومرّر ترويسات المصدر: دون `X-Forwarded-Proto` يفشل تسجيل الدخول بخطأ CSRF.\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8102;\n    proxy_set_header Host $host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\n```",{"type":104,"title":105,"body":106},"tip","أبقِ التسجيل مغلقاً","يقبل Healthchecks افتراضياً التسجيل العام. الإعداد `REGISTRATION_OPEN: \"False\"` يغلقه: لا يدخل إلا الحسابات التي تنشئها أو تدعوها إلى مشروع. على خادم مكشوف للإنترنت، اضبط هذا منذ أول تشغيل.",{"type":39,"title":108,"body":109},"ربط مهام cron","في لوحة التحكم أنشئ مراقبة، وحدّد الجدولة — تعبير cron للمهمة ومنطقتها الزمنية — ثم مهلة سماح تغطي مدتها المعتادة. انسخ رابط ping وأضفه إلى المهمة.\n```bash\n# crontab: backup at 3 a.m., ping only on success\n0 3 * * * \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh && curl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull https:\u002F\u002Fhc.example.com\u002Fping\u002F\u003Cuuid>\n\n# variant: signal the start, then send the exit code\nURL=https:\u002F\u002Fhc.example.com\u002Fping\u002F\u003Cuuid>\ncurl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull \"$URL\u002Fstart\"\n\u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh > \u002Ftmp\u002Fbackup.log 2>&1\ncurl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull --data-binary @\u002Ftmp\u002Fbackup.log \"$URL\u002F$?\"\n```\n\nالصيغة الأولى لا ترسل الإشارة إلا عند النجاح: يظهر الفشل كإشارة غائبة، ومن ثم تنبيه بعد مهلة السماح. الثانية أوضح: `\u002Fstart` يقيس المدة، ورمز الخروج المرسل بدل الإشارة يبلّغ عن الفشل فوراً، والمخرجات المرسلة في جسم الطلب تظهر في سجل المراقبة. الخياران `-m 10 --retry 5` يمنعان شبكة متقلبة من تعطيل المهمة أو إيهامك بعطل.",{"type":39,"title":111,"body":112},"استقبال التنبيهات","من **Integrations** أضف قناة واحدة على الأقل تقرؤها فعلاً، ثم اربطها بمراقباتك. تعمل webhook وSlack (webhook وارد) وMattermost وntfy وGotify دون أي إعداد على الخادم. تحتاج تكاملات أخرى إلى بيانات اعتماد في `.env`: رمز بوت لـ Telegram، وحساب ورمز لـ Matrix، وتطبيق OAuth لـ Discord.\n\nتمرّ تنبيهات **البريد** عبر خادم SMTP: أضف `EMAIL_HOST` و`EMAIL_PORT` و`EMAIL_HOST_USER` و`EMAIL_HOST_PASSWORD` و`DEFAULT_FROM_EMAIL` إلى `.env` ثم أعد التشغيل بـ `docker compose up -d`. الإعدادات نفسها تخدم دعوات الفريق والتقارير الدورية.",{"type":39,"title":114,"body":115},"استكشاف الأعطال","**تُرجع الصفحة خطأ 400.** لا يصل الطلب باسم المضيف الصحيح: تحقّق من أن `SITE_ROOT` يطابق تماماً النطاق الذي يخدمه nginx، وأن كتلة `location` تمرّر ترويسة `Host`.\n\n**يفشل تسجيل الدخول بخطأ CSRF.** لا يمرّر nginx الترويسة `X-Forwarded-Proto`: يظن التطبيق أنه يستقبل HTTP بينما يتحدث المتصفح HTTPS. أضف الترويسة وأعد تحميل nginx.\n\n**تنتقل مراقبة إلى حالة تنبيه رغم تنفيذ المهمة.** لم تُرسل الإشارة: جرّب أمر `curl` يدوياً من الجهاز المعني، وتحقّق من الوصول الصادر عبر HTTPS، ومدّد مهلة السماح إن كانت المهمة أطول من المتوقع.\n\n**لا يصل أي بريد.** دون `EMAIL_HOST` لا يرسل Healthchecks شيئاً ويذكر ذلك في سجلاته عند التشغيل: راجع `docker compose logs healthchecks`.",{"type":39,"title":117,"body":118},"التثبيت بنقرة من متجر ServOrbit","يثبّت متجر ServOrbit تطبيق Healthchecks على خادمك دون سطر أوامر: ينشر الحاوية مع إغلاق التسجيل، وينشئ حساب المسؤول بكلمة مرور مولّدة، وينشر التطبيق عبر HTTPS على نطاق فرعي لنطاقك أو على النطاق الفرعي المجاني للخادم. يظهر المعرّف وكلمة المرور في مساحة العميل؛ ولا يبقى إلا إنشاء مراقباتك.","مهامك المجدولة تحت المراقبة، على خادمك","يكفي خادم ServOrbit بنظام Ubuntu 24.04 وذاكرة 1 غيغابايت لتشغيل Healthchecks. تثبيت بنقرة من المتجر، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم، وحساب مسؤول يُنشأ لك.","ثبّت Healthchecks","\u002Fmarketplace\u002Fالمراقبة-وقابلية-الرصد\u002Fhealthchecks",[124,145,168],{"id":125,"slug":126,"slugs":127,"title":131,"excerpt":132,"readTime":133,"views":134,"isPinned":19,"publishedAt":135,"updatedAt":136,"category":137,"categories":142,"featuredImage":30,"bgImage":31,"posterImage":144,"relatedSolution":30},230,"cron-مقابل-systemd-timers-أتمتة-vps-linux",{"fr":128,"en":129,"ar":126,"es":130},"cron-systemd-timers-automatisation-vps","cron-vs-systemd-timers-automate-your-linux-vps","cron-vs-systemd-timers-automatizar-vps-linux","‏cron مقابل systemd timers: أتمتة VPS Linux","مقارنة عملية بين cron وsystemd timers: الصياغة والسجلات والهجرة واستكشاف الأخطاء للمهام المتكررة على ‏VPS Linux.",12,1,"2026-08-06T00:00:00+00:00","2026-09-20T21:13:53+00:00",{"id":138,"name":139,"slug":140,"color":141,"icon":140},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[143],{"id":138,"name":139,"slug":140,"color":141,"icon":140},"\u002Fblog\u002Fcovers\u002Fcron-systemd-timers-automatisation-vps-poster.svg",{"id":146,"slug":147,"slugs":148,"title":152,"excerpt":153,"readTime":154,"views":138,"isPinned":19,"publishedAt":155,"updatedAt":156,"category":157,"categories":163,"featuredImage":30,"bgImage":31,"posterImage":165,"relatedSolution":166},194,"استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd",{"fr":149,"en":150,"ar":147,"es":151},"self-host-ntfy-vps","self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd","autoalojar-ntfy-en-un-vps","استضافة ntfy على VPS: إشعارات فورية من سكريبتاتك وCI\u002FCD","انشر ntfy على VPS الخاص بك وأرسل إشعارات push من أي سكريبت أو مهمة cron أو خط CI\u002FCD بأمر curl بسيط — بدون SaaS أو API key أو اشتراك.",11,"2026-07-28T00:00:00+00:00","2026-10-13T14:10:29+00:00",{"id":158,"name":159,"slug":160,"color":161,"icon":162},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[164],{"id":158,"name":159,"slug":160,"color":161,"icon":162},"\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":34,"appSlug":167},"ntfy",{"id":169,"slug":170,"slugs":171,"title":175,"excerpt":176,"readTime":158,"views":18,"isPinned":19,"publishedAt":177,"updatedAt":178,"category":179,"categories":180,"featuredImage":30,"bgImage":31,"posterImage":182,"relatedSolution":183},105,"مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma",{"fr":172,"en":173,"ar":170,"es":174},"superviser-vps-uptime-kuma","monitoring-your-vps-with-uptime-kuma","supervisar-vps-con-uptime-kuma","مراقبة خادمك الافتراضي VPS باستخدام Uptime Kuma","انشر Uptime Kuma على خادمك الافتراضي VPS لمراقبة مواقعك وخدماتك ذاتيًا، مع تنبيهات وصفحة حالة عامة.","2026-03-07T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":158,"name":159,"slug":160,"color":161,"icon":162},[181],{"id":158,"name":159,"slug":160,"color":161,"icon":162},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":34,"appSlug":184},"uptime-kuma",1792884786309]