تخطَّ إلى المحتوى
ططارق الوليديAI Developer Tools Directory
D

Dagu

نشط ومستقريعمل محلياً ✓بدون اشتراك API

حوّل السكربتات وأوامر cron إلى مسارات YAML مرئية مع اعتماديات وجدولة وإعادة محاولة وسجل تشغيل، عبر محرك ذاتي الاستضافة.

$brew install dagu
💡

الاستخدام المثالي لهذه الأداة

تناسب مطورًا أو فريقًا صغيرًا لديه عدة سكربتات مترابطة ويحتاج جدولة وسجلًا ومكانًا واضحًا لمعرفة موضع الفشل. تضيف اعتماديات وإعادة محاولة وواجهة تشغيل من دون قاعدة بيانات خارجية في وضع الخادم الواحد. لا تناسب أمرًا مستقلًا بسيطًا، وتحتاج الخطة المدفوعة حاليًا لبعض ضوابط الفريق مثل المستخدمين الإضافيين وSSO وRBAC وسجل التدقيق.

التفاصيل والميزات المصورة

عندما تكبر مجموعة سكربتاتك، لا يعود cron وحده كافيًا لفهم ما بدأ، وما فشل، وأي خطوة تعتمد على أخرى. Dagu يحوّل السكربتات والأوامر الموجودة لديك إلى مسارات عمل مكتوبة في YAML، مع جدولة واعتماديات ومحاولات إعادة وسجل تشغيل وواجهة ويب. قيمته أنه يضع ترتيب العمل وحالته في مكان يمكن قراءته ومراجعته، من دون إجبارك على إعادة كتابة السكربتات داخل إطار برمجي جديد.

🧭 ما Dagu وكيف يعمل؟

Dagu محرك مفتوح المصدر للتشغيل الذاتي ينسّق المهام على شكل DAG، أي رسم موجّه بلا دورات: كل خطوة تعرف ما يجب أن ينجح قبلها، ولا تعود السلسلة إلى خطوة سابقة في حلقة. تكتب ملف YAML يصف الأوامر والاعتماديات والجدول وسياسة الخطأ، ثم يشغّل Dagu هذه الأوامر على الجهاز نفسه أو عبر عمال موزعين. تستطيع تشغيله كثنائي واحد مع واجهة ويب، ولا يحتاج في وضع الخادم الواحد إلى PostgreSQL أو وسيط رسائل خارجي.

Dagu لا يستبدل سكربت Python أو أمر النسخ الاحتياطي أو حاوية Docker. هو طبقة تشغيل حولها: يقرر متى تبدأ، يحفظ حالة كل خطوة وسجلها، ويطبّق الاعتماديات وإعادة المحاولة. توجد مسارات أوسع للعمال الموزعين وKubernetes، لكن البداية المناسبة لفرد أو فريق صغير هي خادم واحد على جهاز يملكه الفريق.

رسم يوضح ملف YAML يمر عبر Dagu إلى خطوات مترابطة وسجل تشغيل
رسم يوضح ملف YAML يمر عبر Dagu إلى خطوات مترابطة وسجل تشغيل

رسم توضيحي أصلي، وليس لقطة من واجهة Dagu.

🎯 كيف سيفيدك في عمل حقيقي؟

افترض أن لديك مهمة ليلية: تنزيل ملف، التحقق منه، تحويله، ثم رفع النتيجة. مع أوامر متفرقة قد تعرف أن المهمة فشلت من غياب الملف فقط، ثم تبحث يدويًا في السجلات. مع Dagu تصف الترتيب في ملف واحد، تمنع تشغيل نسختين متداخلتين، تضيف إعادة محاولة للخطوة الشبكية، وتراجع أي خطوة فشلت من واجهة التشغيل.

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

لا تناسب الأداة مهمة بسيطة لها أمر واحد وجدولة مستقرة ولا تحتاج تاريخًا أو اعتماديات. كما أن فريقًا يحتاج عزلًا متعدد المستأجرين أو إدارة هوية مؤسسية كاملة يجب أن يراجع حدود الخطة المجانية والترخيص المدفوع قبل الاعتماد.

🌟 الميزات والقدرات الرئيسية

1. اعتمد على سكربتاتك الحالية بدل نقلها إلى إطار جديد

