أحاول إضافة مهمة كرون بسيطة للتشغيل داخل حاوية Docker الخاصة بي. أريد إضافتها أثناء الإعداد بحيث تعمل تلقائيًا عند اكتمال الأمر ./launcher rebuild app.
تعمل مهمة الكرون عندما أقوم بإضافتها يدويًا إلى ملف /etc/cron.d/anacron باستخدام vim، لكن إذا قمت بتعديله دون الدخول إليه وحفظه (أي باستخدام الأمر echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron)، فلا يبدو أن الكرون يلتقط التغيير ولا يقوم بتشغيل المهمة.
إذا أضفت مسافة في أي مكان داخل الملف باستخدام vim ثم حفظته، يلتقط الكرون التغيير ويبدأ في تشغيل المهمة.
وبما أن التغييرات لا يتم التقاطها عند إضافتها عبر أمر echo، فإن إضافة هذا الأمر إلى ملف app.yml الخاص بي لا يعمل.
كما جربت docker restart app بعد إضافة التغييرات عبر echo، لكن ذلك لم ينجح أيضًا.
أشعر بأنه يجب أن تكون هناك طريقة أسهل أغفلتها. يبدو أن تعديل ملف anacron بعد الإعداد ليس الطريقة الصحيحة للقيام بذلك.
أقوم بتشغيل مستودع discourse مستضاف بشكل خاص مع بعض الملفات المخصصة عليه.
لدي ملف في مجلد script في Discourse يُسمى email_me.py.
عند تشغيله، يرسل هذا الملف إليّ بريدًا إلكترونيًا يقول “Hello World!”.
أريد إنشاء مهمة مجدولة (cron job) داخل حاوية Docker الخاصة بـ Discourse لتشغيل هذا الملف كل دقيقة.
يمكن تحقيق ذلك بإضافة السطر * * * * * root python3 /var/www/discourse/script/email_me.py يدويًا إلى ملف /etc/cron.d/anacron باستخدام محرر مثل vim.
أريد أن تعمل مهمة الجدولة المذكورة أعلاه عند إعداد حاوية Discourse، ولكن لا يمكنني استخدام vim للقيام بذلك من ملف app.yml.
حاولت استخدام الأمر echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron كأمر في ملف app.yml. هذا يضيف السطر بنجاح إلى ملف anacron، لكن المهمة لا تعمل (كما لو أن التغيير لم يُسجّل).
أنا أحاول ببساطة إيجاد طريقة لجعل المهمة: * * * * * root python3 /var/www/discourse/script/email_me.py
تعمل بعد إعادة البناء باستخدام ./launcher rebuild app.
ولتوضيح الأمر أكثر، أنا مهتم بمعرفة هدفك النهائي، وليس الخطوات التي تتخذها لتحقيقه. إذا كان الهدف هو استلام بريد إلكتروني كل دقيقة، فيمكنك تحقيق ذلك عبر وظيفة Sidekiq في إضافة، وهو أمر أبسط بكثير.
هدفي النهائي هو تشغيل استعلام قاعدة بيانات للبحث عن نشاط مستخدم محدد، ثم إرسال بريد إلكتروني يحتوي على جدول بنتائج هذا الاستعلام. ستعمل هذه الرسالة الإلكترونية كإ تأكيد على الدفع المسبق، حيث سيتم دفع مستحقات المستخدمين الذين قاموا بهذا النشاط المحدد لاحقًا في نفس اليوم (عبر PayPal) عبر سكريبت آخر يُشغّل بواسطة cron.
لدي بالفعل سكريبتات قادرة على القيام بكلا الأمرين، لكنني أحتاج فقط إلى إيجاد طريقة لجعل حاوية discourse تشغيل هذه السكريبتات مرة واحدة في الأسبوع.
أنا غير ملم بـ Sidekiq. إذا كان بإمكانه القيام بذلك، فأين يمكنني البحث لتعلمه؟
شكرًا لكم!
(كما أنني جربت أمر sv restart cron والعديد من الطرق الأخرى لإعادة تشغيل cron دون جدوى)