حرفهایها معمولاً برای خودکارسازی فرآیندهای تکراری و کاهش بار کاری اعضای تیم، به سراغ کرون جاب (Cron Job) میروند. اما کرون جاب چیست، چطور باید آن را روی سرور یا سایت پیکربندی کنیم و چگونه اسکریپت کرون جاب بنویسیم؟
با ما همراه باشید تا در مقالۀ امروز، به این سوالات پاسخ دهیم و نحوۀ استفاده از کرون جاب را در عمل یاد بگیریم.
کرون جاب (Cron Job) چیست؟
کرون جاب (Cron Job) یک ابزار زمانبندی در سیستمعاملهای لینوکس و یونیکس است که به شما اجازه میدهد دستورات یا اسکریپتها را بهصورت خودکار و در زمانهای مشخص اجرا کنید.
به زبان ساده، کرون جاب مثل یک ساعت زنگدار هوشمند برای سرور عمل میکند؛ شما زمان را تنظیم و تسک را تعریف میکنید؛ حالا بهجای اینکه هر بار یک کار تکراری را دستی انجام دهید، سرور بدون دخالت شما، کار موردنظر را دقیقاً در همان زمانِ معین انجام میدهد.
| 💡اطلاعات بیشتر:
ویژگیهای اصلی سیستمعاملهای Linux و Unix-like (یا شبهیونیکس):
مثالهای معروف:
|
کرون جاب چگونه کار میکند؟
هر کرون جاب از دو بخش اصلی تشکیل میشود:
- زمانبندی: این بخش مشخص میکند که دستور چه زمانی اجرا شود. این زمانبندی با مجموعهای از پنج (و در برخی موارد شش) فیلد نمایش داده میشود که زمان و تاریخ دقیق اجرای تسک را تعیین میکنند.
- دستور: این بخش همان دستور یا اسکریپتی است که قصد اجرای آن را دارید. هر دستوری که معمولاً از طریق خط فرمان (Command Line) اجرا میشود، میتواند در این بخش قرار بگیرد.
برای مثال، میتوانیم یک Cron job تنظیم کنیم تا هر جمعه ساعت ۹ صبح (زمانبندی) یک اسکریپت PHP را برای ارسال ایمیل خبرنامۀ هفتگی (دستور) اجرا کند. یا میتوانیم کرانجاب دیگری را پیکربندی کنیم تا هر شب رأس نیمهشب فایلهای موقت یک پوشۀ مشخص را حذف کرده و فضای دیسک را آزاد کند.
در عمل، امکانات و کاربردهای کرانجابها تقریباً نامحدود است.
آشنایی با سینتکس (Syntax) کرون جاب
برای استفادۀ درست از کران جاب، باید با سینتکس (قالب نوشتاری) زمانبندی آنها آشنا شوید. این ساختار ممکن است در نگاه اول کمی پیچیده به نظر برسد، اما با تجزیۀ اجزای آن، کاملاً منطقی و قابل فهم خواهد بود. زمانبندی کرانجاب از پنج فیلد تشکیل میشود که به ترتیب زیر تعریف میشوند:
- دقیقه (۰ تا ۵۹)
- ساعت (۰ تا ۲۳)
- روز (۱ تا ۳۱)
- ماه (۱ تا ۱۲)
- روز هفته (۰ تا ۷ که در آن ۰ و ۷ هر دو نشاندهندۀ یکشنبه هستند)
دستور زیر را ببینید تا آن را بیشتر باز کنم:
* * * * * command_to_be_executed
هر کدام از این ستارهها (*) نشاندهندۀ زمانبندی (دقیقه، ساعت، روز، ماه و روز هفته) هستند و بعد از آنها دستوری که باید اجرا شود قرار میگیرد.
البته کاراکترهای دیگری هم در سینتکس کرون داریم. مثلاً:
- ستاره (*): این یک کاراکتر Wildcard است. یعنی اگر در یک فیلد از ستاره استفاده شود، دستور برای تمام مقادیر ممکن آن فیلد اجرا خواهد شد. برای مثال، قرار دادن ستاره در فیلد دقیقه به این معناست که کرانجاب هر دقیقه اجرا میشود.
- ویرگول (,): ویرگول به شما اجازه میدهد چند مقدار مشخص را در یک فیلد تعیین کنید. برای نمونه، مقدار 1,15,30 در فیلد دقیقه یعنی دستور در دقیقهٔ ۱، ۱۵ و ۳۰ هر ساعت اجرا میشود.
- خط تیره (-): خط تیره برای تعریف یک بازه از مقادیر بهکار میرود. بهعنوان مثال، 1-5 در فیلد روز هفته یعنی کرانجاب از دوشنبه تا جمعه اجرا خواهد شد.
- اسلش (/): اسلش برای مشخص کردن گام (step) استفاده میشود. برای مثال، */15 در فیلد دقیقه به این معناست که دستور هر ۱۵ دقیقه یکبار اجرا میشود که معادل 0,15,30,45 است.
| 💡اطلاعات بیشتر:
کاراکتر Wildcard چیست؟ وایلدکارت (Wildcard) به کاراکتر یا نمادی گفته میشود که بهجای یک یا چند مقدار مشخص استفاده میشود و مفهوم «هر مقدار ممکن» یا «مهم نیست چه باشد» را میرساند. به زبان ساده، وایلدکارت یعنی «همه را شامل میشود». مثالهای رایج در cron job:
|
نحوۀ پیکربندی کرونجابها
حالا که با سینتکس کرون آشنا شدید، وقت آن است که یاد بگیرید چطور در عمل از آن استفاده کنید.
روش اول) استفاده از خط فرمان (Crontab)
اگر تجربۀ کار با لینوکس را داشته باشید، کار کردن با خط فرمان هم برایتان راحت است. خط فرمانی که برای تنظیم و تعریف کرون جاب استفاده میشود crontab نام دارد.
برای تنظیم کرون جاب روی سرور، باید ابتدا از طریق SSH وارد سرور شوید؛ بعد داخل ترمینال دستور crontab -e را وارد کنید.
-e مخفف edit (ویرایش) است. اولین بار که این دستور را اجرا میکنید، ممکن است از شما خواسته شود یک ویرایشگر متن انتخاب کنید. ویرایشگر nano برای افراد مبتدی گزینۀ مناسبیست و کار با آن ساده است.
افزودن یک Cron Job جدید
پس از باز شدن crontab، میتوانید Cron job خود را اضافه کنید. دقت کنید که هر کرونجاب باید در یک خط جداگانه نوشته شود.
مثلاً فرض کنید میخواهید اسکریپتی به نام myscript.sh که در پوشۀ Home قرار دارد، هر روز ساعت ۳:۳۰ بامداد اجرا شود. در این صورت باید خط زیر را به crontab اضافه کنید:
30 3 * * * /home/username/myscript.sh
یادتان باشد که بهجای username، نام کاربری واقعی خود را وارد کنید. همچنین استفاده از مسیر کامل (absolute path) اسکریپت بسیار مهم است؛ چون سرویس cron به متغیرهای محیطی دسترسی ندارد و در صورت استفاده از مسیر مبهم، ممکن است نتواند اسکریپت را پیدا کند.
ذخیرۀ Crontab
پس از افزودن کرانجابها، باید فایل را ذخیره کرده و از ویرایشگر خارج شوید. در ویرایشگر nano این کار با فشردن کلیدهای Ctrl + X، سپس Y برای تأیید تغییرات و در نهایت Enter انجام میشود. پس از ذخیرۀ فایل، سرویس cron بهصورت خودکار تنظیمات جدید را میخواند و کرونجابها زمانبندی میشوند.
سایر دستورات مفید crontab
- crontab -l: نمایش فهرست تمام کرانجابهای فعلی شما
- crontab -r: حذف کامل فایل crontab شما
⚠️ در استفاده از دستور crontab -r بسیار احتیاط کنید؛ چون تمام کرون جابهای شما را بدون درخواست تأیید حذف میکند.
روش دوم) تنظیم کرون جاب در سیپنل
برای خیلی از صاحبان وبسایتها (مخصوصاً کسانی که از هاست اشتراکی استفاده میکنند) استفاده از کنترل پنلی مانند cPanel فرآیند تنظیم کرون جاب را خیلی راحتتر میکند. در ادامه مراحل ست کردن کرون جاب در cPanel را مرور میکنیم.
رفتن به بخش کرونجابها
- ابتدا وارد cPanel شوید
- به بخش Advanced بروید
- روی آیکون Cron Jobs کلیک کنید
نکته: اگر هاستتان را از لیموهاست تهیه کردهاید، در حساب کاربریتان کافیست به بخش «مدیریت سرویسها» بروید > روی دکمۀ «مدیریت» سرویس موردنظرتان کلیک کنید > کمی به پایین اسکرول کنید > در قسمت میانبرها توقف کنید > و بعد روی آیکون Cron Jobs کلیک کنید.
اضافهکردن کرون جاب جدید در سیپنل
رابط کاربری cPanel برای ایجاد و مدیریت کرانجابها بسیار ساده و قابل فهم است. این بخش با استفاده از منوهای کشویی و کادرهای متنی به شما کمک میکند زمانبندی و دستور موردنظر خود را بهراحتی تنظیم کنید.
- تنظیمات رایج (Common Settings):
cPanel یک منوی کشویی شامل زمانبندیهای متداول، مانند «هر دقیقه یکبار»، «هر ساعت یکبار» و «روزانه یکبار» در اختیار شما قرار میدهد. اگر نیاز به زمانبندی سادهای دارید، این گزینهها نقطۀ شروع مناسبی هستند.
- زمانبندی سفارشی (Custom Schedule):
در صورتی که به زمانبندی دقیقتری نیاز دارید، میتوانید به سراغ فیلدهای جداگانهٔ دقیقه، ساعت، روز، ماه و هفته بروید. کافی است مقادیر موردنظر خود را در هر کادر وارد کنید.
- دستور (Command):
در بخش «Command»، دستور موردنظر برای اجرا را کامل وارد کنید. همانند روش استفاده از خط فرمان، استفاده از مسیر کامل (absolute path) اسکریپت ضروری است. برای مثال:
/usr/bin/php /home/username/public_html/yourscript . php
- افزودن کرونجاب جدید (Add New Cron Job):
پس از تکمیل تمام فیلدها، روی دکمۀ «Add New Cron Job» کلیک کنید. کرونجاب جدید به فهرست کرونجابهای فعلی که در پایین صفحه نمایش داده میشود، اضافه خواهد شد.
کاربردهای کرون جاب چیست؟
تا الان متوجه شدهاید که کرون جاب یکی از مهمترین ابزارها برای خودکارسازی وظایف در سرورها و وبسایتها محسوب میشود. در این بخش چند نمونه از کارهایی را که میشود با تنظیم Cron Job انجام داد مرور میکنیم.
۱) بکاپگیری خودکار
بکاپگیری منظم برای هر سایتی حیاتی است! با Cron Job میتوانید این فرآیند را خودکار کنید تا همیشه خیالتان از داشتن نسخۀ پشتیبان فایلها و دیتابیس راحت باشد.
یک مثال میزنم.
شما میتوانید یک shell script بسازید که فایلهای وبسایت رو فشرده (zip) کند و از دیتابیس بکاپ بگیرد؛ سپس آن را طوری زمانبندی کنید که روزانه یا هفتگی اجرا شود.
0 1 * * * /home/username/backup.sh
معنی این دستور، این است: اسکریپت بکاپ هر روز ساعت ۱ بامداد اجرا شود.
۲) ارسال ایمیل خودکار
اگر خبرنامۀ ایمیلی دارید یا میخواهید بعد از یک عمل خاص، برای کاربران ایمیل ارسال شود، میتوانید با تنظیم کرون جاب این کار را ساده کنید.
مثلاً میشود یک اسکریپت PHP یا پایتون نوشت که آخرین مقالات وبلاگ را دریافت و آنها را در قالب یک خبرنامه جمعآوری کند و بعد برای لیست مشترکین بفرستد.
دستور نمونه:
0 9 * * 5 /usr/bin/php /home/username/public_html/send_newsletter . php
طبق این دستور، هر جمعه ساعت 9 شب خبرنامه برای مشترکین ارسال میشود. (اگر خواستید اسکریپت را کپی کنید، فاصله قبل و بعد از . php را حذف کنید)
۳) پاککردن کش
خیلی از وبسایتها از سیستم کشینگ برای بهبود پرفورمنس سایت استفاده میکنند. با گذشت زمان، این کش ممکن است قدیمی شود یا حجم آن خیلی زیاد شود.
برای مدیریت این شرایط میتوانیم از یک کران جاب (cron job) استفاده کنیم تا در بازههای زمانی منظم، کش را پاکسازی کند. این کار باعث میشود بازدیدکنندهها همیشه جدیدترین محتوا را ببینند و فضای دیسک سرور هم بهصورت بهینه مدیریت شود.
دستور نمونه:
0 0 * * * rm -rf /home/username/public_html/wp-content/cache/*
طبق این دستور، هر نیمهشب تمام فایلهای موجود در دایرکتوری کش حذف میشوند.
۴) تولید سایت مپ
Sitemap برای سئو اهمیت زیادی دارد؛ چون به موتورهای جستوجو کمک میکند تمام صفحات وبسایت شما را شناسایی و ایندکس کنند. اگر وبسایت بزرگی دارید که مدام و در فواصل زمانی کوتاه بهروزرسانی میشود، میتوانید از یک کرانجاب (cron job) برای بازتولید روزانۀ نقشۀ سایت استفاده کنید.
دستور نمونه:
0 3 * * * /usr/bin/php /home/username/public_html/generate_sitemap . php
این دستور اسکریپت تولید سایتمپ را هر روز ساعت ۳ بامداد اجرا میکند.
۵) زمانبندی وظایف سایتهای وردپرسی
بهتر است اول با WP-Cron آشنا شوید.
در وردپرس، بسیاری از وظایف بهصورت زمانبندیشده انجام میشوند؛ مثل ارسال ایمیلها، انتشار نوشتههای زماندار، بررسی بهروزرسانیها، اجرای افزونهها و پاکسازی دادهها. بهصورت پیشفرض، وردپرس از سیستمی به نام WP-Cron برای انجام این کارها استفاده میکند.
اما WP-Cron چه مشکلی دارد؟
WP-Cron یک کرون واقعی نیست و وابسته به بازدید کاربران است. یعنی فقط زمانی اجرا میشود که کاربری وارد سایت شود؛ اگر سایت کمترافیک باشد، وظایف ممکن است با تأخیر یا اصلاً اجرا نشوند یا در سایتهای پربازدید، ممکن است بیش از حد تکرار شوند و به سرور فشار بیاید.
پس Wp-Cron گزینۀ ایدئالی نیست.
راهحل جایگزین این است که از کرون جاب واقعی سرور استفاده کنیم.
اینطوری زمانبندیها کاملاً دقیق و مستقل از بازدید کاربران اجرا میشوند؛ مصرف منابع سرور تحت کنترل است و پایداری سایت افزایش مییابد.
دقت داشته باشید که در این روش، WP-Cron غیرفعال میشود و یک کرون جاب لینوکسی وظیفۀ اجرای آن را بر عهده میگیرد.
یک کرون جاب استاندارد وردپرس معمولاً به شکل زیر اجرا میشود:
*/5 * * * * php /home/user/public_html/wp-cron.php > /dev/null 2>&1
طبق این دستور:
هر ۵ دقیقه یکبار فایل wp-cron.php وردپرس -بدون ایجاد لاگ اضافی یا نمایش خطا- اجرا میشود.
۶) مانیتورینگ و بررسی وضعیت سیستم
به کمک کرون، میتوانید وضعیت منابع سرور، سرویسهای حیاتی و فایلهای مهم را بهصورت زمانبندیشده بررسی کنید و در صورت بروز خطا یا مشکل، هشدار دریافت کنید.
این کار باعث میشود مشکلات قبل از اینکه تأثیر جدی روی سایت یا اپلیکیشن شما بگذارند، شناسایی و رفع شوند.
نمونه دستور Cron Job برای مانیتورینگ فضای دیسک:
*/10 * * * * df -h > /home/user/disk_usage.log
طبق این دستور، هر ۱۰ دقیقه یک بار، فضای استفادهشدۀ دیسک نمایش داده شده و نتیجه در فایل لاگ ذخیره میشود.
۷) خودکارسازی کارهای مدیریتی سرور
بسیاری از کارهای تکراری و زمانبندیشده که مدیران سرور هر روز یا هر هفته انجام میدهند، میتوانند بهصورت خودکار توسط کرون اجرا شوند. این کار باعث صرفهجویی در زمان، کاهش خطاهای انسانی و افزایش امنیت سرور میشود.
از جمله کارهای مدیریتی سرور که میتوانیم با کران جاب آنها را به شکل اتوماسیون دراوریم، به موارد زیر میتوان اشاره کرد:
- ریاستارت سرویسها (مانند ردیس و آپاچی)
- پاکسازی فایلها و لاگهای قدیمی
- بهروزرسانی خودکار سیستم و بستهها
- نظارت و تهیه گزارش منابع سرور
فرض کنید میخواهیم سرور هر هفته، جمعه ساعت ۵ صبح (زمان کمترافیک) ریاستارت شود؛ میتوانیم از اسکریپت زیر استفاده کنیم:
0 7 * * 0 /sbin/reboot
خطاهای رایج در Cron Job + راه حل
ادمینهای هاستهای اشتراکی و VPS، معمولاً هنگام ..
1) همپوشانی در زمان اجرا
اگر یک کرون اجرا شود و کرون بعدی قبل از اتمام اجرای کرون اولی شروع شود، یک همپوشانی رخ میشود که نتیجۀ آن ایجاد فشار مضاعف روی سرور است. مثلاً اگر اسکریپت ۱۰ دقیقه طول بکشد ولی هر ۵ دقیقه اجرا شود، این اتفاق میفتد.
چطور جلوی این اتفاق را بگیریم؟
با استفاده از Lock طبق دستور زیر:
flock -n /tmp/script.lock /path/script.sh
2) اشتباه در ساختار زمانبندی
همانطور که گفتیم، پنج فیلد اول (*ها) برای زمانبندی هستند. ادمینها معمولاً در ترتیب این زمانبندی اشتباه میکنند که پیشنهاد من برای حل این مشکل، استفاده از ChatGPT برای درستنوشتن ساختار اسکریپت است.
مثال زیر را ببینید:
0 */5 * * *
این دستور میگوید که اسکریپت باید هر 5 ساعت اجرا شود؛ نه هر 5 دقیقه یا 5 روز! بهتر است برای مرور دوباره آشنایی با سینتکس (Syntax) کرون جاب» در همین مقاله مراجعه کنید.
3) خروجی نگرفتن از لاگها
بسیاری از کاربران، خروجی دستور را لاگ نمیکنند و گاهی نمیتوانند متوجه شوند که چرا دستوری اجرا نشده است.
از چنین اسکریپتی میتوانید برای لاگ گرفتن استفاده کنید:
*/5 * * * * /path/script.sh >> /home/user/cron.log 2>&1
4) استفاده از WP-Cron پیشفرض
WP-Cron فقط زمانی اجرا میشود که کاربری وارد سایت شود. پس وقتی سایت کمترافیک باشد، تسکها با تأخیر اجرا میشوند و اگر هم هیچ بازدیدی نباشد، ممکن است اصلاً اجرا نشوند!
مثال: اگر نوشتهای را برای ساعت ۱۰ شب زمانبندی کنید، ولی تا ساعت ۱ بامداد بازدیدی نداشته باشید، نوشته دیر منتشر میشود.
⚠️ در کل برای سایتها حرفهای و پربازدید، استفاده از کرون پیشفرض وردپرس توصیه نمیشود.
5) اشتباه در تعیین مسیر
استفاده از مسیر نسبی (Relative Path) بهجای مسیر کامل (Absolute Path) مشکل ایجاد میکند. چرا؟ چون Cron Job در محیطی جدا از ترمینال شما اجرا میشود و معمولاً پوشه فعلی (Current Directory) را نمیشناسد. بنابراین اگر مسیر کامل فایل یا دستور مشخص نشده باشد، کرون نمیتواند آن را پیدا کند.
- نمونه مسیر نسبی: php script.php
- نمونه مسیر کامل: /home/user/scripts/backup.sh
6) ذخیرۀ پسورد و نام کاربری داخل اسکریپت
یکی از خطرناکترین کارها دخیره اطلاعات حساس داخل اسکریپت است. با این کار هرکس که به هاست یا سرور دسترسی داشته باشد میتواند نام کاربری و پسوردها را ببیند. پس یادتان باشد که حتی هنگام بکاپگیری از دیتابیس این اشتباه را نکنید.
مثال زیر را ببینید:
mysqldump -u root -pass12345 database_name > backup.sql
در این مثال pass12345 پسورد است که کاملاً واضح داخل اسکریپت نوشته شده. اگر هاست اشتراکی استفاده میکنید، خوب است بدانید که سایر مشترکین هاست، با دستور ps aux میتوانند اسکریپتهای شما را ببینند.
حالا چطور این مشکل را حل کنیم؟
- داخل مسیر خانگی کاربر فایلی به نام ~/.my.cnf بسازید
- مجوز فایل را با این دستور محدود کنید: chmod 600 ~/.my.cnf
- دستور بکاپ را اجرا کنید: mysqldump database_name > backup.sql
7) خطای Permission Denied در Cron Job
در سیستمعاملهای لینوکسی، هر فایل دارای سه نوع مجوز است: خواندن (Read)، نوشتن (Write) و اجرا (Execute).
اگر اسکریپت شما مجوز اجرا (Execute) نداشته باشد، حتی اگر مسیر و زمانبندی کاملاً درست باشد، کرون آن را اجرا نمیکند! پس چکار کنیم؟
برای اینکه بدانید فایلی مجوز اجرا دارد یا نه، اول این دستور را اجرا کنید:
ls -l /home/user/scripts/backup.sh
اگر خروجی مشابه اسکریپت زیر بود، و در ابتدای خط حرف x را ندیدید، یعنی مجوز اجرا ندارد:
-rw-r--r-- 1 user user 1004 Jan 15 11:00 backup.sh
برای مجوزدادن به اجرا، از فرمان زیر استفاده کنید:
chmod +x /home/user/scripts/backup.sh
جمعبندی
در این مقاله تلاش کردیم تا تمام نکات مهم، از چیستی کرون جاب، تا نحوه تنظیم و اشتباهات رایج حین استفاده را مرور کنیم. اگر با خطای دیگری هنگام کار با Cron Job روبهرو شدید یا سوالی داشتید، در بخش نظرات همین مقاله بنویسید تا بتوانیم راهنماییتان کنیم.






دیدگاه ها
اولین نفری باشید که دیدگاه خود را ثبت می کنید