كيفية استخدام مؤقتات Systemd كبديل لـ Cron


كمستخدم لنظام التشغيل Linux، من المحتمل أنك على دراية بـ cron. لقد كان بمثابة برنامج جدولة المهام المعتمد على الوقت في Unix لسنوات عديدة. الآن يستخدم العديد من المستخدمين مؤقتات Systemd لاستبدال هيمنة cron. ستناقش هذه المقالة أساسيات كيفية إعداد مؤقت النظام الخاص بك والتأكد من أنه يعمل بشكل صحيح على نظامك.

لماذا نستخدم مؤقتات Systemd بدلاً من Cron؟

واحدة من أكبر نقاط البيع في Systemd Timers هي أنها مدمجة بالكامل في النظام البيئي Systemd. وهذا يعني أنه من السهل جدًا جدولة وحدات خدمة Systemd المختلفة وربطها معًا، مما يجعل من السهل أتمتة المهام مقارنةً ببرنامج cron التقليدي.

محطة تعرض خدمة النظام باستخدام مؤقت Systemd.

هناك ميزة أخرى لـ Systemd Timers مقارنة بـ Cron وهي أنها توفر تحكمًا أكثر تفصيلاً حول كيفية تشغيل المهام المجدولة. على سبيل المثال، تحتوي مؤقتات Systemd على OnBootSec متغير، والذي يسمح لك بتأخير وحدة الخدمة الخاصة بك حتى مرور فترة زمنية معينة بعد التمهيد الناجح.

محطة تعرض مثالاً لتكوين المؤقت مع متغير تشغيل خاص.

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

من الجيد أن تعرف: هل ما زلت تبحث عن برنامج جدولة المهام الصحيح؟ تحقق من قائمتنا لأفضل بدائل cron التي يمكنك تثبيتها اليوم.

تثبيت مؤقتات Systemd

الموقتات هي وظيفة مضمنة في Systemd. وهذا يعني أنك إذا كنت تستخدم Systemd كبرنامج init الخاص بك، كما هو الحال مع توزيعات Linux الشائعة مثل Arch وFedora وUbuntu، فإن جهازك يستفيد بالفعل من هذه الميزة في بعض عمليات النظام الخاصة به.

للتحقق مما إذا كانت التوزيعة الخاصة بك تعمل بنظام Systemd، يمكنك تشغيل الأمر التالي:

سيؤدي القيام بذلك إلى إدراج جميع وحدات Systemd والأجهزة والمؤقتات التي تعمل حاليًا على نظامك.

محطة طرفية تعرض مخرجات أمر systemctl على توزيعة Linux المستندة إلى Systemd.

قائمة الموقتات الموجودة

أسهل طريقة يمكنك من خلالها التحقق من تشغيل المؤقت على حساب المستخدم الحالي الخاص بك هي باستخدام الأمر التالي:

يمكنك أيضًا استخدام --all إشارة للتحقق من كل مؤقت في النظام، بما في ذلك المؤقتات غير النشطة:

systemctl list-timers --all

سيؤدي القيام بذلك إلى طباعة التاريخ والوقت الذي سيتم فيه تنشيط كل مؤقت، والعد التنازلي حتى تلك النقطة، وكم من الوقت انقضى منذ آخر تشغيل، واسم وحدة المؤقت نفسه، والخدمة التي يتم تنشيطها لكل وحدة مؤقت.

محطة تسرد كافة مؤقتات Systemd قيد التشغيل في الجلسة الحالية.

من الجيد أن تعرف: تعرف على كيفية إدارة وحدات Systemd المتعددة والتحكم فيها بسهولة باستخدام chkservice.

إنشاء خدمة جديدة ومؤقت

الخطوة الأولى في إنشاء مؤقت Systemd هي إما إنشاء خدمة موجودة أو العثور عليها لإرفاقها بها. وذلك لأن كل مؤقت يحتاج إلى إرفاقه بوحدة خدمة الوالدين. سيرشدك هذا القسم خلال عملية إنشاء مؤقت لخدمة Systemd مخصصة.

ابدأ بإنشاء ملفات “.service” و”.timer” الفارغة في الدليل الرئيسي لديك:

touch ~/my-new-timer.{service,timer}

افتح ملف الخدمة الجديد باستخدام محرر النصوص المفضل لديك:

nano ~/my-new-timer.service

الصق القالب التالي داخل ملف الخدمة الجديد الخاص بك:

[Unit]
Name=My New Service
Description=The unit file for my custom command.
 
[Service]
Type=oneshot
User=ramces 
WorkingDirectory=/home/ramces/
ExecStart=/home/ramces/.local/bin/my-script.sh
 
[Install]
WantedBy=multi-user.target

احفظ ملف “.service”، ثم افتح ملف “.timer” الفارغ باستخدام محرر النصوص نفسه:

nano ~/my-new-timer.timer

قم بلصق كتلة التعليمات البرمجية التالية داخل ملف المؤقت الخاص بك:

[Unit]
Name=My New Service
Description=The timer for my custom command.
 
[Timer]
Unit=my-new-timer.service
OnCalendar=*-*-* 11:43:00
Persistent=true
 
[Install]
WantedBy=timers.target

اذهب الى [Timer] القسم، ثم استبدل قيمة OnCalendar متغير بالتاريخ والوقت الذي تريد تشغيل وحدة Systemd الخاصة بك. في حالتي، أريد أن يعمل برنامجي في تمام الساعة 11:43 صباحًا كل يوم.

