cron زمان‌بند کلاسیک یونیکس است و در اوبونتو از طریق crontab برای هر کاربر در دسترس است. راهنمای جامعهٔ اوبونتو (CronHowto) فرمان‌های crontab -e، -l و -r، پنج فیلد زمانی، میان‌برهایی مثل @reboot و تفاوت با فایل‌های /etc/cron.d را پوشش می‌دهد. این آموزش همان مبانی را برای زمان‌بندی اسکریپت از صفر مرتب می‌کند.

پیش‌نیازها

  • کاربر درست: جدول هر کاربر جداست؛ کارهای سیستمی root را با sudo crontab -e بنویسید.
  • اسکریپت قابل اجرا: یک‌بار دستی با همان کاربر اسکریپت را اجرا کنید تا قبل از cron خطا نماند.
  • مسیر مطلق: محیط cron معمولاً PATH کوتاهی دارد؛ باینری و اسکریپت را با مسیر کامل بنویسید.
  • بک‌آپ قبل از حذف: crontab -r کل جدول را بدون تأیید برمی‌گرداند؛ اول با -l خروجی بگیرید.
آموزش crontab در اوبونتو؛ زمان‌بندی کارها از صفر
آموزش crontab در اوبونتو؛ زمان‌بندی کارها از صفر

ویرایش جدول و پنج فیلد

  1. جدول کاربر جاری را باز کنید:

crontab -e

  1. هر خط زمان‌بندی‌شده پنج فیلد دارد: دقیقه، ساعت، روز ماه، ماه، روز هفته، سپس فرمان. نمونهٔ دوشنبه تا جمعه ساعت ۰۸:۳۰:

30 8 * * 1-5 /usr/local/bin/backup.sh

  1. ذخیره و خروج از ویرایشگر را انجام دهید؛ سپس فهرست را ببینید:

crontab -l

  1. حذف کامل جدول فقط وقتی مطمئن هستید:

crontab -r

نکته: خطای پرتکرار مبتدی این است که اسکریپت در شل تعاملی کار می‌کند ولی در cron نه — معمولاً به‌خاطر PATH، پوشهٔ کاری یا وابستگی به متغیرهایی که فقط در .bashrc تعریف شده‌اند. متغیرهایی مثل PATH= و MAILTO= در ابتدای crontab مجازند.

میان‌برهای @ و تفاوت با /etc/cron.d

آموزش crontab در اوبونتو؛ زمان‌بندی کارها از صفر
آموزش crontab در اوبونتو؛ زمان‌بندی کارها از صفر

به‌جای پنج فیلد می‌توانید از واژه‌های خاص استفاده کنید: @reboot، @hourly، @daily، @weekly، @monthly، @yearly.

  1. نمونهٔ اجرا پس از هر بوت:

@reboot /usr/local/bin/start-tunnel.sh

  1. فایل‌های داخل /etc/cron.d برای بسته‌های سیستمی‌اند و معمولاً فیلد نام کاربر هم دارند؛ آن‌ها را با crontab کاربر قاطی نکنید تا کار دو بار اجرا نشود.
  2. دسترسی کاربران با cron.allow و cron.deny کنترل می‌شود.

هشدار: نویسهٔ % در فرمان برای cron معنای خط جدید دارد؛ اگر درصد لفظی لازم است باید escape شود. لاگ اجرا روی اوبونتو اغلب در syslog با برچسب CRON دیده می‌شود. روز هفته هم عددی (۰–۷؛ ۰ و ۷ معمولاً یکشنبه) و هم نام کوتاه انگلیسی پذیرفته می‌شود.

چک‌لیست قبل از زمان‌بندی

آموزش crontab در اوبونتو؛ زمان‌بندی کارها از صفر
آموزش crontab در اوبونتو؛ زمان‌بندی کارها از صفر
  1. اسکریپت را یک‌بار دستی با همان کاربر اجرا کنید.
  2. مسیرها را مطلق بنویسید؛ خروجی را به فایل لاگ با مسیر مطلق هدایت کنید.
  3. با crontab -l از ذخیره مطمئن شوید.
  4. پس از موعد اول، syslog را برای خطا چک کنید.
  5. بین user crontab و /etc/cron.d فقط یک محل انتخاب کنید.
  6. برای اسکریپت‌های طولانی، قفل ساده با flock جلوی هم‌پوشانی دو اجرا را می‌گیرد.

اولین جاب را معمولاً با پنج فیلد می‌نویسید یا با @daily؟