تضع الأوامر تحت steps وتستخدم depends لربط الخطوات. يمكن للخطوة تشغيل أمر shell أو حاوية أو طلب HTTP أو SSH أو SQL بحسب المنفذ والإعداد. فائدة ذلك أن منطق العمل يبقى في السكربت الذي تعرفه، بينما تنتقل الجدولة والاعتماديات والسجل إلى ملف منفصل.

  • أين تجدها: ملف YAML داخل مجلد DAGs، أو محرر YAML في واجهة الويب.
  • كيف تستخدمها: ابدأ بثلاث خطوات واضحة، سمِّ كل خطوة، واجعل الاعتماديات صريحة بدل الاعتماد على ترتيب ضمني.
  • مثال توضيحي: تعتمد transform على نجاح extract، ثم تعتمد load على transform.
  • ما ينبغي الانتباه إليه: YAML لا يعزل الأوامر ولا يثبت متطلباتها. يجب أن تتوفر البرامج والملفات والأسرار على الجهاز الذي ينفذ الخطوة.
رسم يوضح خطوات extract ثم transform ثم load واعتماد كل خطوة على السابقة
رسم يوضح خطوات extract ثم transform ثم load واعتماد كل خطوة على السابقة

رسم للعلاقات في مثال توضيحي غير منفذ.

2. جدولة مع سياسة للتداخل وإعادة المحاولة

يدعم ملف المسار صيغة cron للجدولة، مع منطقة زمنية وخيارات للتعامل مع تشغيل فات أو مع تشغيل ما زال جاريًا. تستطيع وضع retry_policy لخطوة قابلة للفشل المؤقت مثل تنزيل ملف. هذه الإعدادات تجعل السلوك المقرر ظاهرًا بجوار المسار بدل بقائه موزعًا بين crontab وسكربتات التفاف.

  • أين تجدها: schedule وoverlap_policy وretry_policy داخل YAML.
  • كيف تستخدمها: استخدم إعادة المحاولة فقط للأخطاء التي يحتمل زوالها، وحدد مهلة. اختر منع التداخل عندما قد يكتب تشغيلان إلى المورد نفسه.
  • مثال توضيحي: مهمة ليلية تتخطى بدء نسخة جديدة إذا استمر التشغيل السابق، وتحاول تنزيل الملف حتى ثلاث مرات بفاصل محدد.
  • ما ينبغي الانتباه إليه: إعادة المحاولة قد تكرر أثرًا حدث جزئيًا. يجب أن تكون الخطوة آمنة للتكرار أو تتحقق من حالتها قبل الكتابة.
رسم زمني يوضح جدولة ليلية ومنع التداخل وثلاث محاولات لخطوة شبكية
رسم زمني يوضح جدولة ليلية ومنع التداخل وثلاث محاولات لخطوة شبكية

الرسم يشرح السياسة، ولا يقيس الاعتمادية أو زمن التنفيذ.

3. سجل تشغيل وحالة لكل خطوة

تعرض واجهة الويب حالة المسار وسجلات الخطوات والتاريخ، ويمكنك من الطرفية استخدام أوامر مثل dagu status وdagu history. بدل فتح ملفات متفرقة لمعرفة أين توقف العمل، ترى الخطوة التي نجحت والتي فشلت ثم تراجع سجلها.

  • أين تجدها: صفحة تفاصيل التشغيل في Web UI، أو أوامر الحالة والتاريخ في CLI.
  • كيف تستخدمها: راجع وقت البداية والنهاية وحالة كل خطوة، ثم افتح سجل الخطوة الفاشلة قبل إعادة التشغيل.
  • مثال توضيحي: نجح extract، وفشل transform، لذلك لم تبدأ load.
  • ما ينبغي الانتباه إليه: السجل قد يحتوي أسماء ملفات أو مخرجات أو أسرار طبعها برنامجك. استخدم مزودي الأسرار وإخفاء القيم، ولا تطبع الرمز السري أصلًا.
رسم يوضح سجل تشغيل نجحت فيه خطوتان وفشلت خطوة مع انتقال المراجع إلى سجلها
رسم يوضح سجل تشغيل نجحت فيه خطوتان وفشلت خطوة مع انتقال المراجع إلى سجلها

رسم توضيحي لحالة تشغيل، وليس لقطة واجهة أو نتيجة تجربة.

4. تشغيل محلي مع مسار توسع اختياري

يستطيع dagu start-all تشغيل الخادم والمجدول والخطوات في عملية واحدة. وعندما تحتاج إلى أجهزة تنفيذ أخرى، توجد عمال موزعون واتصال gRPC وتسميات لتوجيه العمل. يوجد أيضًا خادم MCP مدمج لعملاء متوافقين كي يفحصوا المسارات والحالات وينفذوا عمليات تسمح بها صلاحياتهم.

  • أين تجدها: وضع الخادم الواحد في Quickstart، وإعدادات coordinator/worker في وثائق النشر، وقسم MCP في الدليل.
  • كيف تستخدمها: ابدأ بخادم واحد على شبكة خاصة. لا تنتقل إلى العمال الموزعين إلا عندما تحتاج موارد أو مواقع تنفيذ مختلفة.
  • مثال توضيحي: يشغل الخادم جدولة النسخة الاحتياطية محليًا، ثم يوجه تحويل فيديو إلى عامل يحمل تسمية GPU لاحقًا.
  • ما ينبغي الانتباه إليه: الاتصال بين الخادم والعمال يحتاج حماية. التوثيق ينبه إلى ضبط TLS بدل الاتصال غير الآمن عندما تعبر الشبكة حدودًا غير موثوقة.
رسم يوضح خادم Dagu محليًا ثم مسار توسع اختياري إلى عمال بتسميات
رسم يوضح خادم Dagu محليًا ثم مسار توسع اختياري إلى عمال بتسميات

رسم معماري مبسط؛ لا يعني أن التوزيع مطلوب للبداية.

5. مصادقة وحدود صلاحيات يجب ضبطها قبل العرض للشبكة

الوضع المدمج للمصادقة هو الافتراضي الموصى به للخادم المشترك، مع حساب مدير أول وجلسات JWT. الخطة المجانية تسمح بالتشغيل الكامل وبعدد محدود من مفاتيح API، بينما إنشاء مستخدمين إضافيين وRBAC المتقدم وSSO وسجل التدقيق ضمن ترخيص الاستضافة الذاتية المدفوع وفق صفحة الأسعار الحالية.

  • أين تجدها: auth.mode وpermissions.write_dags وterminal.enabled وإعدادات TLS والوصول عبر IP.
  • كيف تستخدمها: اربط الخادم بعنوان خاص أو loopback، فعّل المصادقة المدمجة، استخدم TLS خلف وكيل موثوق، وأبقِ الطرفية الويب معطلة إلا لحاجة إدارية واضحة.
  • مثال توضيحي: يستطيع المسؤول المحلي إنشاء المسارات، بينما لا يُعرض الخادم للإنترنت مباشرة.
  • ما ينبغي الانتباه إليه: صلاحيات مساحة العمل داخل تثبيت واحد ليست عزلًا متعدد المستأجرين. وتركيب Docker socket يمنح المسارات تحكمًا واسعًا في مضيف Docker.
رسم طبقات يوضح الشبكة والمصادقة وصلاحية كتابة المسارات والطرفية ثم أوامر النظام
رسم طبقات يوضح الشبكة والمصادقة وصلاحية كتابة المسارات والطرفية ثم أوامر النظام

رسم توضيحي لطبقات التحكم؛ لا يمثل تدقيقًا أمنيًا للمنتج.

🪜 مثال عملي: مسار نسخ احتياطي بسيط

مثال توضيحي لم أشغله على بيانات فعلية. بعد تثبيت Dagu، أنشئ backup.yaml في مجلد فارغ:

schedule: "0 2 * * *"
overlap_policy: skip
timeout_sec: 3600

steps:
  - id: pack
    run: ./scripts/pack.sh

  - id: verify
    run: ./scripts/verify.sh
    depends: pack

  - id: upload
    run: ./scripts/upload.sh
    depends: verify
    retry_policy:
      limit: 3
      interval_sec: 30

ثم اتبع المسار التالي:

  1. راجع السكربتات الثلاثة يدويًا؛ لا يجعلها YAML آمنة.
  2. افحص البنية دون تشغيل باستخدام dagu validate backup.yaml.
  3. اعرض خطة التنفيذ باستخدام dagu dry backup.yaml، مع الانتباه إلى أن المعاينة ليست صندوق عزل لكل منطق خارجي.
  4. نفذ تشغيلًا يدويًا على بيانات اختبار باستخدام dagu start backup.yaml.
  5. ابدأ الواجهة من المجلد نفسه باستخدام dagu start-all --dags .، ثم افتح http://localhost:8080 وأنشئ حساب المدير الأول إن طلبه الإعداد.
  6. راجع حالة الخطوات والسجل. لا تعتمد الجدولة على بيانات حقيقية قبل اختبار الاستعادة، لا النسخ فقط.

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

