انتقل إلى المحتوى
مولد تعبيرات الكرون

كرون تاب في لينكس

دليل كرون تاب: crontab -e وcrontab -l ومهام الكرون

كرون تاب (crontab) هو الملف، والأمر أيضًا، الذي يحفظ مهام الكرون الخاصة بك. يشرح هذا الدليل كل أوامر crontab، وصيغة ملف كرون تاب، ومكان الملفات في Ubuntu وDebian وRHEL وmacOS، وكيف تتأكد من تنفيذ المهمة، وكيف تصلح المهمة التي لا تعمل.

الفرق بين cron وcrontab ومهمة الكرون

ثلاث كلمات يخلط بينها كثيرون:

# minute hour day-of-month month day-of-week  command
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

تعمل هذه المهمة كل ليلة الساعة 2:30 صباحًا. أنشئ الجزء الخاص بالجدول باستخدام مولد تعبيرات الكرون، أو الصق سطرًا جاهزًا في مفسر تعبيرات الكرون لتتحقق منه.

أوامر crontab

الأمرماذا يفعل
crontab -eيفتح ملف كرون تاب الخاص بك في محرر نصوص، ويثبّته عند الحفظ. في المرة الأولى يبدأ بملف فارغ.
crontab -lيعرض محتوى ملف كرون تاب. إن لم يكن لديك ملف تظهر رسالة «no crontab for <user>».
crontab -rيحذف ملف كرون تاب بالكامل فورًا ودون أي سؤال.
crontab -riيطلب التأكيد قبل الحذف (يعمل الخيار -i مع -r في لينكس).
sudo crontab -u alice -lيعرض ملف مستخدم آخر. يعمل الخيار -u أيضًا مع -e و-r، ويحتاج صلاحيات الجذر.
crontab mycron.txtيستبدل ملف كرون تاب بمحتوى ملف آخر.
crontab -l > crontab.bakيحفظ نسخة احتياطية من ملف كرون تاب.

في معظم لوحات المفاتيح يقع الحرف r بجوار e، والأمر crontab -r يحذف كل المهام دون إمكانية التراجع. خذ نسخة احتياطية أولًا بالأمر crontab -l > ~/crontab.bak، واستعدها بالأمر crontab ~/crontab.bak.

كيف تنشئ مهمة كرون باستخدام crontab -e

  1. افتح ملف كرون تاب:
    crontab -e
    في المرة الأولى على Ubuntu أو Debian سيُطلب منك اختيار محرر، وnano هو الأسهل. يمكنك تغييره لاحقًا بالأمر select-editor، أو لمرة واحدة بالأمر EDITOR=nano crontab -e.
  2. أضف المهمة في سطر جديد: الجدول الزمني ثم الأمر. استخدم المسارات الكاملة ووجّه المخرجات إلى ملف سجل:
    */15 * * * * /home/alice/bin/sync.sh >> /home/alice/sync.log 2>&1
  3. احفظ واخرج. في nano اضغط Ctrl+O ثم Enter ثم Ctrl+X، وفي vim اكتب :wq. يتحقق crontab من الملف ويعرض crontab: installing new crontab. وإذا وُجد خطأ في الصيغة فسيخبرك ويعرض إعادة فتح المحرر، ولن يُثبَّت شيء حتى يصبح الملف صحيحًا.
  4. تأكّد من الحفظ بالأمر crontab -l. لا حاجة لإعادة تشغيل أي شيء، فـ cron يلاحظ التغيير خلال دقيقة.
  5. تأكّد من التنفيذ بعد أول موعد مجدول. راجع طريقة فحص سجلات الكرون أدناه.

صيغة ملف كرون تاب

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

هكذا يبدو ملف كرون تاب كامل لمستخدم:

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=""

# Back up the database every night at 2:30
30 2 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1

# Clear the cache every 15 minutes during office hours
*/15 9-17 * * 1-5 /usr/local/bin/clear-cache.sh

# Start the queue worker after every reboot
@reboot /usr/local/bin/start-worker.sh

