سلام خدمت تمامی دوستان عزیز

امروز میخواهیم با Job-scheduling یا نحوه برنامه ریزی اجرایی اسکریپت ها یا نرم افزارها در سیستم عامل لینوکس آشنا بشیم و ببینیم چطور میشه به عنوان یک مدیر شبکه یا سیستم یک سری از کارهایی رو که روزانه مورد نیاز ما هست رو به صورت اتوماتیک و در فواصل زمانی مختلف مانند دقیقا، ساعت، روز، هفته، ماه و سال و یا در یک زمان خاص اجرا کنیم و کارهای روتین و روزانه رو به سیستم واگذار کنیم

در این مقاله ما با دو نرم افزار بسیار پر کاربرد در زمینه Job-scheduling در سیستم عامی های یونیکسی آشنا میشیم که عبارتند از Cron و At که هر کدوم از این نرم افزار ها برای یک منظور خاص ساخته شده اند

نرم افزار cron برای این هدف ساخته شده که بتوان در فواصل زمانی مختلف و به تناوب یک کاری رو انجام داد و نرم افزار at  برای این منظور مورد استفاده قرار میگیرد که شما یک کار خاص رو در زمانی خاص ساعت و تاریخ خاص یک بار انجام داده و اجرا بکنید

نرم افزارهای cron و at هردو شامل دیمن هایی هستند که این دیمن ها در هر لحظه لیست خودشون رو چک میکنند و اون نرم افزار یا اسکریپتی که باید در آن زمان خاص اجرا شود رو اجرا میکنند

فایل های کانفیک نرم افزار cron در شاخه etc وجود دارد که شما میتوانید با اسم cron.conf پیداش کنید

شما میتوانید از طریق سیستم کنترل این سرویس هارو فعال یا غیر فعال کنید همانند زیر:

sudo systemctl start cron

که این سرویس به صورت پیش فرض فعال است و نیاز به فعال سازی نداره، در مورد فعال سازی این نکته مهم است که اگر فقط سرویس start سود بعد از ریبوت این سرویس خاموش است برای جلوگیری از این منظور سرویس باید enable هم باشد

برای اینکه ببینید این سرویس ها در سیستم شما فعال هستند کافیه با دستور ps لیست پروسه ها رو ببینید و با گرپ cron یا at را جدا کنید

kia@linux-pc:/etc$ ps ax | grep cron
  ۵۲۸ ?        Ss     0:00 /usr/sbin/cron -f
 ۳۶۲۰ pts/0    S+     0:00 grep cron
kia@linux-pc:/etc$ ps ax | grep atd
 ۳۶۲۷ pts/0    S+     0:00 grep atd

خب حالا با هم نگاهی به کنترل این نرم افزار های بیاندازیم

وارد مسیر etc شوید و فایل crontab را باز کنید، این فایل به عنوان فایل اصلی نرم افزار cron شناخته میشود و شامل مثال ها و راهنماهایی هم برای افراد است که بتوانید راحت job های خود را تنظیم کنید

این فایل در واقع برای یوزر های مختلف ساخته میشود و هر یوزر فایل خاص خودش را دارد، به عنوان مثال اگر روت (مدیر اصلی) یک سری job ها را در crontab خود قرار دهد این job ها در crontab یوزرهای عادی دیده نمیشود

kia@linux-pc:/etc$ cat crontab 
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
۱۷ *	* * *	root    cd / && run-parts --report /etc/cron.hourly
۲۵ ۶	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
۴۷ ۶	* * ۷	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
۵۲ ۶	۱ * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

چیزی که در اینجا مهم است، اول شل اجرایی است تا برای نرم افزار cron مشخص باشد job ها را به چه شلی اجرا کند و سپس مسیر مربوطه برای اجرا کردن دستورات مورد نیاز است و در انتها باید اسکریپت ها و نرم افزار هایی که اجرا شوند را با یک فرمت خاص بنویسیم

نکته ای که در بالا مهم است، رعایت نوع خاص تعریف job ها است و چیزهایی که در اینجا مهم هستند، زمان ها هستند

ما ابتدا باید دقیقه و ساعت را مشخص کنیم که مکان آنها با حروف m و h  نمایش داده شده است به عنوان مثال اعداد ۲۳ ۳۰ را اگر وارد کنید به معنای اجرای job در ساعت ۲۳ دقیقه ۳۰ است که شما میتونید در اینجا از * هم استفاده کنید، همانطور که میدانید * به معنای هر است که اگه ما بر فرض مثال * * را وارد کنیم اینجوری خوانده میشود که اسکریپت ما هر دقیقه از هر ساعت اجرا شود که این را میتونید برای هفته و ماه و سال هم قرار دهید و بعد از این دستور اسکریپت یا نرم افزار را مشخص میکنید به این شکل

۲ ۰  * * ۷ root cd /root && tar -cjf home_backup.tar.bz2 /home/*

که این دستور در هر هفته ساعت ۲ شب از home بک آپ میگیرد و فایل فشرده را در home قرار میدهد

البته به نظر من درست نیست فایل crontab اصلی را دستکاری کنید، شما میتونید از سویچ های کران استفاده کنید تا برای یوزر شما فایل crontab ایجاد شود

با دستور crontab -l میتوانید به لیست های موجود برای یوزر خودتان دسترسی داشته باشید

با دستور crontab -e و انتخاب یک ادیتور میتوانید یک فایل crontab برای یوزر خودتان تعریف کنید

و با دستور crontab -r میتوانید یک crontab را پاک کنید

برای تعریف یک job شما میتونید از کلمات از پیش تعریف شده هم استفاده کنید به عنوان مثال

@reboot /home/kia/script.sh
@yearly
@monthly
@weekly
@daily
@midnight
@hourely

 

خب به نظر من برای cron تا اینجا کافی است، البته نرم افزار cron کانفیگ و ریزه کاری زیاد دارد که میتوانید با چند جستجوی ساده در اینترنت همه قسمت ها و کارهایی که میتوانید انجام دهید را یاد بگیرید، در اینجا بیشتر هدف آشنایی با Job scheduling است

بعد از cron بهتر است کمی راجب نرم افزار at هم صحبت کنیم

این نرم افزار هم مانند نرم افزار cron شامل دیمن هایی است که هر لحظه چک میکنند چه دستوری باید اجرا شود

این نرم افزار سه دستور دارد که شمال at برای تعریف یک job جدید

دستور atq برای لیست کردن at هایی که برای یوزر وجود دارد و دستور atrm برای پاک کردن یک at خاص مورد استفاده قرار میگیرد

برای استفاده از دستور at شما میتوانید حالت های مختلف را برای زمان و تاریخ خاص در نظر بگیرید که پیشنهاد میکنم حتما یک بار من پیج at را مطالعه کنید تا با حالت های مختلف این نرم افزار آشنا شوید

در اینجا فقط یک مثال ساده برای نرم افزار at ذکر میشود

at  21:30 2019-09-1 
at> python /home/kia/bitcoin.py

بعد از اینکه زمان مشخص شد با زدن enter توسط شل اجرا میشود و در هر خط از شما یک دستور میگیرد تا at شما ساخته شود

بد از اینکه تمام دستورات را وارد کردیم با کلید های ترکیبی ctrl + d به گرفتن دستورات خاتمه دهید و نرم افزار at برای شما آماده میشود

امیدوارم از این مقاله استفاده کرده باشید

موفق و پیروز باشید

 

کیا حامدی

www.kiahamedi.ir

kia.arta9793@gmail.com

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *