امیرحسین کریم پور
مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

cron چیست؟ منظور از cron job و crontab در لینوکس چیست؟

Cron اختصار یافته کلمات Command Run On میباشد. Cron به نام UNIX Scheduler نیز معروف است. cron در واقع یک پروسس سیستمی است که به طور خودکار وظایف مشخص شده در وهله های زمانی معین را برای شما انجام میدهد. Cron قابلیتی در سیستم عامل لینوکس است که یک دستور یا اسکریپت را روی سرور شما زمان بندی میکند تا به طور خودکار در زمان و تاریخ مشخص شده اجرا شود.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

cron job یک کار یا Task زمان بندی شده است میباشد و این در حالیست که برای انجام کار های تکراری در سیستم عامل لینوکس بسیار میتوانند مفید واقع شوند در واقع میتوان گفت که هدف از ایجاد cron job انجام کار های تکراری در لینوکس است. برای مثال شما میتوانید یک cron job را برای حذف فایل های موقتی یا Temporary در هر هفته ، برای حفظ فضای خالی دیسک تان تنظیم کنید.

شما ممکن است بعضی از برنامه ها را که نظیر Drupal میباشد را نصب کنید تا بتوانید یک cron job برای انجام برخی وظایف تنظیم کنید. اسکریپت هایی که به عنوان cron job اجرا میشوند معمولا برای تغییر فایل ها یا دیتابیس ها استفاده میشوندو از cron job ها میتوان برای ارسال ایمیل به یک کاربر نیز استفاده کرد.شما برای ایجاد ، ویرایش ، نصب و لیست کردن cron job ها بایستی از دستور crontab استفاده کنید. crontab مخفف کلمات cron table میباشد. هر کاربر میتواند فایل crontab خود را داشته باشد. فایل های crontab کاربران در مسیر زیر قرار دارد :

/var/spool/cron/crontab

توجه کنید که فایل crontab را نباید به طور مسقیم ویرایش کنید و برای انجام این کار باید از دستور crontab -e استفاده کنید. فایل پیشفرض و دست نخورده crontab به شکل زیر است، با دستور crontab -e میتوانید این فایل را باز کنید :

# Edit this file to introduce tasks to be run by cron.
#·
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#·
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#·
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#·
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#·
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#·
# For more information see the manual pages of crontab(5) and cron(8)
#·
# m h  dom mon dow   command(این خط از فایل برای ما خیلی مهم است)
  • نکته :ما برای تعریف کردن cron job های خود بایستی انتهای این فایل به شکل صحیح و به ترتیب پارامتر ها و دستورات خود را برای ایجاد cron job در این فایل وارد کنیم و در نهایت فایل را ذخیره کنیم.

ما دو نوع فایل های پیکربندی crontab در سیستم عامل لینوکس داریم ، یکی فایل crontab ای که برای انجام کار های حساس و حیاتی در سطح سیستم عامل لینوکس نوشته شده اند و توسط سرویس های سیستمی استفاده میشوند و برای اجرا شدنشان نیازمند دسترسی root هستند، به این نوع crontab ها در اصطلاح فنی Linux system crontan یا system crontab گفته میشود که فیلد ششم(در ساختار کاری cron که در ادامه توضیح میدهیم) در فایل crontab شامل نام کاربری است که دستور یا اسکریپت مورد نظر میتواند با سطح دسترسی آن اجرا شود این ویژگی به system crontab امکان میدهد تا دستورات را با هر سطح دسترسی اجرایی کاربر اجرا شود.

نوع دوم هم user crontab نام دارد که هر کاربر با دستور crontab میتواند cron job خود را ایجاد کند. فیلد ششم در user crontab بیانگر این است که هر دستوری در فایل crontab میتواند توسط کاربری که خودش آن crontab یا بهتر است بگوییم cron job را ایجاد کرده و صاحب آن cron job است اجرا شود. فرمت یا قالب کاری cron job به شکل زیر است :

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

این ساختار را از پایین به بالا در زیر برایتان تشریح میکنیم :

  • فیلد اول: در این فیلد بایستی دقیقه ای مشخص از یک ساعت را وارد کنید.مانند دقیقه 10 (میتوانید محدوده هم تعیین کنید)
  • فیلد دوم: در این فیلد بایستی زمان معلوم را با فرمت ساعت وارد کنید.مانند ساعت 7 (میتوانید محدوده هم تعیین کنید) ، مانند ساعات 12-7
  • فیلد سوم: در این فیلد بایستی یک روز از ماه را وارد کنید مانند روز 15 ام از ماه (میتوانید محدوده هم تعیین کنید)
  • فیلد چهارم: در این فیلد بایستی یک ماه از سال را وارد کنید مثلا ماه 4 ام(آوریل) (میتوانید محدوده هم تعیین کنید)
  • فیلد پنجم: در این فیلد بایستی روزی از روز های هفته یا محدوده ای از آن روز ها را تعیین کنید.مانند صفرم هفته که در کشور های اروپایی و آمریکایی معادل روز یکشنبه است.

بعد از اینکه فایل crontab را با دستور crontab -e ویرایش کردید در انتهای فایل بایستی دستورات خود را برای ایجاد یک cron job وارد کنید. خب یک مثال برایتان بزنیم تا بهتر این موضوع جا بیفتد :

0 22 * * 1-5 /home/backup.sh

در cron job فوق ما تعریف کردیم که در دقیقه ی صفرم از ساعت 22 (رأس ساعت 10 شب) در روز های شنبه تا دوشنبه در هر روز از ماه و هر ماه اسکریپت backup.sh کاربر amirhossein اجرا شود. اگر به جای اعداد در فیلد اول تا پنجم علامت * قرار دهید این اسکریپت هر دقیقه از هر ساعت ، هر روز از ماه و هر روز هفته به طور مداوم اجرا خواهد شد! برای اینکه موضوع قشنگ برای شما جا بیفتد باید به طور مکرر تمرین کنید و مباحث را مرور کنید و سناریو های مختلف برای خودتان اجرا کنید.

نویسنده : امیرحسین کریم پور

منبع : جزیره لینوکس و سیستم های متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر نام نویسنده و منبع دارای اشکال اخلاقی میباشد


امیرحسین کریم پور
امیرحسین کریم پور

مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

امیرحسین کریم پور ، مدیر ارشد توسینسو ، متخصص شبکه ، تخصص در حوزه سیستم عامل های کلاینت و سرور مایکروسافت و سرویس های مربوطه ، سیستم عامل لینوکس و... ، سابقه کار با سازمان ها و شرکت های مختلف در زمینه سرویس های مایکروسافت در قالب پروژه ، مشاوره و آموزش. علاقه مند به حوزه امنیت اطلاعات و تست نفوذ سنجی

نظرات