محطة تسلط الضوء على قيمة المؤقت المخصص لمتغير OnCalendar.

ملحوظة: العلامات النجمية الثلاثة قبل القيمة “11:43:00” تشير إلى السنة والشهر واليوم. على سبيل المثال، سيؤدي تعيين هذه القيمة إلى “24-15-09” إلى مطالبة Systemd بتشغيل خدمتك مرة واحدة فقط في 15 سبتمبر 2024.

إنشاء مؤقت رتيب

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

للبدء، افتح ملف “.timer”، ثم قم بالتمرير لأسفل إلى ملف [Timer] قسم.

محطة تسليط الضوء على موقع

قم بإزالة كلا من OnCalendar و Persistent المتغيرات ثم أضف OnBootSec متبوعة بفاصل زمني عندما تريد تشغيل ملف الوحدة الخاص بك. على سبيل المثال، يؤدي تعيينه إلى “1hr” إلى مطالبة Systemd ببدء تشغيل الأمر بعد ساعة من تشغيل جهاز الكمبيوتر الخاص بك بنجاح.

محطة تسلط الضوء على متغير OnBootSec ليحل محل متغيرات التوقيت الأصلية لملف المؤقت المخصص.

أضف OnUnitActiveSec المتغير أدناه مباشرة OnBootSec، ثم قم بتوفير الفاصل الزمني الذي تريد تشغيل المؤقت فيه بشكل مستمر بعد تشغيل النظام. في حالتي، سأضبطه على “30 دقيقة” لأنني أريد أن يتم تشغيل مهمتي كل 30 دقيقة بعد تشغيلها الأولي.

محطة تسلط الضوء على متغير OnUnitActiveSec الذي يحول مؤقت التشغيل الفردي إلى مؤقت رتيب.

إنشاء مؤقت عابر

إحدى فوائد تكامل Systemd Timer بشكل عميق في Systemd هو أنه يمكنه الاستفادة من البرامج الأخرى المجاورة لـ init daemon. على سبيل المثال، من الممكن استخدام المؤقتات مع Systemd-run لإنشاء مهام عابرة لمرة واحدة على جهازك.

لإنشاء مؤقت مؤقت بسيط، الصق السطر التالي من التعليمات البرمجية في جلسة عمل طرفية، ثم استبدل قيمة --on-calendar متغير مع الفاصل الزمني الذي تريد تشغيل الأمر الخاص بك:

sudo systemd-run --on-calendar="*-*-* 11:46:00"

ألحق الأمر الذي تريد تشغيله في نهاية السطر، ثم اضغط يدخل لجدولة ذلك.

sudo systemd-run --on-calendar="*-*-* 11:46:00" /home/ramces/.local/my-script.sh

يمكنك أيضًا إنشاء مؤقتات رتيبة مؤقتة باستخدام كل من --on-boot و --on-unit-active المتغيرات:

sudo systemd-run --on-boot="1hr" --on-unit-active="30m" /home/ramces/.local/my-script.sh

تأكد من أن المؤقت المؤقت الخاص بك موجود الآن في قائمة الانتظار في برنامج جدولة المهام الخاص بـ Systemd عن طريق تشغيل الأمر التالي:

sudo systemctl status run*.timer
محطة توضح حالة المؤقت العابر المحمل في النظام.

وفي ملاحظة جانبية: يعد Systemd-run أكثر من مجرد وسيلة لإنشاء مؤقتات مؤقتة في Linux. تعرف على كيفية استخدامه كبديل لـ sudo مع Run0.

تشغيل مؤقت Systemd

لتشغيل Systemd Timer الجديد، يتعين عليك التأكد من تحميله بشكل صحيح في جلسة Systemd الحالية. للقيام بذلك، انسخ كلاً من الخدمة المخصصة وملف المؤقت إلى دليل خدمة Systemd الخاص بك:

sudo cp /home/ramces/my-new-timer.{service,timer} /etc/systemd/system/

أعد تحميل التكوين الحالي لبرنامج init daemon:

sudo systemctl daemon-reload

قم بتنشيط كل من الخدمة والمؤقت الذي قمت بإنشائه باستخدامه systemctl:

sudo systemctl enable my-new-timer.service<br>sudo systemctl enable --now my-new-timer.timer

تحقق مما إذا كنت قد قمت بتحميل مؤقتك الجديد بشكل صحيح عن طريق تشغيل: sudo systemctl status my-new-timer.timer في جلسة طرفية جديدة. في هذه الحالة، يمكنك أن ترى أن المؤقت الخاص بي تمت جدولته الآن وتجهيزه لتشغيل النظام.

محطة تعرض ملف المؤقت الذي يعمل في النظام الحالي.

يعد تعلم كيفية جدولة المهام باستخدام Systemd Timers مجرد جزء واحد من فهم كيفية عمل جهاز Linux الخاص بك تحت الغطاء. تعمق أكثر في الأجزاء الداخلية لنظام التشغيل الرائع هذا من خلال الاطلاع على مقال المقارنة الخاص بنا حول Grub وSystemd-boot.

مصدر الصورة: ألكسندر بودفالني عبر Unsplash. جميع التعديلات ولقطات الشاشة بواسطة Ramces Red.

اشترك في النشرة الإخبارية لدينا!

يتم تسليم أحدث البرامج التعليمية لدينا مباشرة إلى صندوق البريد الوارد الخاص بك

رمسيس الأحمر

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى