ابزار رایگان · بدون ثبت‌نام

فقط در مرورگر شما؛ چیزی ارسال نمی‌شود

ترجمهٔ Cron به فارسی و تست زمان‌بندی کرون جاب

عبارت cron را بنویسید یا خط crontab را بچسبانید تا معنای هر بخش را به فارسی ببینید و پنج زمان اجرای بعدی را به وقت تهران (Asia/Tehran) یا UTC بررسی کنید. خطاهای رایج، مثل عدد خارج از بازه یا قالب شش‌بخشی Quartz، همان لحظه با دلیل گفته می‌شوند.

  1. · دقیقه 0–59
  2. · ساعت 0–23
  3. · روز ماه 1–31
  4. · ماه 1–12
  5. · روز هفته 0–7

پنج بخش با فاصله: * هر مقدار، 1,15 فهرست، 1-5 بازه، */10 گام. نام‌های MON و JAN و برچسب‌هایی مثل @daily هم پذیرفته می‌شوند. کلید Esc ورودی را پاک می‌کند.

معنی به فارسی

پنج اجرای بعدی

منطقهٔ زمانی نمایش

منطقهٔ زمانی: · ساعت فعلی در این منطقه

این برچسب به ساعت وابسته نیست؛ کار با هر بار روشن شدن سرور اجرا می‌شود.

cron با ساعت و منطقهٔ زمانی خود سرور کار می‌کند. اگر timedatectl روی سرورتان UTC نشان می‌دهد، زمان‌ها را با گزینهٔ UTC ببینید؛ تهران سه ساعت و نیم جلوتر از UTC است.

نمونه‌های آماده

راهنمای کامل

راهنمای کامل Cron و crontab برای مدیران سرور لینوکس

Cron قدیمی‌ترین و هنوز پرکاربردترین زمان‌بند لینوکس است: بکاپ شبانه، پاک‌سازی لاگ، تمدید گواهی، ارسال گزارش و صدها کار تکراری دیگر با یک خط در crontab اجرا می‌شوند. اما همین یک خط اگر اشتباه نوشته شود، یا هرگز اجرا نمی‌شود یا هر دقیقه اجرا می‌شود و سرور را از پا می‌اندازد. این راهنما نحو cron را با مثال توضیح می‌دهد، تله‌های منطقهٔ زمانی و محیط اجرا را باز می‌کند و نشان می‌دهد کرون جاب را چطور ایمن و قابل‌پیگیری نگه دارید.

۱۱ بخش حدود ۹ دقیقه مطالعه

فهرست مطالب

Cron چیست و کرون جاب چطور کار می‌کند؟

Cron یک سرویس پس‌زمینه است که روی تقریباً همهٔ توزیع‌های لینوکس از ابتدا نصب است و هر دقیقه یک بار جدول زمان‌بندی را بررسی می‌کند. هر خط این جدول که به آن کرون جاب می‌گویند، دو بخش دارد: یک عبارت زمانی پنج‌بخشی و دستوری که باید در آن زمان اجرا شود. اگر دقیقهٔ فعلی با عبارت بخواند، Cron دستور را با دسترسی همان کاربری اجرا می‌کند که جدول به او تعلق دارد.

هر کاربر جدول شخصی خودش را دارد که با دستور crontab ویرایش می‌شود. علاوه بر آن فایل سیستمی ⁦/etc/crontab⁩ و پوشهٔ ⁦/etc/cron.d⁩ وجود دارند که یک ستون اضافه برای نام کاربر اجراکننده دارند، و پوشه‌هایی مثل cron.daily و cron.weekly که هر اسکریپت داخلشان روزانه یا هفتگی اجرا می‌شود. روی سرور ابری ایران‌کلاد با هر توزیع لینوکسی، Cron آمادهٔ استفاده است و فقط کافی است با SSH وارد شوید.

نحو عبارت cron: پنج بخش و چهار نماد

عبارت cron از چپ به راست این پنج بخش را دارد: دقیقه از ۰ تا ۵۹، ساعت از ۰ تا ۲۳، روز ماه از ۱ تا ۳۱، ماه از ۱ تا ۱۲ و روز هفته از ۰ تا ۶ که صفر یکشنبه است و در بیشتر پیاده‌سازی‌ها عدد ۷ هم یکشنبه حساب می‌شود. دقت کنید که ماه‌ها میلادی‌اند، نه شمسی؛ «اول هر ماه» در cron یعنی اول ژانویه، فوریه و غیره، نه اول فروردین.

در هر بخش چهار نماد به کار می‌رود. ستاره یعنی «هر مقدار». کاما فهرست می‌سازد، مثل 1,15 برای روز اول و پانزدهم. خط‌تیره بازه می‌سازد، مثل ⁦1-5⁩ برای دوشنبه تا جمعه. اسلش گام تعیین می‌کند، مثل ⁦*/10⁩ برای هر ده دقیقه یا ⁦8-18/2⁩ برای هر دو ساعت در ساعات کاری. ابزار بالای صفحه همهٔ این نمادها را می‌فهمد و ترکیبشان را به فارسی توضیح می‌دهد؛ نام‌های سه‌حرفی انگلیسی مثل MON-FRI یا JAN و برچسب‌هایی مثل @daily هم پذیرفته می‌شوند.

یک نکتهٔ مهم برای کاربران ایرانی: هفتهٔ کاری ما از شنبه شروع می‌شود، اما در cron عدد ۱ دوشنبه است. برای «شنبه تا چهارشنبه» باید ⁦6,0-3⁩ بنویسید، نه ⁦1-5⁩. نمونهٔ «ساعات کاری شنبه تا چهارشنبه» در ابزار همین را نشان می‌دهد.

عبارتمعنی
*/15 * * * *هر ۱۵ دقیقه
0 3 * * *هر روز ساعت ۳ بامداد
30 2 * * 6شنبه‌ها ساعت ۲:۳۰ بامداد
0 9-17 * * 1-5سر هر ساعت از ۹ تا ۱۷، دوشنبه تا جمعه
0 0 1 * *نیمه‌شب روز اول هر ماه میلادی
0 4 * * 0یکشنبه‌ها ساعت ۴ بامداد

بازگشت به فهرست مطالب

چطور با ابزار ترجمهٔ Cron زمان‌بندی را تست کنیم؟

عبارت را در کادر بنویسید، کل خط crontab را بچسبانید یا یکی از نمونه‌های آماده را بزنید. ابزار همان لحظه یک جملهٔ فارسی برای کل زمان‌بندی می‌سازد، هر پنج بخش را جداگانه توضیح می‌دهد و پنج زمان اجرای بعدی را با تاریخ شمسی، تاریخ میلادی و فاصله تا الان فهرست می‌کند. این زمان‌ها مهم‌ترین بخش ابزار است: بیشتر اشتباه‌ها وقتی آشکار می‌شوند که ببینید اجرای بعدی، برخلاف انتظار، فردا صبح نیست و سه ماه دیگر است.

اگر عبارت ایرادی داشته باشد، دلیلش دقیق گفته می‌شود و بخش اشتباه در ردیف پنج‌خانه‌ای زیر کادر قرمز می‌شود: عدد خارج از بازه مثل دقیقهٔ ۷۵، بازهٔ برعکس مثل ⁦5-1⁩، گام صفر، تعداد بخش کمتر از پنج یا قالب شش‌بخشی Quartz. اگر عبارت از نظر نحو درست باشد اما هرگز اجرا نشود، مثل روز ۳۰ فوریه، ابزار همین را صریح می‌گوید. برای اشتباه‌های رایج، مثل ستاره در بخش دقیقه که کار را شصت بار در ساعت اجرا می‌کند، هشدار جداگانه نمایش داده می‌شود.

  • عبارت یا کل خط را از crontab کپی کنید و در کادر بچسبانید؛ بخش دستور خودکار کنار گذاشته می‌شود.
  • ترجمهٔ فارسی هر بخش را بخوانید و با نیازتان مقایسه کنید.
  • پنج زمان اجرای بعدی را ببینید؛ اگر عبارت هرگز اجرا نشود، ابزار دلیلش را می‌گوید.
  • منطقهٔ زمانی را با منطقهٔ زمانی سرور یکی کنید: وقت تهران یا UTC.
  • با «کپی لینک این نتیجه» همان عبارت را برای همکارتان بفرستید.

بازگشت به فهرست مطالب

منطقهٔ زمانی سرور؛ مهم‌ترین تلهٔ کرون جاب

Cron زمان را بر اساس ساعت و منطقهٔ زمانی خود سرور می‌خواند، نه ساعت کامپیوتر شما. بسیاری از ایمیج‌های لینوکس به‌طور پیش‌فرض روی UTC تنظیم شده‌اند و تهران سه ساعت و نیم جلوتر از UTC است. یعنی عبارت 0 3 * * * روی سرور UTC، ساعت ۶:۳۰ صبح به وقت تهران اجرا می‌شود؛ دقیقاً زمانی که شاید بار سایت شروع به بالا رفتن کرده است.

پیش از نوشتن هر کرون جاب، با دستور timedatectl منطقهٔ زمانی را ببینید. اگر می‌خواهید سرور به وقت تهران کار کند، از timedatectl set-timezone Asia/Tehran استفاده کنید و سرویس cron را یک بار راه‌اندازی مجدد کنید. ابزار این صفحه زمان‌های بعدی را به‌طور پیش‌فرض به وقت تهران (Asia/Tehran، یعنی UTC+03:30) نشان می‌دهد؛ اگر سرورتان روی UTC است، گزینهٔ UTC را بزنید تا همان ساعتی را ببینید که cron روی سرور اجرا می‌کند. برخی پیاده‌سازی‌ها مثل cronie متغیر CRON_TZ را هم می‌پذیرند، اما روی همهٔ توزیع‌ها در دسترس نیست.

بازگشت به فهرست مطالب

دستورهای کاربردی crontab و systemd timer در لینوکس

مدیریت روزمرهٔ کرون جاب با چند دستور انجام می‌شود. مراقب crontab -r باشید: کل جدول را بدون پرسیدن پاک می‌کند و روی کیبورد درست کنار e است. عادت خوب این است که قبل از هر ویرایش، با crontab -l از جدول نسخهٔ پشتیبان بگیرید.

در توزیع‌های جدید systemd timer جایگزین قدرتمندتری برای cron است: خروجی هر اجرا در journal ثبت می‌شود، اجرای جاافتاده هنگام خاموشی سرور با گزینهٔ Persistent جبران می‌شود و می‌توان برای کار محدودیت حافظه و CPU تعیین کرد. برای کارهای ساده cron هنوز سریع‌ترین گزینه است، اما برای کارهای حیاتی systemd timer را جدی بگیرید.

کاردستور
ویرایش جدول کاربر فعلیcrontab -e
نمایش جدولcrontab -l
پشتیبان از جدولcrontab -l > ~/crontab.bak
جدول یک کاربر دیگر (با sudo)sudo crontab -u www-data -l
لاگ اجرای cron در اوبونتوgrep CRON /var/log/syslog
لاگ از طریق journaljournalctl -u cron --since today
فهرست systemd timer‌هاsystemctl list-timers

بازگشت به فهرست مطالب

چرا کرون جاب من اجرا نمی‌شود؟ خطاهای رایج

رایج‌ترین دلیل، محیط اجرای متفاوت است. Cron دستور را با یک PATH بسیار محدود و بدون متغیرهای پروفایل شما اجرا می‌کند؛ دستوری که در ترمینال کار می‌کند، در cron با «command not found» شکست می‌خورد. همیشه مسیر کامل برنامه‌ها را بنویسید، مثلاً ⁦/usr/bin/php⁩ به‌جای php، یا PATH را در ابتدای crontab تعریف کنید.

دلیل دوم نویسهٔ درصد است. در crontab علامت % معنای خاص دارد و به خط جدید تبدیل می‌شود، پس دستوری مثل date +%F باید با بک‌اسلش نوشته شود: date +\%F. دلیل سوم هم بی‌خبری است: خروجی و خطاهای کار به جایی نمی‌روند و شما نمی‌فهمید چه شده. خروجی را با ⁦>> /var/log/myjob.log 2>&1⁩ در یک فایل ذخیره کنید.

  • دستور در ترمینال کار می‌کند و در cron نه: مسیر کامل برنامه‌ها را بنویسید.
  • علامت % در دستور: آن را با بک‌اسلش escape کنید.
  • خط آخر crontab بدون خط جدید: برخی نسخه‌ها آن را نادیده می‌گیرند.
  • اسکریپت اجرایی نیست: chmod +x و خط shebang را بررسی کنید.
  • زمان اشتباه: منطقهٔ زمانی سرور را با timedatectl ببینید.
  • اجرای هم‌پوشان: کار قبلی هنوز تمام نشده و نسخهٔ بعدی شروع شده است.

بازگشت به فهرست مطالب

امنیت و پایداری کرون جاب‌ها

هر کرون جاب با دسترسی کاربر صاحب جدول اجرا می‌شود؛ پس کارهای ساده را در جدول root نگذارید و برای هر سرویس از کاربر خودش استفاده کنید. اسکریپتی که cron اجرا می‌کند نباید برای کاربران دیگر قابل‌نوشتن باشد، وگرنه هر کسی می‌تواند با ویرایش آن، دستور دلخواهش را با دسترسی بالا اجرا کند. رمزها و کلیدها را هم مستقیم در خط crontab ننویسید؛ آن‌ها را در فایل جداگانه با دسترسی 600 نگه دارید.

برای جلوگیری از اجرای هم‌زمان دو نسخه از یک کار طولانی، دستور را با flock بپیچید: flock -n /run/lock/backup.lock دستور اصلی. اگر نسخهٔ قبلی هنوز در حال اجراست، نسخهٔ جدید بی‌صدا کنار می‌کشد. کارهای سنگین را هم سر ساعت دقیق نگذارید؛ همهٔ سرورهای دنیا ساعت ۰۰:۰۰ کار سنگین شروع می‌کنند. دقیقه‌ای مثل ۱۷ یا ۴۳ را انتخاب کنید تا بار پخش شود. برای اطمینان از اینکه کار واقعاً اجرا شده، پایش را با ابزارهایی مثل Zabbix یا Prometheus به آن اضافه کنید.

بازگشت به فهرست مطالب

بکاپ زمان‌بندی‌شده با cron و API ایران‌کلاد

یکی از مهم‌ترین کاربردهای cron، بکاپ است. بکاپ سرور ابری در ایران‌کلاد به درخواست شما ساخته می‌شود و پنل برای آن زمان‌بندی داخلی ندارد، اما همهٔ عملیات بکاپ از طریق API هم در دسترس است. کافی است روی یک سیستم دیگر یک کرون جاب شبانه بگذارید که درخواست ساخت بکاپ را به API بفرستد. چون سی نسخهٔ آخر نگه‌داری می‌شود، بکاپ شبانه عملاً تاریخچه‌ای حدوداً یک‌ماهه می‌سازد.

ساخت کلید API و نمونهٔ درخواست در راهنمای شروع API آمده است؛ کلید را با کمترین دسترسی لازم بسازید و در فایل جدا نگه دارید. دیتابیس‌های مدیریت‌شده استثنا هستند و بکاپ روزانه‌شان خودکار گرفته می‌شود، پس برای آن‌ها کرون جاب جداگانه لازم نیست. اگر روی سرور خودتان دیتابیس دارید، دستور mysqldump یا pg_dump را در یک کرون جاب شبانه بگذارید و فایل خروجی را به فضای ذخیره‌سازی S3 منتقل کنید تا بکاپ روی همان سروری نماند که ممکن است از دست برود.

بازگشت به فهرست مطالب

cron در برابر جایگزین‌ها: systemd timer‏، CronJob و ابزارهای گردش‌کار

cron برای کار تکراری روی یک سرور کافی است، اما وقتی زیرساخت بزرگ‌تر می‌شود، گزینه‌های دیگر معنا پیدا می‌کنند. در کلاستر K3s، منبع CronJob همین نحو پنج‌بخشی را می‌پذیرد و کار را در یک پاد جدید اجرا می‌کند؛ پس عبارتی که اینجا تست کرده‌اید، مستقیم در فایل YAML قابل‌استفاده است. Jenkins هم در بخش تریگرهای زمانی همین قالب را با یک نماد H اضافه برای پخش بار استفاده می‌کند.

برای گردش‌کارهایی که چند سرویس را به هم وصل می‌کنند، مثل گرفتن گزارش از یک API و فرستادن آن به تلگرام، ابزارهای بصری مثل n8n راحت‌ترند و گرهٔ زمان‌بندی آن‌ها هم عبارت cron می‌پذیرد. جدول زیر خلاصهٔ انتخاب را نشان می‌دهد.

ابزارمناسب براینکتهٔ کلیدی
cronکارهای ساده روی یک سرورسریع و همه‌جا موجود، لاگ محدود
systemd timerکارهای حیاتی روی یک سرورلاگ در journal و جبران اجرای جاافتاده
CronJob در K3sکار در کلاستراجرای ایزوله و تلاش مجدد خودکار
n8n یا Jenkinsگردش‌کار چندمرحله‌ایرابط بصری و تاریخچهٔ اجرا

بازگشت به فهرست مطالب

cron لینوکس، Quartz و سرویس‌های ابری: چرا یک عبارت همه‌جا کار نمی‌کند؟

عبارت‌هایی که در اینترنت می‌بینید همه برای cron لینوکس نوشته نشده‌اند. کتابخانهٔ Quartz در جاوا و زمان‌بند Spring یک بخش ثانیه در ابتدا و گاهی بخش سال در انتها دارند، پس شش یا هفت بخش می‌گیرند؛ نمادهایی مثل ? برای «مهم نیست»، L برای «آخرین روز ماه»، W برای «نزدیک‌ترین روز کاری» و # برای «دومین جمعهٔ ماه» هم فقط در همان‌جا معنا دارند. اگر چنین عبارتی را در crontab بگذارید، cron آن را رد می‌کند یا رفتار غیرمنتظره نشان می‌دهد.

ابزار این صفحه قالب cron لینوکس (Vixie cron و cronie، همان که در اوبونتو، دبیان و توزیع‌های ردهت نصب است) را می‌سنجد و اگر عبارت شش‌بخشی یا نمادهای Quartz ببیند، به‌جای حدس زدن، صریح می‌گوید کدام بخش را حذف کنید. برای «آخرین روز ماه» در cron استاندارد راه مستقیم وجود ندارد؛ روش رایج این است که کار را روزهای ۲۸ تا ۳۱ زمان‌بندی کنید و در ابتدای دستور بررسی کنید فردا روز اول ماه باشد.

ویژگیcron لینوکسQuartz (جاوا)
تعداد بخشپنج بخش، از دقیقهشش یا هفت بخش، از ثانیه
روز هفته۰ تا ۷، صفر و هفت یکشنبه۱ تا ۷، یک یکشنبه
نمادهای ? L W #پشتیبانی نمی‌شودپشتیبانی می‌شود
گام بعد از عدد تنها مثل 5/15پذیرفته نمی‌شودپذیرفته می‌شود

بازگشت به فهرست مطالب

حریم خصوصی: این ابزار چه چیزی را ارسال می‌کند؟

ترجمهٔ عبارت و محاسبهٔ زمان‌های بعدی کاملاً در مرورگر شما و با جاوااسکریپت انجام می‌شود. عبارتی که وارد می‌کنید به سرور ایران‌کلاد فرستاده نمی‌شود و جایی ذخیره نمی‌شود؛ سرور فقط خود صفحه را تحویل می‌دهد. با این حال اگر خط کامل crontab را کپی می‌کنید، فقط بخش پنج‌بخشی زمان را در ابزار بچسبانید و دستور، مسیرها یا رمزهای همراه آن را وارد نکنید؛ ابزار به آن‌ها نیازی ندارد.

بازگشت به فهرست مطالب بازگشت به ابتدای راهنما

پرسش و پاسخ،  ۱۱ پرسش

سؤالات متداول

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

