کرون جاب (Cron Job) چیست؟
انجام مکرر یک کار طاقتفرسا است. کرون جاب (Cron Job) به کاربران این امکان را میدهد تا وظایف یک سرور خصوصی مجازی (VPS) یا هر سیستمعامل مشابه یونیکس را خودکار کنند. این ابزار باعث صرفهجویی در وقت میشود و به کاربران اجازه میدهد تا روی کارهای ضروری دیگر تمرکز کنند.
در این پست آموزشی از مجله هاست ایران میخواهیم در رابطه با کرون جاب و جنبههای مختلف این ابزار قدرتمند به گفتگو بپردازیم و بخشهای حیاتی و مهم آن را آموزش دهیم. پس باما همراه باشید.
کرون جاب چیست؟
کرون جاب (Cron Job) یک برنامه کاربردی است که به کاربران اجازه میدهد تا دستورات را برای زمانبندی وظایف بهطور مکرر در یک زمان خاص وارد کنند. به وظایف برنامهریزیشده در برنامه کرون، cron job گفته میشود. کاربران میتوانند تعیین کنند که چه نوع وظیفهای را میخواهند خودکار کنند و چه زمانی باید اجرا شود. کرون یک فرایند خودکار سازی و در پسزمینه که کارهای غیرتعاملی را اجرا میکند. در ویندوز، ممکن است با فرآیندهای پسزمینه مانند سرویسهایی که مشابه cron daemon کار میکنند آشنا باشید.
فایل cron یک فایل متنی ساده است که حاوی دستوراتی برای اجرای دورهای در یک زمان خاص است. جدول cron سیستم پیشفرض یا فایل پیکربندی کرون تب، /etc/crontab است. فقط مدیران سیستم میتوانند فایل crontab سیستم را ویرایش کنند. بااینحال، سیستمعاملهای شبه یونیکس از چندین مدیر پشتیبانی میکنند. هرکدام میتوانند یک فایل crontab ایجاد کنند و دستوراتی را بنویسند تا کارها را هر زمان که بخواهند انجام دهند. با کرون جاب کاربران میتوانند تعمیر و نگهداری سیستم، نظارت بر فضای دیسک و برنامهریزی پشتیبان را خودکار کنند.
در حالی که کرون جاب ها عمدتاً توسط مدیران سیستم استفاده میشود، اما میتوانند برای توسعهدهندگان وب نیز مفید باشند. برای مثال، بهعنوان مدیر وبسایت، میتوانید یک cron job را برای پشتیبان خودکار از سایت، دیگری برای بررسی لینکهای شکسته، برای پاک کردن کش سایت و سایر موارد تنظیم کنید.
محدودیتهای کرون جاب
مانند هر برنامه دیگری، برنامه کرون دارای محدودیتهایی است که باید قبل از استفاده از آن در نظر بگیرید:
- کوتاهترین فاصله بین کارها ۶۰ ثانیه است. با کرون جاب، نمیتوانید یک کار را هر ۵۹ ثانیه یا کمتر تکرار کنید.
- متمرکز بر روی یک کامپیوتر: کارهای کرون را نمیتوان به چندین کامپیوتر در یک شبکه توزیع کرد؛ بنابراین اگر کامپیوتری که cron را اجرا میکند از کار بیفتد، وظایف برنامهریزیشده اجرا نمیشوند و کارهای از دست رفته فقط بهصورت دستی قابل اجرا خواهند بود.
- مکانیسم امتحان مجدد خودکار وجود ندارد. Cron طوری طراحیشده است که در زمانهای کاملاً مشخص اجرا شود. اگر یک کار با شکست مواجه شود تا زمان برنامهریزیشده بعدی دوباره اجرا نمیشود.
حتی با این محدودیتها، کرون جاب یک راه حل عالی برای کارهای سادهای است که در یک زمان خاص با فواصل منظم حداقل ۶۰ ثانیه اجرا میشوند.
نکته حرفهای:
قبل از ایجاد Cron Job، مطمئن شوید که اسکریپت شما کار میکند. برای انجام این کار، بسته به نوع اسکریپتی که دارید، فایل را در مرورگر خود بازکنید (از طریق URL) یا آن را از طریق SSH آن را اجرا کنید.
عملیات اساسی Cron Job
این بخش از آموزش به شما نشان میدهد که چگونه با وارد کردن دستورات در یک برنامه ترمینال Bash در لینوکس یا سایر سیستمعاملهای مشابه یونیکس، کارهای cron را زمانبندی کنید.
میزبانی VPS Hostinger بر روی یک سیستمعامل مبتنی بر لینوکس اجرا میشود؛ بنابراین، یادگیری نحوه برنامهریزی کارهای کرون جاب بهطور قابلتوجهی بازده کاری شما را به عنوان یک مدیر VPS افزایش میدهد. خط فرمان برای VPS از طریق PuTTY SSH قابلدسترسی است.
قبل از پرداختن به عملیات اصلی cron، دانستن فایلهای پیکربندی مختلف cron job ضروری است:
- کرونتب سیستم (system crontab). از آن برای برنامهریزی کارهای ضروری در سراسر سیستم استفاده میشود و فقط با مجوزهای کاربر روت قابلتغییر هستند.
- کرونتب کاربر (user crontab). این فایل به کاربران اجازه میدهد تا کارهای cron را ایجاد و ویرایش کنند که فقط در سطح کاربر اعمال میشود.
اگر میخواهید crontab سیستم را ویرایش کنید، مطمئن شوید که کاربر فعلی دارای امتیازات روت (امتیاز ROOT، بالاترین سطح دسترسی در سیستم) است. در زیر چند عملیات اساسی در کرون جاب آمده است که با استفاده از آن میتوانیم عملیات مختلفی را انجام دهیم:
برای ایجاد یا ویرایش یک فایل crontab، موارد زیر را در خط فرمان وارد کنید:
crontab -e: اگر هیچ فایل crontab در سیستم شما یافت نشد، دستور بهطور خودکار یک فایل جدید ایجاد میکند. crontab -e به شما اجازه میدهد تا کارهای کرون را اضافه، ویرایش و حذف کنید. برای ویرایش فایل crontab به یک ویرایشگر متن مانند vi یا nano نیاز دارید. وقتی برای اولین بار crontab -e را وارد میکنید، از شما خواسته میشود که انتخاب کنید با کدام ویرایشگر متن میخواهید فایل را ویرایش کنید.
برای مشاهده فهرستی از وظایف برنامهریزیشده فعال در سیستم خود، دستور زیر را وارد کنید:
crontab -l
اگر سیستم شما چندین کاربر دارد، میتوانید لیست فایلهای crontab آنها را با وارد کردن دستور زیر بهعنوان ابر کاربر مشاهده کنید:
crontab -u username -l
همچنین میتوانید بهراحتی کارهای برنامهریزیشده سایر کاربران را با تایپ دستور crontab زیر ویرایش کنید:
sudo su crontab -u username -e
برای اینکه به خود امتیازات root بدهید، sudo su را به ابتدای دستور اضافه کنید. برخی از دستورات، ازجمله این یکی، فقط توسط کاربران روت قابل اجرا هستند.
درنهایت، برای حذف تمام وظایف برنامهریزیشده در فایل crontab خود و شروع مجدد، دستور زیر را تایپ کنید:
crontab -r
از طرف دیگر، دستور زیر همان crontab -r است، با این تفاوت که قبل از حذف crontab از کاربر یک گزینه yes/no میخواهد:
crontab -i
علاوه بر crontab، کاربر روت همچنین میتواند کرون جاب ها را به دایرکتوری etc/cron.d اضافه کند. برای اجرای اسکریپتها برای نصب و بهروزرسانی خودکار بسیار مناسب است.
به خاطر داشته باشید که کاربری که کرون جاب ها را به این دایرکتوری اضافه میکند باید دسترسی ریشه داشته باشد.
از طرف دیگر، یک کاربر ریشه میتواند اسکریپتهای خود را به دایرکتوریهای زیر منتقل کند تا اجرای آنها را برنامهریزی کند:
- /etc/cron.hourly/ – Run all scripts once an hour : اجرای همه اسکریپتها در یک ساعت
- /etc/cron.daily/ – Run once a day.: اجرای اسکریپتها روزی یک بار
- /etc/cron.weekly/ – Run once a week.: اجرای اسکریپتها هفته ای یک بار
- /etc/cron.monthly/ – Run once a month.: اجرای اسکریپتها ماهی یک بار
سینتکس کرون تب
برای ایجاد یک کرون جاب، ابتدا باید نحو و قالببندی cron را بدانید. در غیر این صورت، تنظیم صحیح cron jobs ممکن است امکانپذیر نباشد.
نحو crontab از پنج فیلد با مقادیر ممکن زیر تشکیلشده است:
- دقیقه (Minute): دقیقه از ساعتی که فرمان اجرا میشود، از ۰ تا ۵۹ متغیر است.
- ساعت (Hour) ساعتی که دستور در آن اجرا میشود، از ۰ تا ۲۳ در نماد ۲۴ ساعته متغیر است.
- روز ماه (Day of the month). روزی از ماه که کاربر میخواهد دستور اجرا شود، از ۱ تا ۳۱.
- ماه (Month). ماهی که کاربر میخواهد فرمان در آن اجرا شود، از ۱ تا ۱۲ متغیر است و چون طبق تاریخ میلادی است بنابراین ژانویه تا دسامبر را نشان میدهد.
- روز هفته (Day of the week). روز هفته برای اجرای دستور، از ۰ تا ۶ که نشاندهنده یکشنبه تا شنبه است. در برخی سیستمها، مقدار ۷ نشاندهنده یکشنبه است.
هیچیک از فیلدها نباید خالی باشند، برای مثال، اگر میخواهید یک کرون جاب راهاندازی کنید تا root/backup.sh را هر جمعه در ساعت ۵:۳۷ بعدازظهر اجرا کند، دستور cron شما باید به این صورت باشد:
۳۷ ۱۷ * * ۵ root/backup.sh
در مثال بالا، ۳۷ و ۱۷ نشاندهنده ۵:۳۷ بعدازظهر است. هر دوستاره برای فیلدهای روز در ماه و ماه، همه مقادیر ممکن را نشان میدهند. این بدان معنی است که کار باید بدون توجه به تاریخ یا ماه تکرار شود. درنهایت، ۵ نشاندهنده جمعه است. سپس مجموعه اعداد با محل خودکار دنبال میشود.
اگر از نوشتن دستی سینتکس کرون جاب مطمئن نیستید، میتوانید از ابزارهای رایگان مانند Crontab Generator یا Crontab.guru برای تولید اعداد دقیق برای زمان و تاریخ موردنظر برای دستور خود استفاده کنید.
برای تنظیم زمان صحیح برای دستور cron خود، دانش اپراتورهای کرون جاب ضروری است. آنها به شما اجازه میدهند تعیین کنید که کدام مقادیر را میخواهید در هر فیلد وارد کنید. در تمام فایلهای crontab باید از عملگرهای مناسب استفاده کنید.
عملگرهای کرون جاب
در کرون جاب عملگرهای مختلفی وجود دارد که مهمترین آنها شامل موارد زیر است:
- ستاره (*). از این عملگر برای نشان دادن تمام مقادیر ممکن در یک فیلد استفاده کنید. بهعنوانمثال، اگر میخواهید کار cron شما هر دقیقه اجرا شود، در قسمت Minute یک ستاره بنویسید.
- کاما (،). از این عملگر برای فهرست کردن چندین مقدار استفاده کنید. بهعنوانمثال، نوشتن ۱،۵ در فیلد روز هفته، کار را برای انجام هر دوشنبه و جمعه برنامهریزی میکند.
- خط تیره (-). از این عملگر برای تعیین محدودهای از مقادیر استفاده کنید. بهعنوانمثال، اگر میخواهید یک کار cron را از ژوئن تا سپتامبر راه اندازی کنید، نوشتن ۶-۹ در قسمت Month این کار را انجام میدهد.
- جداکننده (/). از این عملگر برای تقسیم یک مقدار استفاده کنید. بهعنوانمثال، اگر میخواهید یک اسکریپت را هر دوازده ساعت یک بار اجرا کنید، */۱۲ را در قسمت Hour بنویسید.
- (L). این اپراتور در فیلدهای روز ماه و روز هفته قابل استفاده است. مثلاً نوشتن ۳L در قسمت روز هفته یعنی آخرین چهارشنبه یک ماه.
- روز هفته (W). از این عملگر برای تعیین نزدیکترین روز هفته از یک زمان معین استفاده کنید. بهعنوانمثال، اگر اول ماه یک شنبه باشد، نوشتن ۱W در فیلد روز از ماه، دستور را در دوشنبه بعد (سوم) اجرا میکند.
- هش (#). از این عملگر برای تعیین روز هفته و به دنبال آن عددی از ۱ تا ۵ استفاده کنید. برای مثال، ۱#۲ به معنای دومین دوشنبه ماه است.
- علامت سوال (؟). از این عملگر برای وارد کردن «بدون مقدار خاص» برای فیلدهای «روز ماه» و «روز هفته» استفاده کنید.
دستورات ویژه کرون جاب
دستورات ویژه برای برنامهریزی کرون جاب در فواصل زمانی بدون نیاز کاربر به کشف مجموعه منطقی اعداد برای ورودی استفاده میشوند. برای استفاده از آنها، یک @ بنویسید و یک عبارت ساده به دنبال آن قرار دهید.
در اینجا چند رشته ویژه مفید وجود دارد که میتوانید از آنها در دستورات استفاده کنید:
- @hourly: کار هر ساعت یکبار اجرا خواهد شد.
- @daily یا @midnight: این رشتهها وظیفه را هر روز در نیمه شب اجرا میکنند.
- @weekly: از این برای اجرای مشاغل یک بار در هفته در نیمه شب یکشنبه استفاده کنید.
- @monthly: این رشته خاص یک دستور را در روز اول هر ماه یک بار اجرا میکند.
- @yearly: از این برای اجرای یک کار در سال یک بار در نیمه شب اول ژانویه استفاده میشود.
- @reboot: با استفاده از این رشته، کار در هنگام راه اندازی فقط یک بار اجرا میشود.
نکته مهم! به یاد داشته باشید که هنگام برنامهریزی کارهای کرون جاب حساس به منطقه زمانی دقت بیشتری داشته باشید.
مثالهایی از دستورات Cron Job
اکنونکه میدانیم سینتکس کرون جاب چه طور نوشته میشود، به چند مثال میپردازیم تا به شما در درک بهتر آن کمک کنیم.
به خاطر داشته باشید که خروجی Cron Job بهطور خودکار بهحساب ایمیل شما ارسال میشود. اگر میخواهید اعلانهای دریافت ایمیلها را متوقف کنید، میتوانید >/dev/null 2>&1 را مانند مثال زیر به دستوری اضافه کنید:
۰ ۵ * * * /root/backup.sh >/dev/null ۲>&1
اگر میخواهید خروجی را به یک حساب ایمیل خاص ارسال کنید، MAILTO و سپس یک آدرس ایمیل را اضافه کنید. بهعنوانمثال:
MAILTO=”inbox@domain.tld”
۰ ۳ * * * /root/backup.sh >/dev/null ۲>&1
مجوزهای Cron
دو فایل زیر را میتوان ایجاد یا ویرایش کرد تا به کاربران اجازه یا محدود کردن استفاده از فایل کرون جاب سیستم داده شود:
- /etc/cron.allow – if cron.allow: وجود دارد و باید حاوی نام کاربر باشد تا به آنها اجازه استفاده از cron jobs را بدهد.
- /etc/cron.deny – if cron.allow: وجود ندارد؛ اما cron.deny وجود دارد، کاربری که میخواهد از cron jobs استفاده کند نباید در فایل فهرست شود.
سخن پایانی
تنظیم کارهای برنامهریزیشده بهصورت خودکار یک راه حل عالی برای صرفهجویی در زمان است که به وسیله ابزار انجام میشود. کرون جاب یک راه عالی برای مدیران سیستم و توسعهدهندگان وب برای مدیریت کارهای تکراری است. تنها کاری که باید انجام شود این است که دستورات مناسب را وارد کرده و زمان اجرای صحیح را انتخاب کنید.
برای برنامهریزی یک کار کرون جاب، از نحو صحیح در خط فرمان سیستمعامل باید استفاده کنید. از طرف دیگر، میتوانید از دستورات ویژه برای آسانتر کردن فرآیند استفاده کنید. به یاد داشته باشید که مجوزهای مناسبی را اختصاص دهید تا فقط کاربران مجاز بتوانند به فایل cron دسترسی داشته باشند. امیدواریم این مقاله به شما کمک کرده باشد که اصول استفاده از cron jobs برای زمانبندی وظایف را درک کنید. اگر سؤالی دارید، در قسمت نظرات مطرح کنید.