cron - برنامج لتشغيل الأوامر المجدولة (Vixie Cron)
الملخص
cron [-f] [-l] [-L loglevel] [-n fqdn] [-x debugflags]
cron [-N]
الوصف
يتم استدعاء cron مباشرة بواسطة systemd(1) عند الدخول إلى مستويات التشغيل متعددة المستخدمين.
الخيارات
-f
البقاء في وضع المقدمة، وعدم التشغيل كعملية خلفية.
-l
تمكين الأسماء المتوافقة مع LSB للملفات الموجودة في /etc/cron.d. ومع ذلك، لا يؤثر هذا الإعداد على تحليل الملفات الموجودة في /etc/cron.hourly أو /etc/cron.daily أو /etc/cron.weekly أو /etc/cron.monthly.
-n fqdn
تضمين FQDN في الموضوع عند إرسال رسائل البريد الإلكتروني. افتراضيًا، سيقوم cron باختصار اسم المضيف.
-N
تشغيل مهام cron الآن، على الفور، ثم الخروج. هذا الخيار مفيد لإجراء الاختبارات.
-L loglevel
أخبر cron بما يجب تسجيله حول المهام (يتم تسجيل الأخطاء بغض النظر عن هذه القيمة) كمجموع القيم التالية:
1 سيقوم بتسجيل بدء جميع مهام cron
2 سيقوم بتسجيل نهاية جميع مهام cron
4 سيقوم بتسجيل جميع المهام الفاشلة (حالة الخروج ≠ 0)
8 سيقوم بتسجيل رقم العملية لجميع مهام cron
افتراضيًا، يتم تسجيل بدء جميع المهام (1). سيتم تعطيل التسجيل إذا تم تعيين loglevel على صفر (0). ستحدد القيمة خمسة عشر (15) جميع الخيارات.
-x debugflags
أخبر cron بأن يكون أكثر تفصيلاً وإخراج معلومات التصحيح؛ debugflags هو مجموع هذه القيم:
1 "ext": ...
2 "sch": ...
4 "proc": ...
8 "pars": ...
16 "load": ..
32 "misc": ...
64 "test": ...
128 "bit": ...
ملاحظات
يبحث cron في منطقة التخزين المؤقت الخاصة به (/var/spool/cron/crontabs/) عن ملفات crontab (والتي تحمل أسماء الحسابات الموجودة في /etc/passwd)؛ يتم تحميل ملفات crontab التي يتم العثور عليها في الذاكرة. لاحظ أنه لا ينبغي الوصول إلى ملفات crontab في هذا الدليل مباشرةً - يجب استخدام الأمر crontab(1) للوصول إليها وتحديثها.
يقرأ cron أيضًا /etc/crontab، وهو بتنسيق مختلف قليلاً (انظر crontab(5)). في Debian، يتم تحديد محتوى /etc/crontab لتشغيل البرامج الموجودة في /etc/cron.hourly و /etc/cron.daily و /etc/cron.weekly و /etc/cron.monthly. هذا التكوين خاص بـ Debian، راجع الملاحظة الموجودة تحت DEBIAN SPECIFIC أدناه.
بالإضافة إلى ذلك، في Debian، يقرأ cron الملفات الموجودة في الدليل /etc/cron.d. يعامل cron الملفات الموجودة في /etc/cron.d بنفس الطريقة التي يعامل بها ملف /etc/crontab (فهي تتبع التنسيق الخاص بهذا الملف، أي أنها تتضمن حقل المستخدم). ومع ذلك، فهي مستقلة عن /etc/crontab: على سبيل المثال، لا ترث إعدادات متغيرات البيئة منه. هذا التغيير خاص بـ Debian، راجع الملاحظة الموجودة تحت DEBIAN SPECIFIC أدناه.
مثل /etc/crontab، تتم مراقبة الملفات الموجودة في الدليل /etc/cron.d بحثًا عن التغييرات. يمكن لمسؤول النظام إنشاء مهام cron في /etc/cron.d/ بأسماء ملفات مثل "local" أو "local-foo".
يجب أن يكون ملفا `/etc/crontab` والملفات الموجودة في `/etc/cron.d` مملوكين للمستخدم `root`، ولا يجب أن يكونا قابلين للكتابة من قبل مجموعة أو مستخدمين آخرين. على عكس مجلد التخزين المؤقت، يمكن أن تكون الملفات الموجودة تحت `/etc/cron.d` أو الملفات الموجودة تحت `/etc/cron.hourly`، `/etc/cron.daily`، `/etc/cron.weekly` و `/etc/cron.monthly` روابط رمزية أيضًا، شريطة أن يكون كل من الرابط الرمزي والملف الذي يشير إليه مملوكين للمستخدم `root`. لا تحتاج الملفات الموجودة تحت `/etc/cron.d` إلى أن تكون قابلة للتنفيذ، بينما تحتاج الملفات الموجودة تحت `/etc/cron.hourly`، `/etc/cron.daily`، `/etc/cron.weekly` و `/etc/cron.monthly` إلى ذلك، لأنها يتم تشغيلها بواسطة الأمر `run-parts` (راجع `run-parts(8)` لمزيد من المعلومات).
يقوم برنامج `cron` بالاستيقاظ كل دقيقة، وفحص جميع ملفات `crontab` المخزنة، والتحقق من كل أمر لمعرفة ما إذا كان يجب تشغيله في الدقيقة الحالية. عند تنفيذ الأوامر، يتم إرسال أي مخرجات عبر البريد الإلكتروني إلى مالك ملف `crontab` (أو إلى المستخدم المحدد في متغير البيئة `MAILTO` في ملف `crontab`، إذا كان موجودًا) من قبل مالك ملف `crontab` (أو من عنوان البريد الإلكتروني المحدد في متغير البيئة `MAILFROM` في ملف `crontab`، إذا كان موجودًا). يتم تغيير اسم نسخ `cron` التي تقوم بتشغيل هذه العمليات إلى أحرف كبيرة، كما سيظهر في سجل النظام و [ps]({filename}../../ps)(1).
بالإضافة إلى ذلك، يتحقق `cron` كل دقيقة لمعرفة ما إذا كان وقت تعديل مجلد التخزين المؤقت (أو وقت تعديل ملف `/etc/crontab`) قد تغير، وإذا كان الأمر كذلك، فسيقوم `cron` بفحص وقت تعديل جميع ملفات `crontab` وإعادة تحميل تلك التي تغيرت. وبالتالي، لا يحتاج `cron` إلى إعادة التشغيل في كل مرة يتم فيها تعديل ملف `crontab`. لاحظ أن الأمر `crontab` يقوم بتحديث وقت تعديل مجلد التخزين المؤقت في كل مرة يتم فيها تغيير ملف `crontab`.
توجد اعتبارات خاصة عندما يتم تغيير الساعة بأقل من 3 ساعات، على سبيل المثال في بداية ونهاية التوقيت الصيفي. إذا تحرك الوقت إلى الأمام، فسيتم تشغيل المهام التي كان من المفترض أن يتم تشغيلها في الوقت الذي تم تخطيه بعد ذلك مباشرة. على العكس من ذلك، إذا تحرك الوقت إلى الخلف بأقل من 3 ساعات، فلن يتم إعادة تشغيل المهام التي تقع في الوقت المتكرر.
تؤثر هذه التغييرات فقط على المهام التي تعمل في وقت معين (وليست محددة كـ `@hourly`، ولا تحتوي على `*` في تحديد الساعة أو الدقيقة). يتم تشغيل المهام التي يتم تحديدها باستخدام أحرف البدل بناءً على الوقت الجديد على الفور.
تعتبر تغييرات الساعة التي تزيد عن 3 ساعات بمثابة تصحيحات للساعة، ويتم استخدام الوقت الجديد على الفور.
يسجل `cron` إجراءاته في مرفق سجل النظام `cron`، ويمكن التحكم في التسجيل باستخدام مرفق `syslogd(8)` القياسي.
البيئة
إذا تم تكوينه في `/etc/default/cron` في أنظمة Debian، فيمكن إدارة إعدادات تحديد موقع برنامج `cron` من خلال استخدام `/etc/environment` أو من خلال استخدام `/etc/default/locale`، حيث تكون القيم الموجودة في الملف الأخير لها الأسبقية على القيم الموجودة في الملف الأول. تتم قراءة هذه الملفات وسيتم استخدامها لإعداد متغيرات البيئة `LANG` و `LC_ALL` و `LC_CTYPE`. ثم يتم استخدام هذه المتغيرات لتعيين مجموعة أحرف الرسائل، والتي تكون افتراضيًا `C`.
لا يؤثر هذا على بيئة المهام التي تعمل ضمن cron. لمزيد من المعلومات حول كيفية تعديل بيئة المهام، راجع crontab(5).
سيستخدم البرنامج الشيطاني، إذا كان موجودًا، التعريف من /etc/localtime للمنطقة الزمنية.
يمكن إعادة تعريف البيئة في تعريفات crontab الخاصة بالمستخدم، ولكن سيتعامل cron مع المهام في منطقة زمنية واحدة فقط.
خاص بـ DEBIAN
يقدم Debian بعض التغييرات على cron والتي لم تكن متاحة في الأصل في الإصدار الأساسي. التغييرات الأكثر أهمية التي تم تقديمها هي:
دعم /etc/cron.{hourly,daily,weekly,monthly} عبر /etc/crontab،
دعم /etc/cron.d (دليل الإضافات لملفات crontab الخاصة بالحزم)،
دعم PAM،
دعم SELinux،
دعم auditlog،
تغييرات وإصلاحات متعلقة بالتوقيت الصيفي والوقت،
SGID crontab(1) بدلاً من SUID root،
مواقع وأوامر خاصة بـ Debian،
تكوين خاص بـ Debian (/etc/default/cron)،
العديد من الميزات والإصلاحات الأصغر الأخرى.
يتم توفير الدعم لـ /etc/cron.hourly و /etc/cron.daily و /etc/cron.weekly و /etc/cron.monthly في Debian من خلال الإعداد الافتراضي لملف /etc/crontab (انظر المثال على مستوى النظام في crontab(5)). يحتوي ملف crontab الخاص بالنظام على أربعة مهام افتراضية: يتم تنفيذها كل ساعة وكل يوم وكل أسبوع وكل شهر. ستقوم كل مهمة من هذه المهام بتنفيذ run-parts(8) مع توفير كل واحد من هذه الأدلة كمعامل. يتم تعطيل هذه المهام إذا تم تثبيت anacron(8) (باستثناء المهمة التي يتم تنفيذها كل ساعة) لمنع التعارضات بين البرنامجين الشيطانيين.
كما هو موضح أعلاه، يجب أن تجتاز الملفات الموجودة في هذه الأدلة بعض عمليات التحقق من الصحة، بما في ذلك ما يلي: يجب أن تكون قابلة للتنفيذ، وأن تكون مملوكة للمستخدم root، وألا تكون قابلة للكتابة بواسطة المجموعة أو المستخدمين الآخرين، وإذا كانت روابط رمزية، فيجب أن تشير إلى ملفات مملوكة للمستخدم root. بالإضافة إلى ذلك، يجب أن تتوافق أسماء الملفات مع متطلبات أسماء الملفات الخاصة بـ run-parts(8): يجب أن تتكون بالكامل من أحرف وأرقام ويمكن أن تحتوي فقط على علامات الترقيم الخاصة "underscore" ("_") و "hyphen" ("-"). أي ملف لا يفي بهذه المتطلبات لن يتم تنفيذه بواسطة run-parts(8). على سبيل المثال، سيتم تجاهل أي ملف يحتوي على نقاط. يتم ذلك لمنع cron من تشغيل أي من الملفات التي تتركها نظام إدارة حزم Debian عند التعامل مع الملفات في /etc/cron.d/ كملفات تكوين (أي الملفات التي تنتهي بـ .dpkg-dist و .dpkg-orig و .dpkg-old و .dpkg-new).
يمكن استخدام هذه الميزة من قبل مسؤولي النظام والحزم لتضمين المهام التي سيتم تشغيلها على فترات محددة. يجب أن تحمل الملفات التي تم إنشاؤها بواسطة الحزم في هذه الأدلة اسم الحزمة التي توفرها.
يتم تضمين دعم /etc/cron.d في برنامج cron الشيطاني نفسه، والذي يتعامل مع هذا الموقع كملف crontab الخاص بالنظام. يمكن أن يحتوي هذا الدليل على أي ملف يحدد المهام باتباع التنسيق المستخدم في /etc/crontab، أي على عكس ملف crontab الخاص بالمستخدم، يجب أن توفر هذه الملفات اسم المستخدم الذي سيتم تشغيل المهمة به في تعريف المهمة.
يجب أن تكون الملفات الموجودة في هذا الدليل مملوكة للمستخدم الجذر، ولا تحتاج إلى أن تكون قابلة للتنفيذ (فهي ملفات تكوين، تمامًا مثل /etc/crontab)، ويجب أن تلتزم بنفس اصطلاح التسمية المستخدم بواسطة run-parts(8): يجب أن تتكون فقط من أحرف كبيرة وصغيرة، وأرقام، وشرطات سفلية، وواصلات. وهذا يعني أنه لا يمكن أن تحتوي على أي نقاط. إذا تم تحديد الخيار -l في برنامج cron (يمكن إعداد هذا الخيار من خلال /etc/default/cron، راجع أدناه)، فيجب أن تلتزم بمواصفات مساحة اسم LSB تمامًا كما هو الحال في الخيار --lsbsysinit في run-parts(8).
الغرض المقصود من هذه الميزة هو السماح للحزم التي تتطلب تحكمًا دقيقًا في جدولتها أكثر من الدلائل /etc/cron.{hourly,daily,weekly,monthly} بإضافة ملف crontab إلى /etc/cron.d. يجب تسمية هذه الملفات باسم الحزمة التي توفرها.
يتم التحكم في التكوين الافتراضي لبرنامج cron بواسطة /etc/default/cron، والذي يتم قراءته بواسطة البرنامج النصي init.d الذي يقوم بتشغيل برنامج cron. يحدد هذا الملف ما إذا كان برنامج cron سيقرأ متغيرات البيئة الخاصة بالنظام، ويجعل من الممكن إضافة خيارات إضافية إلى برنامج cron قبل تنفيذه، إما لتكوين تسجيله أو لتحديد كيفية تعامله مع الملفات الموجودة في /etc/cron.d.
انظر أيضًا
crontab(1)، crontab(5)، run-parts(8)
المؤلفون
بول فيكسي <_> كتب هذه الصفحة اليدوية (1994).
ستيف غرينلاند <_> قام بصيانة الحزمة (1996-2005).
خافيير فرنانديز-سانجوينو بينا <_> قام بصيانة الحزمة (2005-2014).
كريستيان كاستنر <_> قام بصيانة الحزمة (2010-2016).
جورج خازنادار <_> قام بصيانة الحزمة (2022-2024).
حقوق النشر
حقوق النشر © 1994 بول فيكسي
يُوزَّع بحرية، باستثناء: لا تقم بإزالة اسمي من المصدر أو الوثائق (لا تنسب الفضل إلى عملي)، ضع علامة على تغييراتك (لا تلقِ باللوم عليّ في الأخطاء المحتملة)، لا تقم بتغيير أو إزالة هذا الإشعار. يمكن بيعه إذا تم توفير الكود المصدري القابل للإنشاء للمشتري. لا يتم تضمين أي ضمان من أي نوع، صريح أو ضمني، مع هذا البرنامج؛ استخدمه على مسؤوليتك الخاصة، وتتحمل مسؤولية الأضرار (إن وجدت) التي تلحق بأي شخص نتيجة لاستخدام هذا البرنامج.
منذ عام 1994، تم إجراء العديد من التعديلات على هذه الصفحة اليدوية، والتي أعدها مطورو Debian الذين قاموا بصيانة برنامج cron؛ أعلاه قائمة مختصرة، ويمكن العثور على مزيد من المعلومات في الملف /usr/share/doc/cron/copyright.