أسرار مؤقتات systemd التي تعزز كفاءة النظام
مؤقتات systemd تُعد من الأدوات القوية التي تُسهّل إدارة المهام المُجدولة على أنظمة Linux. قد تبدو وظيفة المؤقتات بسيطة، ولكن هناك ميزات مُخفية يمكن أن تساعد في تنفيذ المهام بمرونة وكفاءة أعلى. في هذه المقالة، نستعرض بعض الميزات غير الشائعة لمؤقتات systemd التي قد تُحدث فرقًا كبيرًا في إدارة النظام، بدءًا من تحسين استخدام الموارد وصولاً إلى تسهيل عمليات الصيانة التلقائية.
النقاط الرئيسية
- تحتوي مؤقتات systemd على فحوصات داخلية لمنع تشغيل عدة حالات في وقت واحد، مما يتجنب تعارضات الموارد.
- قم بتمكين الدقة لمدة ثانية واحدة في مؤقتات systemd لزيادة الدقة مقارنة بالدقة الافتراضية لمدة دقيقة واحدة.
- قم بإبلاغك بالأعطال عبر الوسيلة التي تختارها. قم بتشغيل المؤقتات والخدمات على الفور للمساعدة في تصحيح الأخطاء.
تتميز مؤقتات systemd في Linux بمجموعة غنية ومتطورة من الميزات. تتعامل الميزات الأساسية مع السيناريوهات الأكثر شيوعًا، ولكنك قد تفوتك بعض الوظائف الرائعة مثل هذه الخيارات غير المعروفة.
مؤقت systemd
يعد مؤقت systemd البديل الحديث لأمر cron الأقدم. يسمح لك كلا الأمرين بجدولة مهمة أو عملية ليتم تشغيلها في وقت معين، أو بتردد معين. تتمثل مزايا مؤقتات systemd في المزيد من التحكم، والمزيد من المرونة، والدقة الأعلى من مؤقتات cron.
بناءً على التعليقات والأسئلة التي أتلقاها عندما أتحدث عنها، قد تكون مؤقتات systemd واحدة من أكثر العناصر التي يساء فهمها في Linux. حتى عندما أتحدث إلى أشخاص يفضلون مؤقتات systemd، فإنهم غالبًا لا يعرفون كل الأشياء الموجودة في هذه القائمة.
للوهلة الأولى، قد تبدو مؤقتات systemd صعبة. هناك بناء جملة تكوين جديد يجب تعلمه، والذي يجده الكثيرون مزعجًا. ولا تقوم بإنشاء ملف تكوين واحد فقط. يحتاج كل مؤقت إلى ملفين منفصلين، ولكن مرتبطين.
للوهلة الأولى، قد تبدو مؤقتات systemd معقدة، أو مخصصة فقط للمتخصصين في التكنولوجيا. لكنها ليست بهذا السوء حقًا. من العار أن بعض الأشخاص يتجنبونها، ويلتزمون بـ cron، لأن مؤقتات systemd تحتوي على الكثير من الحيل الرائعة.
1. مثيل واحد في كل مرة
تأتي الفائدة الأولى لمؤقتات systemd تلقائيًا. لست بحاجة إلى القيام بأي شيء للاستمتاع بها. هناك فحوصات داخلية تمنع تشغيل المؤقت إذا لم يكتمل تشغيل سابق لنفس المؤقت بعد.
يمنع هذا تعارضات الموارد، ويتجنب نوع المشاكل التي قد تنشأ إذا، على سبيل المثال، حاولت وظيفتا نسخ احتياطي تشغيلهما في نفس الوقت.
لا يتم تجاهل المؤقتات التي لا تعمل. يتم الاحتفاظ بها في حالة تأهب، ويتم تشغيلها عند اكتمال المؤقت الجاري تشغيله. هذا مهم لأن التشغيل المتسلسل للمؤقتات أمر جيد تمامًا. إنه تنفيذ متزامن غير مخطط له يمكن أن يؤدي إلى آثار جانبية غير متوقعة.
2. تشغيل توقيت الدقة الثانية
باستخدام cron، يمكنك جدولة المهام بدقة دقيقة واحدة. الآن، باستخدام مؤقتات النظام، يمكنك جدولة المؤقتات لتشغيلها بدقة ثانية واحدة. في الواقع، يمكنك استخدام دقة ميكروثانية ولكن، خارج سيناريوهات الوقت الحقيقي المتخصصة، من الصعب تخيل متى قد تحتاج إلى استخدام ذلك.
ولكن إليك الأمر. مؤقتات systemd تكون افتراضيًا بدقة دقيقة واحدة. تحتاج إلى تشغيل دقة دقة ثانية واحدة مثل هذا.
[Timer]
AccuracySec=1
3. استخدم الأحداث الرتيبة للتنفيذ المتأخر
تحتوي مؤقتات systemd على مجموعة واسعة ومرنة من طرق الجدولة.
يتم تشغيل الأحداث التقويمية في وقت معين في يوم معين أو مجموعة من الأيام، وفي وقت محدد. يمكنك تحديد أكثر من وقت محدد للمؤقت، لتمنحك أوقات تشغيل مختلفة في عطلات نهاية الأسبوع وأيام الأسبوع. هناك أيضًا مجال لعدم تحديد وقت، مما يعني فعليًا “في أي وقت خلال اليوم”.
يتم تشغيل الأحداث الرتيبة بعد مدة محددة بعد حدث ما، مثل تشغيل النظام. يمكنك أيضًا تكوين مؤقت ليتم تشغيله في وقت ما بعد تنشيطه أو، بشكل مفاجئ، إلغاء تنشيطه.
لتشغيل الخدمة بعد 45 ثانية من تشغيل الكمبيوتر، استخدم هذا التنسيق:
[Timer]
OnBootSec=45 seconds
هناك خدعة أنيقة أخرى وهي تشغيل المؤقت في حالة تغيير الوقت أو التاريخ في ساعة النظام الخاصة بالكمبيوتر.
[Timer]
OnClockChange=true
4. تشغيل المهام المحددة بوقت يدويًا
عندما أقوم بتطوير مؤقت، أحب القيام بذلك على مراحل. أولاً، تأكد من أن العملية المستهدفة التي تنوي تشغيلها تعمل كعملية مستقلة. وهذا يعني أن البرنامج أو النص البرمجي أو أمر Linux الذي تنوي تشغيله يجب أن يعمل كما هو متوقع عند استخدام الأمر في نافذة طرفية.
ثانيًا، أقوم بإنشاء ملف الخدمة، وأضع هذا الأمر فيه. وأخيرًا، أقوم بإنشاء ملف المؤقت الذي يقوم بتشغيل ملف الخدمة.
لاختبار المؤقت، يمكنك ضبطه ليتم تشغيله بعد بضع دقائق في المستقبل، والانتظار. هذا يعمل، ولكن إذا كان عليك القيام بذلك عدة مرات لجعل الأشياء تعمل، فإن تعديل سطر OnCalendar= في كل مرة تقوم فيها بإجراء تغيير يصبح مملًا قريبًا.
يمكنك تشغيل المؤقت يدويًا متى أردت تشغيله.
sudo systemctl start name-of-your.timer
يعمل هذا، ولكن عليك أن تضع في اعتبارك أن هذا يؤدي إلى تشغيل المؤقت. ولكن إذا كان سطر OnCalendar= الخاص بك يوجه المؤقت لتشغيل الخدمة في أول أربعاء من الشهر، فسوف تحتاج إلى الانتظار حتى يتم تشغيل الخدمة.
إذا كنت تريد حقًا اختبار تنفيذ الخدمة، فقم بتشغيل الخدمة بدلاً من ذلك.
sudo systemctl start name-of-your.service
هناك أمر إيقاف مماثل أيضًا.
sudo systemctl stop name-of-your.service
لاحظ أنه إذا تم تضمين وحدات RefuseManualStart أو RefuseManualStop في ملف الخدمة الخاص بك، وتم ضبطها على Yes، فلن تتمكن من بدء الخدمة أو إيقافها يدويًا. ولكن، إذا كنت تقوم بتصحيح أخطاء مؤقت systemd الذي أنشأته بنفسك، فربما لم تقم بتضمين هذه الوحدات. إذا كنت بحاجة إلى ذلك، يمكنك التعليق عليها أثناء الاختبار.
5. الإبلاغ تلقائيًا عن الخدمات الفاشلة
كانت توجيهات MAILTO واحدة من ميزات cron الأكثر سلاسة. لقد قدمت عنوان بريد إلكتروني لتلقي إشعارات بالأخطاء أو الأعطال. إن المكافئ في systemd أكثر تعقيدًا بعض الشيء، ولكنه يوفر مرونة أكبر. لا يلزم أن تكون طريقة الإشعارات بريدًا إلكترونيًا. يمكنك بسهولة إرسال إشعار إلى قناة Slack، على سبيل المثال.
تكمن الحيلة في تشغيل خدمة أخرى وجعل هذه الخدمة تطلق العملية التي ترسل الإشعار.
في ملف الخدمة الخاص بك، قم بتضمين توجيهات OnFailure= وضبطها على اسم خدمة الإبلاغ عن الأخطاء الخاصة بك. يجب أن ينتهي اسم خدمة الإشعارات الخاصة بك بعلامة “@” للإشارة إلى أنها خدمة نموذجية.
[Unit]
# ...
OnFailure=notify-error@%n.service
تُسمى خدمة الإبلاغ الخاصة بنا “[email protected]”. في حالة حدوث عطل وتم استدعاء هذه الخدمة، يتم إلحاق اسم الخدمة المستدعاة بعد “@”، ليحل محل الرمز “%n”. يمكن استرداد هذا الاسم في [email protected] كرمز “%i”.
تحتوي [email protected] الخاصة بنا على:
[Unit]
Description=Report systemd timer errors
[Service]
Type=oneshot
ExecStart=/usr/local/bin/send-to-slack.sh %i
[Install]
WantedBy=multi-user.target
عند تشغيل هذه الخدمة، يمكن الوصول إلى اسم الخدمة المستدعية عبر المتغير “%i”. على جهازي، يتم تمرير هذا إلى ملف نصي يسمى “send-to-slack.sh” الذي يؤلف الرسالة ويرسلها إلى Slack. يمكن أن يشير السطر ExecStart= إلى أي أمر أو برنامج أو نص برمجي لديك على جهاز الكمبيوتر الخاص بك.
وأخيرًا
النصيحة الأخيرة هي استخدام أداة systemd-analyze مع خيار التقويم الخاص بها للتحقق من التواريخ والأوقات وتطبيعها لاستخدامها في عبارات OnCalendar في ملف المؤقت الخاص بك.
على سبيل المثال، لتشغيل مؤقت في الساعة 13:15 كل يوم، قم بتوفير الوقت في الأمر بتنسيق بسيط، واجعل systemd-analyze ينشئ الإصدار الطبيعي لك.
systemd-analyze calendar 13:15