
زمان بندی کارها و برنامه ها در هر سیستم عاملی از جمله سیستم عامل لینوکس ، امری ضروری میباشد. در خیلی از مواقع، ما نیاز داریم که در زمانهای مشخص وظایفی(Tasks) را، سیستم عامل برایمان انجام داده و یا برنامههایی را اجرا نماید. کارهایی مثل گرفتن نسخهی پشتیبان، یا گزارشگیری از وضعیت لاگهای سیستم، ارسال ایمیل و یا اجرای برنامهی مورد نظر، در زمان یا زمانهای خاص، میتوانند، نیاز به زمان بندی داشته باشند. مخصوصا در مدیریت سرورها، زمانبندی کردن وظایف،نظارت و رسیدگی به آنها را راحتتر میسازد.
زمان بندی کارها در لینوکس ، توسط دیمونهای crond و atd انجام میشود. از cron برای زمان بندی اغلب کارها و برنامههای تکرارپذیر، در لینوکس استفاده میگردد. دستور at ، زمانی استفاده میشود، که یک کار یا دستور، فقط برای یک مرتبه، اجرا گردد.
زمان بندی کارها در لینوکس با cron
دیمون crond، امکانات مختلف را، برای ارائهی سرویس cron فراهم میسازد. cron دارای انعطاف زیادی در کار زمانبندی میباشد. به هر کار(Task) یا وظیفه cron job گفته میشود. cron jobها باعث خودکارسازی مدیریت و نگهداری از سیستم میگردند. هر کار (Task)، میتواند بر حسب دقیقه، ساعت، روز، هفته، ماه، روزی از هفته و یا ترکیبی از آنها زمانبندی گردد.
فایل پیکربندی cron
کارها یا (Task) هایی که در یک سیستم زمانبندی میشوند، به دو دسته تقسیم میشوند. دستهی اول کارهایی است که مربوط به یک کاربر خاص است و آن کاربر، نیاز به زمانبندی کردن آنها دارد. فایل پیکربندی مربوط به هر کاربر در صورتی که از توزیع های ردهت یا فدورا استفاده گردد در مسیر var/spool/cron/ و در صورتی که از توزیعهای دبیان و یا اوبونتو استفاده گردد در مسیر var/spool/cron/crontabs/ و به نام همان کاربر ایجاد خواهد شد. در این حالت برای زمان بندی کارهای مورد نیاز، از دستور crontab -e استفاده مینماییم. بعد از ایجاد Task جدید در فایل و ذخیره سازی آن، نیاز به restart مجدد سرویس crond نمیباشد و Task در صف زمانبندی قرار میگیرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
kazemian@upgradeit~$ 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های سیستمی است که اجرای آنها، نیاز به سطح دسترسی root میباشد. فایل تنظیمات برای cron jobهای سیستمی، در مسیر etc/crontab/ قرار دارد. در زیر، یک فایل crontab را به طور نمونه مشاهده میکنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# /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 # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) 30 3 * * * root /usr/sbin/example |
همان طور که مشاهده مینمایید، هر دستور یا برنامه را میتوان در زمان تعیین شده با پارامترهای لازم، در این فایل قرار داده و در زمانهای مورد نظر اجرا نماییم. به عنوان مثال در خط شمارهی 23 در ساعت 3:30 صبح، دستور usr/sbin/example/ با پرمیشن root هر روزه اجرا میگردد.
حالت کلی Task
حالت کلی Task زمانبندی شده، به صورت زیر است:
1 2 3 |
A B C D E /directory/Command output |
A B C D E، که در آن [59-0]A دقیقه، [23-0]B ساعت، [31-0]C روز، [12-0]D ماه، [7-0]E روز از هفته میباشد. پنج فیلد اول، می توانند به صورت یک و یا چند مقدار بیایند. علائمی که در هر فیلد میتوانند بهکار روند، به شرح زیر میباشد:
(*) در حالتی به کار میرود که مقدار زمان برای همیشه(always) باشد.
(/) در حالتی که بخواهیم یک Task، در بازههای چند مرحلهای از یک زمان باشد. مثلا برای فیلد دقیقه 10/* به معنی هر 10 دقیقه یکبار، میباشد.
(,) در صورتیکه چند مقدار با کاما جدا شوند، به معنی اجرای Task در هر یک از مقادیر داده شده است. مثلا برای فیلد ساعت، 3,4 به معنی اجرای Task در ساعت 3 و ساعت 4 میباشد.
(–) این کاراکتر range زمان اجرا را، نشان میدهد. مثلا 6-3 برای فیلد روز، به معنای روز سوم تا روز ششم میباشد.
directory/Command/ ، مسیر دستور و یا اسکریپت مورد نظر، برای اجرا میباشد.
output نوع خروجی مشخص می گردد.
در مثال زیر، برای اجرای یک Task در هر 10 دقیقه، به صورت زیر، عمل میکنیم:
1 2 3 |
*/10 * * * * /directory/Command output |
در سرورها معمولا نتیجهی خروجی دستور را، بر روی یک فایل ذخیره میکنیم. در صورتی که بخواهیم ارسال خروجی دستور را، حذف نماییم، مانند زیر عمل میکنیم:
1 2 3 |
* 11 * * /directory/Command > /dev/null 2>&1 |
anacron
کارکرد anacron، شبیه cron میباشد، با این تفاوت که اگر در زمان تعیین شده، کامپیوتر، در حالت خاموش قرار داشت، به محض بالا آمدن سیستم، Taskهای زمان بندیشده، اجرا میشوند. نکتهای که باید ذکر شود، این است که، Taskهای انجام نشده، برای یکبار اجرا میشوند. مثلا اگر اجرای Task خاصی باید هر روز، در ساعت شش بعدازظهر، انجام شود و چهار روز این Task اجرا نشده باشد، anacron، آن را برای یک بار اجرا میکند. سرویس anacron برای سیستمهایی که همیشه روشن نیستند، مثل لپتاپها و یا کامپیوترهای رومیزی، میتواند مناسب باشد. فایل کانفیگ anacron در مسیر etc/anacrontab/ قرار دارد.
زمان بندی با at
در صورتی که یک دستور و یا یک برنامه فقط یک بار نیاز به اجرا شدن داشته باشد، میتوانیم از این دستور استفاده نماییم. برای نصب at در دبیان، از ذستور زیر استفاده می کنیم:
1 2 3 |
kazemian@upgradeit:~$ apt-get install at |
برای زمانبندی اجرای یک Task، در at از روش زیر استفاده می کنیم. با دسنور atq میتوانیم تعداد Taskهای در حال انتظار را مشاهده نماییم.
1 2 3 4 5 6 7 8 9 10 |
kazemian@upgradeit:~$ at 11:59 PM monday warning: commands will be executed using /bin/sh at> echo "This is a test." > test.txt at> ^D job 9 at Mon Mar 1 23:59:00 2021 kazemian@upgradeit:~$ atq 9 Mon Mar 1 23:59:00 2021 a kazemian kazemian@upgradeit:~$ |