السطر MAILTO="" يمنع cron من إرسال مخرجات كل مهمة بالبريد. فبدونه يرسل cron أي مخرجات إلى صاحب الملف إن كان خادم بريد مثبتًا، وإلا فإنها تضيع. وفي الحالتين يبقى تسجيل المخرجات في ملف هو الخيار الموثوق.

أين تُحفظ ملفات كرون تاب

المسارماذا يحتوي
/var/spool/cron/crontabs/<user>ملفات المستخدمين في Debian وUbuntu
/var/spool/cron/<user>ملفات المستخدمين في RHEL وCentOS وFedora وRocky وAlmaLinux
/etc/crontabملف كرون تاب الخاص بالنظام، وفيه عمود إضافي لاسم المستخدم
/etc/cron.d/ملفات نظام إضافية تضيفها الحزم أو أدوات الإعداد، بالصيغة نفسها
/etc/cron.daily/، /etc/cron.hourly/، /etc/cron.weekly/، /etc/cron.monthly/سكربتات يشغّلها run-parts (أو anacron) مرة كل ساعة أو يوم أو أسبوع أو شهر
/etc/cron.allow، /etc/cron.denyتحديد المستخدمين المسموح لهم باستخدام الأمر crontab

عدّل ملفات المستخدمين فقط بالأمر crontab -e، لأنه يتحقق من الصيغة ويضمن أن يعيد cron تحميل الملف. أما ملفات النظام فتُعدَّل مباشرة بصلاحيات الجذر، ويحتوي كل سطر فيها على اسم المستخدم بين الجدول والأمر:

# minute hour dom month dow user command
0 3 * * * root /usr/local/sbin/rotate-backups.sh

في Debian وUbuntu يتم تجاهل الملفات في /etc/cron.d/ والسكربتات في /etc/cron.daily/ وبقية المجلدات إذا احتوى اسمها على نقطة، لذا فالملف backup.sh لن يعمل هناك أبدًا، وسمّه backup. كما يجب أن تكون ملفات /etc/cron.d/ مملوكة للجذر وغير قابلة للكتابة من المجموعة أو الآخرين، وأن تكون السكربتات في المجلدات الأخرى قابلة للتنفيذ.

كيف تتأكد من تنفيذ مهمة الكرون

# Ubuntu and Debian
grep CRON /var/log/syslog
journalctl -u cron --since today

# RHEL, CentOS, Fedora, Rocky, AlmaLinux
sudo tail -n 50 /var/log/cron
journalctl -u crond --since today

# Is the cron service running?
systemctl status cron      # Debian / Ubuntu
systemctl status crond     # RHEL family

سطر السجل مثل CMD (/usr/local/bin/backup.sh) يثبت فقط أن cron بدأ تشغيل الأمر. أما نجاح السكربت فتجده في مخرجاته، ولهذا يوجّه كل مثال في هذه الصفحة مخرجاته إلى ملف سجل. إصدارات Debian الحديثة لا تثبّت rsyslog، لذلك قد لا يوجد الملف /var/log/syslog، فاستخدم journalctl بدلًا منه.

لماذا لا تعمل مهمة الكرون؟

راجع هذه القائمة بالترتيب، فأول ثلاثة أسباب تفسّر معظم الحالات.

لتختبر الأمر كما يشغّله cron، شغّله ببيئة شبه فارغة:

env -i HOME="$HOME" SHELL=/bin/sh PATH=/usr/bin:/bin /bin/sh -c '/usr/local/bin/backup.sh'

إذا فشل هنا فسيفشل مع cron أيضًا.

أمثلة على أسطر كرون تاب