⚖️ ماذا يضيف مقارنة بـcron وسكربتات يدوية؟

الحاجةcron وسكربتات منفصلةمع Dagu
ترتيب الخطواتمنطق ضمني داخل السكربت أو عدة أوامراعتماديات مصرح بها في YAML
معرفة مكان الفشلبحث في ملفات ومخرجات متفرقةحالة وسجل لكل خطوة وتاريخ تشغيل
فشل مؤقتكتابة حلقة إعادة ومحاولة مخصصةسياسة retry موثقة بجوار الخطوة
منع التداخلقفل تكتبه وتختبره بنفسكoverlap policy ضمن المسار
تشغيل يدوي منظممعرفة الأوامر وتسلسلهاتشغيل المسار نفسه من CLI أو UI

تظل cron أخف لمهمة واحدة مستقلة. وDagu ليس بديلًا تلقائيًا لمنصة بيانات كبيرة تحتاج جدولة موزعة متخصصة وحوكمة مؤسسية منذ اليوم الأول.

⚙️ الإعدادات التي تستحق الانتباه

يحفظ Dagu ملفات المسارات افتراضيًا في ~/.config/dagu/dags، والسجلات والحالة في ~/.local/share/dagu. تستطيع تغييرها عبر DAGU_HOME أو متغيرات المسارات المتخصصة. ضع هذه الأدلة ضمن خطة النسخ الاحتياطي، ولا تفترض أن تاريخ التشغيل محفوظ خارج الجهاز.

اضبط working_dir عندما تعتمد الأوامر على مسارات نسبية، وحدد dotenv فقط لملف قيم تسيطر عليه. استخدم مزودي الأسرار للبيئات الحساسة، وتجنب وضع المفاتيح داخل YAML المضاف إلى Git. اضبط المنطقة الزمنية بوضوح في الجداول؛ عبارة «الساعة الثانية» بلا منطقة قد تنفذ في وقت غير مقصود بعد نقل الخادم.

🚀 التثبيت والبدء

على macOS مع Homebrew، الأمر الرسمي المباشر:

brew install dagu
dagu version

توجد حزم لـLinux وWindows وnpm وصور Docker وHelm. سكربت التثبيت الموجّه يستطيع تعديل PATH وإنشاء خدمة خلفية وحساب المدير، لذلك لا تشغله من الإنترنت قبل مراجعة محتواه وأثره. حزمة npm تنزّل الثنائي في postinstall. أما Docker فيحتاج مجلدًا دائمًا، ولا يستطيع تشغيل خطوات حاويات أخرى إلا بإعداد إضافي؛ تركيب Docker socket يمنحه سيطرة واسعة على المضيف.

تحققت من الإصدار المستقر v2.24.0 المنشور في 27 أكتوبر 2026. تعرض صفحة الإصدار أصولًا لـWindows وmacOS وLinux بعدة معماريات. لم أثبت الأداة أو أختبر كل منصة.

🔗 التكاملات والتوافق

يعمل Dagu على Linux وmacOS وWindows. يستطيع تشغيل shell وDocker وKubernetes وSSH وHTTP وSQL وغيرها، لكن كل تكامل يحتاج اعتماديته وشبكته وصلاحياته. يدعم MCP لعملاء مثل Codex وClaude Code وفق التوثيق، لكن توصيل وكيل لا يمنحه أمانًا إضافيًا؛ قيّد أدوات الكتابة والتشغيل والمفاتيح على الخادم.

يمكن حفظ YAML في Git ومراجعته، لكن مزامنة Git ومفاتيحها إعداد مستقل. ويستطيع Dagu Console الاختياري استقبال بيانات مراقبة محدودة بعد الاشتراك الصريح؛ تقول الوثائق إن السجلات والمخرجات والأسرار تبقى على الخادم، بينما تُرسل حالة التشغيل والتوقيت وأسماء الخطوات الفاشلة. إذا لم تفعّل الاتصال، يبقى التشغيل المحلي على بنيتك.

💰 التكلفة والتشغيل المحلي