عبارت cron از چند بخش تشکیل می‌شود؟
از پنج بخش که با فاصله جدا می‌شوند: دقیقه، ساعت، روز ماه، ماه و روز هفته. دستور اجرایی بعد از این پنج بخش می‌آید.
آیا ماه‌ها در cron شمسی هستند؟
خیر. cron از تقویم میلادی استفاده می‌کند. «روز اول هر ماه» یعنی اول ژانویه، فوریه و غیره. برای کاری که باید اول هر ماه شمسی اجرا شود، اسکریپت باید خودش تاریخ شمسی را بررسی کند.
زمان‌های اجرای بعدی در این ابزار به چه وقتی است؟
به‌طور پیش‌فرض به وقت تهران (Asia/Tehran‏، UTC+03:30) و با یک کلیک به UTC. خود cron با منطقهٔ زمانی سرور کار می‌کند؛ اگر سرورتان روی UTC است، گزینهٔ UTC را انتخاب کنید تا ساعت واقعی اجرا را ببینید.
آیا این ابزار @daily و @reboot را پشتیبانی می‌کند؟
بله. @yearly، @monthly، @weekly، @daily، @midnight و @hourly به معادل پنج‌بخشی‌شان تبدیل و زمان‌های بعدی‌شان محاسبه می‌شود؛ مثلاً @daily همان 0 0 * * * است. @reboot زمان ثابتی ندارد و فقط هنگام هر بار روشن شدن سرور اجرا می‌شود، پس ابزار فقط معنایش را می‌گوید.
اگر روز ماه و روز هفته هر دو مشخص شوند، چه اتفاقی می‌افتد؟
اگر هیچ‌کدام با ستاره شروع نشوند، cron کار را در هر روزی اجرا می‌کند که یکی از دو شرط برقرار باشد، نه هر دو. اگر یکی با ستاره شروع شود، مثل ⁦*/2⁩، هر دو شرط باید برقرار باشد. ابزار با همین قاعده محاسبه می‌کند و هشدارش را هم نشان می‌دهد.
چرا کرون جاب من در ترمینال کار می‌کند ولی در cron نه؟
cron با PATH محدود و بدون متغیرهای پروفایل شما اجرا می‌شود. مسیر کامل برنامه‌ها را بنویسید، علامت % را escape کنید و خروجی را در یک فایل لاگ ذخیره کنید تا خطا را ببینید.
لاگ اجرای cron را کجا ببینم؟
در اوبونتو و دبیان با ⁦grep CRON /var/log/syslog⁩ یا ⁦journalctl -u cron⁩. در توزیع‌های خانوادهٔ ردهت سرویس crond نام دارد و لاگ آن در ⁦/var/log/cron⁩ است.
آیا عبارتی که وارد می‌کنم به سرور ارسال می‌شود؟
خیر. ترجمه و محاسبهٔ زمان‌ها در مرورگر شما انجام می‌شود و چیزی به سرور ایران‌کلاد فرستاده یا ذخیره نمی‌شود.
آیا می‌توانم بکاپ سرور ابری ایران‌کلاد را با cron زمان‌بندی کنم؟
بله. بکاپ سرور ابری از طریق API هم ساخته می‌شود؛ یک کرون جاب شبانه روی سیستم دیگر بگذارید که درخواست ساخت بکاپ را بفرستد. سی نسخهٔ آخر نگه‌داری می‌شود.
چطور جلوی اجرای هم‌زمان دو نسخه از یک کرون جاب را بگیرم؟
دستور را با flock -n و یک فایل قفل اجرا کنید. اگر نسخهٔ قبلی هنوز در حال اجرا باشد، نسخهٔ جدید بدون اجرا خارج می‌شود.
هر ۳۰ ثانیه یک بار با cron ممکن است؟
کوچک‌ترین واحد cron یک دقیقه است. برای فاصلهٔ کمتر، یا از systemd timer استفاده کنید یا در crontab دو خط بگذارید که دومی با sleep 30 شروع شود.

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

سرور ابری

سرور ابری ایران‌کلاد در کمتر از ۶۰ ثانیه آماده می‌شود؛ با دیسک NVMe SSD، پورت اختصاصی ۱۰ گیگابیت و صورت‌حساب ساعتی تومانی، از ۱٬۱۰۰ تومان در ساعت.