سطر كرون تابيعمل
*/5 * * * * /usr/local/bin/check-site.shكل 5 دقائق.
0 * * * * /usr/local/bin/rotate-logs.shعند الدقيقة 0 من كل ساعة.
0 2 * * * /usr/local/bin/db-backup.shفي تمام الساعة 2:00 ص.
0 9 * * 1-5 /usr/local/bin/send-report.shفي تمام الساعة 9:00 ص، من الإثنين إلى الجمعة.
0 0 * * 0 find /tmp -type f -mtime +7 -deleteفي تمام الساعة 12:00 ص، يوم الأحد فقط.
0 0 1 * * /usr/local/bin/monthly-invoice.shفي تمام الساعة 12:00 ص، في اليوم 1 من الشهر.
@reboot /usr/local/bin/start-worker.shمرة واحدة عند بدء تشغيل النظام (خدمة cron).

مزيد من الجداول الجاهزة في أمثلة تعبيرات الكرون.

كرون تاب في macOS

لا يزال macOS يتضمن cron، ويعمل الأمر crontab -e كما في لينكس. لكن Apple توصي باستخدام launchd، وفي الإصدارات الحديثة لا يستطيع cron قراءة المجلدات المحمية مثل سطح المكتب والمستندات حتى تمنح /usr/sbin/cron صلاحية «الوصول الكامل إلى القرص» من إعدادات النظام ← الخصوصية والأمن.

cron أم مؤقتات systemd؟

توفر معظم توزيعات لينكس أيضًا مؤقتات systemd (systemctl list-timers). فهي تسجّل كل تشغيل في سجل journal، ويمكنها تعويض المواعيد الفائتة أثناء إيقاف الجهاز (Persistent=true)، ولا تبدأ نسخة ثانية ما دامت الأولى تعمل. ومع ذلك يبقى cron الخيار الأسرع لمهمة من سطر واحد، وصيغة جدوله مستخدمة خارج لينكس أيضًا، من Kubernetes إلى GitHub Actions.

الأسئلة الشائعة

ماذا يفعل الأمر crontab -e؟

يفتح ملف كرون تاب الخاص بك في محرر نصوص (المحدد في VISUAL أو EDITOR)، وعند الحفظ والخروج يتحقق من الصيغة ثم يثبّت الملف. وإن لم يكن لديك ملف بعد فإنه يبدأ بملف فارغ.

كيف أعرض كل مهام الكرون؟

مهامك أنت: crontab -l. مهام مستخدم آخر: sudo crontab -l -u alice. ولكل المستخدمين استخدم حلقة: for u in $(cut -d: -f1 /etc/passwd); do sudo crontab -l -u "$u" 2>/dev/null; done، ثم راجع أيضًا /etc/crontab و/etc/cron.d/ ومجلدات /etc/cron.*.

كيف أحذف مهمة كرون واحدة؟

نفّذ crontab -e، واحذف سطر المهمة (أو حوّله إلى تعليق بالرمز #) ثم احفظ. لا تستخدم crontab -r لهذا الغرض، فهو يحذف كل المهام في الملف.

هل أحتاج إلى إعادة تشغيل cron بعد تعديل الملف؟

لا. يفحص cron الملفات المعدّلة كل دقيقة، لذلك تُلتقط المهام المضافة بالأمر crontab -e أو في /etc/crontab و/etc/cron.d/ تلقائيًا.

كيف أغيّر محرر crontab -e؟

في Ubuntu وDebian نفّذ select-editor. وفي غيرهما حدّد المتغير EDITOR (أو VISUAL)، مثل export EDITOR=nano في الملف ~/.bashrc، أو لمرة واحدة: EDITOR=nano crontab -e.

كيف أشغّل مهمة كرون بصلاحيات الجذر؟

عدّل ملف المستخدم root بالأمر sudo crontab -e، أو أضف ملفًا إلى /etc/cron.d/ تذكر أسطره root اسمًا للمستخدم، مثل 0 3 * * * root /usr/local/sbin/cleanup.

أين يوجد ملف كرون تاب؟

ملفات المستخدمين في /var/spool/cron/crontabs/ على Debian وUbuntu، وفي /var/spool/cron/ على الأنظمة المبنية على RHEL. أما ملف النظام فهو /etc/crontab، مع ملفات إضافية في /etc/cron.d/. عدّل ملفك بالأمر crontab -e بدلًا من فتح الملف مباشرة.

أدوات وأدلة ذات صلة