كود Dagu بترخيص GPL-3.0، ووضع Community للاستضافة الذاتية مجاني دون مفتاح ترخيص، مع خوادم وعمال غير محدودين ووظائف التشغيل الأساسية. في تاريخ التحقق، تسمح الخطة المجانية بما يصل إلى مفتاحي API ومراقبة خادم واحد في Dagu Console. خطة Team بسعر 50 دولارًا شهريًا لثلاثة تراخيص خادم، وتضيف SSO وRBAC وسجل التدقيق والتوجيه للحوادث؛ توجد خطة Pro وحدود أخرى في صفحة الأسعار.

هذه أسعار رصدت في 29 أكتوبر 2026 وقد تتغير. تكلفة الخوادم والتخزين والشبكة والخدمات التي تستدعيها الخطوات منفصلة. والترخيص المفتوح للكود لا يجعل الميزات التجارية أو البنية التحتية مجانية.

🔐 الخصوصية والأمان والصلاحيات

Dagu محلي أولًا، لكنه ليس بلا شبكة: أوامرك قد تتصل بخدمات خارجية، والعمال الموزعون يتواصلون مع المنسق، والمراقبة السحابية اختيارية. يخزن YAML والسجلات وحالة التشغيل على نظام الملفات، لذا طبّق صلاحيات ملفات مناسبة ونسخًا احتياطيًا وتدويرًا للسجلات.

تعامل مع المسار ككود قابل للتنفيذ. من يحرر YAML يستطيع تغيير الأوامر التي تعمل بصلاحيات خدمة Dagu. لا تشغل مسارًا مجهول المصدر، ولا تمنح الخدمة حساب root افتراضيًا. عطّل الطرفية المدمجة إذا لم تحتجها، واضبط write_dags: false عندما يجب أن تكون الواجهة للعرض أو التشغيل فقط. راجع CORS وIP allowlist وTLS، ولا تفتح المنفذ 8080 للعامة بإعداد تطوير.

⚠️ الحدود ومتى لا تستخدمها

  • الخادم الواحد بسيط، لكنه نقطة تشغيل واحدة؛ تعطل الجهاز يوقف الجدولة ما لم تبنِ نشرًا مناسبًا.
  • حالة الملفات المحلية تتطلب تخطيطًا للنسخ الاحتياطي والمشاركة عند التوسع.
  • إعادة المحاولة لا تجعل الأمر غير القابل للتكرار آمنًا تلقائيًا.
  • تشغيل الحاويات وSSH وSQL يوسع الصلاحيات ومجال الضرر المحتمل.
  • ميزات الفريق المهمة مثل إدارة مستخدمين إضافيين وSSO وRBAC وسجل التدقيق تحتاج ترخيصًا مدفوعًا حاليًا.
  • لا تجعل واجهة الرسم Dagu بديلًا عن مراقبة البنية أو اختبارات سلامة البيانات.

اختر Dagu عندما لديك عدة أوامر حقيقية تحتاج ترتيبًا وجدولة وسجلًا، وتريد الاحتفاظ بمنطقها خارج إطار orchestration ثقيل. ابقَ مع cron عندما تكون المهمة مستقلة وواضحة، أو استخدم منصة أوسع عندما تكون الحوكمة والتعددية والتوسع الموزع هي المتطلب الأول.

📚 المصادر وتاريخ التحقق

التحقق: 29 أكتوبر 2026. اعتمدت البطاقة على المستودع الأصلي، وQuickstart، ودليل التثبيت، وإعداد الخادم والأمان، والمصادقة المدمجة، والأسعار، والإصدار v2.24.0، وGPL-3.0.

عرضت واجهة GitHub وقت الفحص 4.5 آلاف نجمة (رقم مقرب تعرضه الواجهة) و387 تفرعًا، وآخر نشاط ظاهر في 28 أكتوبر 2026. هذه مؤشرات شعبية ونشاط متغيرة، وليست تقييمًا للجودة أو الأمان. لم أختبر التثبيت أو المثال، ولم أجر تدقيقًا أمنيًا أو التقاطًا للشبكة.

شمل الاكتشاف GitHub Trending/Topics وفهرسي claudeskills.info وdshmarket.com. قورنت Dagu مع Bruno من مجال اختبار API؛ Bruno قوي للمجموعات المحلية والتعاون عبر Git، لكنه قريب من بطاقات اختبار حديثة في الدليل. اختيرت Dagu لأنها تضيف أتمتة تشغيلية خفيفة ومختلفة بعد zoxide وLychee وJujutsu، وليس بسبب النجوم.