زمان بندی انجام دستورات با Cron
اندازه متن:
1
2
3
4
I. زمان بندی !
زمانبندی
(Schedule) را می توان هنر یک مدیر دانست ، البته نه به این معنا که
کاربران نباید این کار را در فهرست مهارت های خود قرار دهند بلکه به این
معنا که یکی از وظایف اصلی مدیران سیستم همانا زمان بندی انجام کار هاست.
یک مدیر باید روزانه از سیستم خود یک نسخه ی پشتیبان بگیرد ، بازرسی های
امنیتی سیستم را انجام دهد ، به فایل های گزارش روزانه یا log ها سرکشی
کند و بسیاری کار دیگر که بر عهده ی اوست ، این جاست که زمان بندی کار ها
به میان می آید ، شماهر چقدر هم که فرد باهوش و با دقتی باشید باز هم سیل
کارهای مختلف در روز می تواند باعث فراموشی و یا اشتباه در کارتان شود ،
این همان چیزیست که هرگز نباید رخ بدهد.
برای جلوگیری از خطاهای
انسانی این وظایف را به کامپیوتر می سپارند ، در سیستم عامل لینوکس و اغلب
یونیکس ها از برنامه ای به نام cron برای زمانبندی کارها استفاده می شود.
()
به این وسیله شما به راحتی می توانید با وارد کردن دستور برای یکبار این
وظیفه را به کامپیوتر خود واگذار کنید ، از این پس این کامپیوتر شماست که
دستورات را به موقع انجام می دهد.
corn .II و استفاده از آن !
همان
طور که در بالا گفتیم برای زمانبندی در لینوکس از برنامه ی cron که نوشته
ی Paul Vixie می باشد استفاده می کنیم. این برنامه در اغلب توزیع های
لینوکس و یونیکس ها وجود دارد.
این برنامه یک Deamon (
بخوانید/Daymen/ یا /Dimen/ ) دارد که همواره در پشت صحنه ی سیستم شما در
حال اجراست و فایل های ورودی خود را چک می کند ، به محض مشاهده ی کاری در
زمان خاص آن کار را انجام می دهد.
به فایل های ورودی ، crontab می
گویند ، شما باید دستورات خود را در این فایل ها اضافه کنید و زمان اجرای
دستور را نیز قید کنید ، به محض فرارسیدن زمان اجرای دستور ، دایمن Cron
این دستور یا دستورات را انجام خواهد دد.
توجه داشته باشید که بعد از
انجام تغییرات در فایل های Crontab نیازی به راه اندازی مجدد Cron Deamon
وجود ندارد و cron خودش این تغییرات را تشخیص و به آن ها عمل خواهد کرد.
در واقع cron هر دقیقه یک بار دایرکتوری های var/spool/cron/ و
etc/cron.d/ و فایل etc/crontab/ را چک می کند ، به این نوع Deamon ها
بیدار باش یا ""Wakes up"" می گویند (بیدار باش ترجمه ای لغتی است و مفهوم
wakes up حواس جمع بودن و دائم سر پست حاضر بودن است).
بسیار
خوب تا به این جا روند انجام کار را بررسی کردیم. تنها کاری که شما باید
انجام بدهید ویرایش فایل etc/crontab/ و اضافه کردن دستورات خود در این
فایل است. برای درک بهتر نظر شما را به نمونه ای از این فایل در سیستم
خودم جلب می کنم :
SHELL=/bin/bash
MAILTO=gnuiranorg
PATH=/usr/bin:
/usr/sbin:
/sbin:
/bin:
/usr/lib/news/bin
MAILTO=root
# check s in cron.hourly, cron.daily, cron.weekly, and
#cron.monthly
-*/15 * * * * root test -x
/usr/lib/cron/run-crons &&
/usr/lib/cron/run-crons >/dev/null 2>&1
59 * * * * root rm -f
/var/spool/cron/lastrun/cron.hourly
14 4 * * * root rm -f
/var/spool/cron/lastrun/cron.daily
9 4 * * 6 root rm -f
/var/spool/cron/lastrun/cron.weekly
44 4 1 * * root rm -f
/var/spool/cron/lastrun/cron.monthly
02 4 * * * root run-parts
شاید
ظاهر این فایل کمی غیر معمول به نظر برسد امابا دانستن روش وارد کردن
دستور خواهید دید که بسیار هم ساده و جالب است. نظری به خط آخر می اندازیم
؛ این خط با ? قسمت آغاز می شود:
اولی دقیقه (? تا ??) ، دومی ساعت (?
تا ??) ، سوم روز از ماه (?-??) ، چهارم ماه (?-??) و آخرین بخش نام روز
از هفته ( ?-? که ?و? نمایش دهنده ی یکشنبه هستند) . برای ماه و روزهای
هفته شما می توانید سه حرف اول این مقادیر به انگلیسی را نیز استفاده کنید.
شما می توانید مقادیر کلی یا طول مدتی را با استفاده از موارد زیر استفاده کنید :
با
استفاده از کاراکتر "*" (بخوانید Asterisk یا استریسک [?] ) این کاراکتر
به معنی تمام طول مدت انجام کار است مثلا اگر در فلید یا بخش دقیقه این
علامت وارد شود یعنی در تمام ?? دقیقه این کار انجام شود.
لیستی از اعداد که توسط کاما "," از یکدیگر جدا شده اند ، corn با برخورد به هر کدام از مقادیر آن را اجرا خواهد کرد.
مثلا 20 , 10,16 یعنی در دقایق یا ساعات 20 و 16 و10 این کار انجام شود.
دامنه
ای از مقادیر که با هایفن یا "-" از هم جدا شده باشند ، برای نمونه 8-18
اگر در بخش ساعت یعنی دومین بخش به کار برود بین ساعات 8 صبح و 6 بعد از
ظهر هر1 ساعت این کار انجام می شود و یا اگر در بخش اول یعنی دقیقه باشد
بین دقایق 8 و 18 ساعت مورد نظر این کار انجام می شود (سر هر دقیقه) .
یک
اسلش "/" با استفاده از یک اسلش شما می توانید یک کار را در یک سیکل زمانی
انجام دهید ، برای نمونه 15/* باعث می شود که یک کار هر 15 دقیقه یک بار
انجام گیرد.
بعداز? قسمت اول نام کاربری که قرار است این
دستور را اجرا نماید نوشته شده است و سپس دستوری که قرار است اجرا شود (
در این جا run-parts) بنابر این این برنامه هر روز و درساعت 4:
02 صبح اجرا می شود.
برای ایجاد یک دستور جدید کافیست آن را به فایل etc/crontab/ اضافه کنید ،
برای این کار باید دارای مجوز ریشه باشید و برنامه ی شما با مجوز ریشه
اجرا خواهد شد.
اما این می تواند کمی برای کاربران معمولی سیستم
ناراحت کننده باشد ، برای این که یک کار بر بتواند از این سیستم زمانبدنی
استفاده کند بخش بعد را مطالعه فرمایید.
III. ایجاد فرمان ها توسط کاربر
برای
ایجاد این فرمان ها شما باید از ابزار crontab استفاده کنید اما نه با
ویرایش فایل ! قبل از ادامه همین جا باید با واژه ی cron job آشنا شوید ،
همان طور که از معنی این لغت بر می آید cron job یک کار cron است در واقع
به هر یک از فرمان هایی که در زمان خاص اجرا می شود یک cron job می گویند.
در واقع ما برای هر کاری یک cron job می سازیم. ساختار کلی ابزار crontab به شکل زیر است :
crontab [-u user] [-l | -e | -r] [file]
شاید
ظاهرش کمی شلوغ است اما اگر بدانید که وجود "" [] "" ها به این معنیست که
شما می توانید این بخش را در ساختار دستور به کار ببرید یا اگر خواستید
استفاده نکنید ;) در واقع اگر شما u User- را وارد نکنید ابزار crontab با
کاربری که آن را اجرا کرده است اجرا می شود ولی اگر بخواهید با نام کاربری
دیگر آن را اجرا کنید برای نمونه وارد می کنید u tux- و از این ابزار
استفاده می کنید.
اگر می خواهید به طور مستقیم برروی یک cron job کار کنید کافیست از دستوراتی که در کروشه ی دوم آمده اند استفاده کنید:
l- وظایف یا همان cron job های کنونی را نمایش می دهد.
e-
برای ویرایش cron job حاضر به کار می رود که درواقع خودش یک Vi را باز می
کند و فایل crontab را در آن قرار می دهد تاشما وظیفه ای را اضافه یا کم
کنید یا وظایف کنونی را تغییر بدهید.
[?]
r- این گزینه هم برای پاک کردن وظایف کنونی به کار می رود.
(علامت های | بدین معنی هستند که شما فقط یکی از آن سه گزینه را می توانید استفاده کنید.
)راه دیگر این است که شما یک فایل وظایف یا cron job file ایجاد کنید و در
محلی ذخیره کنید و آن را با همین ابزارو گزینه ی file وارد جداول وظایف
بکنید :
crontab -u tux my_cron__file
شما می توانید حتی مقادیر متغییر های محیطی را نیز در یک فایل cron تغییر بدهید برای این کار کافیست از این الگو پیروی کنید :
VARIABLE=value
مثلا برای HOME مقدار home/tux/ را قرار بدهید .(HOME=/home/tux) . در
نمونه ی زیر این فایل cron هر ?? دقیقه ایمیل های آمده را فرا می خواند :
SHELL=/bin/bash
MAILTO=tux
HOME=/home/tux
0,30 * * * * /usr/bin/fetchmail -s
البته
Paul فکری هم برای جلوگیری از پیچیدگی کار کرده ، اگر می خواهید هر روز ،
هرماه ، هر نیمه شب یا هر بار که سیستم را روشن می کنید عملی انجام شود می
توانید از مقادیر گفته شده در بالا یا مقادیر جدول زیر که به اطر سپردنشان
راحت تر است استفاده کنید.
مقدار معادل
@reboot
در زمان هر بار بوت شدن سیستم
@yearle 0 0 1 1 *
@annually
مانند بالایی
@mounthly
0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@midnight همانند بالایی
@hourly 0 * * * *
بسیار
خوب حالا می توانید کار هایتان را به کامپیوتر لینوکستان بسپارید و دیگر
نگران تنظیم وقت خود نباشید ، خوب بازی با اعداد را شروع کنید تا کاملا به
این ابزار مسلط شوید ;)
[?] به کاراکتر استریسک یا * در گوشی
های تلفن Star یا ستاره می گویند و نامیدن ستاره یا Star در کامپیوتر برای
این کاراکتر اشتباه است.
[?] اگر نمی خواهید با vi کار هایتان را انجام
دهید کافیست ویرایشگر پیش فرض سیستم خود را از vi به ویرایشگر مورد علاقه
ی خود تغییر دهید برای این کار باید متغییر محیطی VISUAL و EDITOR را
تغییر دهید.
I. زمان بندی !
زمانبندی
(Schedule) را می توان هنر یک مدیر دانست ، البته نه به این معنا که
کاربران نباید این کار را در فهرست مهارت های خود قرار دهند بلکه به این
معنا که یکی از وظایف اصلی مدیران سیستم همانا زمان بندی انجام کار هاست.
یک مدیر باید روزانه از سیستم خود یک نسخه ی پشتیبان بگیرد ، بازرسی های
امنیتی سیستم را انجام دهد ، به فایل های گزارش روزانه یا log ها سرکشی
کند و بسیاری کار دیگر که بر عهده ی اوست ، این جاست که زمان بندی کار ها
به میان می آید ، شماهر چقدر هم که فرد باهوش و با دقتی باشید باز هم سیل
کارهای مختلف در روز می تواند باعث فراموشی و یا اشتباه در کارتان شود ،
این همان چیزیست که هرگز نباید رخ بدهد.
برای جلوگیری از خطاهای
انسانی این وظایف را به کامپیوتر می سپارند ، در سیستم عامل لینوکس و اغلب
یونیکس ها از برنامه ای به نام cron برای زمانبندی کارها استفاده می شود.
()
به این وسیله شما به راحتی می توانید با وارد کردن دستور برای یکبار این
وظیفه را به کامپیوتر خود واگذار کنید ، از این پس این کامپیوتر شماست که
دستورات را به موقع انجام می دهد.
corn .II و استفاده از آن !
همان
طور که در بالا گفتیم برای زمانبندی در لینوکس از برنامه ی cron که نوشته
ی Paul Vixie می باشد استفاده می کنیم. این برنامه در اغلب توزیع های
لینوکس و یونیکس ها وجود دارد.
این برنامه یک Deamon (
بخوانید/Daymen/ یا /Dimen/ ) دارد که همواره در پشت صحنه ی سیستم شما در
حال اجراست و فایل های ورودی خود را چک می کند ، به محض مشاهده ی کاری در
زمان خاص آن کار را انجام می دهد.
به فایل های ورودی ، crontab می
گویند ، شما باید دستورات خود را در این فایل ها اضافه کنید و زمان اجرای
دستور را نیز قید کنید ، به محض فرارسیدن زمان اجرای دستور ، دایمن Cron
این دستور یا دستورات را انجام خواهد دد.
توجه داشته باشید که بعد از
انجام تغییرات در فایل های Crontab نیازی به راه اندازی مجدد Cron Deamon
وجود ندارد و cron خودش این تغییرات را تشخیص و به آن ها عمل خواهد کرد.
در واقع cron هر دقیقه یک بار دایرکتوری های var/spool/cron/ و
etc/cron.d/ و فایل etc/crontab/ را چک می کند ، به این نوع Deamon ها
بیدار باش یا ""Wakes up"" می گویند (بیدار باش ترجمه ای لغتی است و مفهوم
wakes up حواس جمع بودن و دائم سر پست حاضر بودن است).
بسیار
خوب تا به این جا روند انجام کار را بررسی کردیم. تنها کاری که شما باید
انجام بدهید ویرایش فایل etc/crontab/ و اضافه کردن دستورات خود در این
فایل است. برای درک بهتر نظر شما را به نمونه ای از این فایل در سیستم
خودم جلب می کنم :
SHELL=/bin/bash
MAILTO=gnuiranorg
PATH=/usr/bin:
/usr/sbin:
/sbin:
/bin:
/usr/lib/news/bin
MAILTO=root
# check s in cron.hourly, cron.daily, cron.weekly, and
#cron.monthly
-*/15 * * * * root test -x
/usr/lib/cron/run-crons &&
/usr/lib/cron/run-crons >/dev/null 2>&1
59 * * * * root rm -f
/var/spool/cron/lastrun/cron.hourly
14 4 * * * root rm -f
/var/spool/cron/lastrun/cron.daily
9 4 * * 6 root rm -f
/var/spool/cron/lastrun/cron.weekly
44 4 1 * * root rm -f
/var/spool/cron/lastrun/cron.monthly
02 4 * * * root run-parts
شاید
ظاهر این فایل کمی غیر معمول به نظر برسد امابا دانستن روش وارد کردن
دستور خواهید دید که بسیار هم ساده و جالب است. نظری به خط آخر می اندازیم
؛ این خط با ? قسمت آغاز می شود:
اولی دقیقه (? تا ??) ، دومی ساعت (?
تا ??) ، سوم روز از ماه (?-??) ، چهارم ماه (?-??) و آخرین بخش نام روز
از هفته ( ?-? که ?و? نمایش دهنده ی یکشنبه هستند) . برای ماه و روزهای
هفته شما می توانید سه حرف اول این مقادیر به انگلیسی را نیز استفاده کنید.
شما می توانید مقادیر کلی یا طول مدتی را با استفاده از موارد زیر استفاده کنید :
با
استفاده از کاراکتر "*" (بخوانید Asterisk یا استریسک [?] ) این کاراکتر
به معنی تمام طول مدت انجام کار است مثلا اگر در فلید یا بخش دقیقه این
علامت وارد شود یعنی در تمام ?? دقیقه این کار انجام شود.
لیستی از اعداد که توسط کاما "," از یکدیگر جدا شده اند ، corn با برخورد به هر کدام از مقادیر آن را اجرا خواهد کرد.
مثلا 20 , 10,16 یعنی در دقایق یا ساعات 20 و 16 و10 این کار انجام شود.
دامنه
ای از مقادیر که با هایفن یا "-" از هم جدا شده باشند ، برای نمونه 8-18
اگر در بخش ساعت یعنی دومین بخش به کار برود بین ساعات 8 صبح و 6 بعد از
ظهر هر1 ساعت این کار انجام می شود و یا اگر در بخش اول یعنی دقیقه باشد
بین دقایق 8 و 18 ساعت مورد نظر این کار انجام می شود (سر هر دقیقه) .
یک
اسلش "/" با استفاده از یک اسلش شما می توانید یک کار را در یک سیکل زمانی
انجام دهید ، برای نمونه 15/* باعث می شود که یک کار هر 15 دقیقه یک بار
انجام گیرد.
بعداز? قسمت اول نام کاربری که قرار است این
دستور را اجرا نماید نوشته شده است و سپس دستوری که قرار است اجرا شود (
در این جا run-parts) بنابر این این برنامه هر روز و درساعت 4:
02 صبح اجرا می شود.
برای ایجاد یک دستور جدید کافیست آن را به فایل etc/crontab/ اضافه کنید ،
برای این کار باید دارای مجوز ریشه باشید و برنامه ی شما با مجوز ریشه
اجرا خواهد شد.
اما این می تواند کمی برای کاربران معمولی سیستم
ناراحت کننده باشد ، برای این که یک کار بر بتواند از این سیستم زمانبدنی
استفاده کند بخش بعد را مطالعه فرمایید.
III. ایجاد فرمان ها توسط کاربر
برای
ایجاد این فرمان ها شما باید از ابزار crontab استفاده کنید اما نه با
ویرایش فایل ! قبل از ادامه همین جا باید با واژه ی cron job آشنا شوید ،
همان طور که از معنی این لغت بر می آید cron job یک کار cron است در واقع
به هر یک از فرمان هایی که در زمان خاص اجرا می شود یک cron job می گویند.
در واقع ما برای هر کاری یک cron job می سازیم. ساختار کلی ابزار crontab به شکل زیر است :
crontab [-u user] [-l | -e | -r] [file]
شاید
ظاهرش کمی شلوغ است اما اگر بدانید که وجود "" [] "" ها به این معنیست که
شما می توانید این بخش را در ساختار دستور به کار ببرید یا اگر خواستید
استفاده نکنید ;) در واقع اگر شما u User- را وارد نکنید ابزار crontab با
کاربری که آن را اجرا کرده است اجرا می شود ولی اگر بخواهید با نام کاربری
دیگر آن را اجرا کنید برای نمونه وارد می کنید u tux- و از این ابزار
استفاده می کنید.
اگر می خواهید به طور مستقیم برروی یک cron job کار کنید کافیست از دستوراتی که در کروشه ی دوم آمده اند استفاده کنید:
l- وظایف یا همان cron job های کنونی را نمایش می دهد.
e-
برای ویرایش cron job حاضر به کار می رود که درواقع خودش یک Vi را باز می
کند و فایل crontab را در آن قرار می دهد تاشما وظیفه ای را اضافه یا کم
کنید یا وظایف کنونی را تغییر بدهید.
[?]
r- این گزینه هم برای پاک کردن وظایف کنونی به کار می رود.
(علامت های | بدین معنی هستند که شما فقط یکی از آن سه گزینه را می توانید استفاده کنید.
)راه دیگر این است که شما یک فایل وظایف یا cron job file ایجاد کنید و در
محلی ذخیره کنید و آن را با همین ابزارو گزینه ی file وارد جداول وظایف
بکنید :
crontab -u tux my_cron__file
شما می توانید حتی مقادیر متغییر های محیطی را نیز در یک فایل cron تغییر بدهید برای این کار کافیست از این الگو پیروی کنید :
VARIABLE=value
مثلا برای HOME مقدار home/tux/ را قرار بدهید .(HOME=/home/tux) . در
نمونه ی زیر این فایل cron هر ?? دقیقه ایمیل های آمده را فرا می خواند :
SHELL=/bin/bash
MAILTO=tux
HOME=/home/tux
0,30 * * * * /usr/bin/fetchmail -s
البته
Paul فکری هم برای جلوگیری از پیچیدگی کار کرده ، اگر می خواهید هر روز ،
هرماه ، هر نیمه شب یا هر بار که سیستم را روشن می کنید عملی انجام شود می
توانید از مقادیر گفته شده در بالا یا مقادیر جدول زیر که به اطر سپردنشان
راحت تر است استفاده کنید.
مقدار معادل
@reboot
در زمان هر بار بوت شدن سیستم
@yearle 0 0 1 1 *
@annually
مانند بالایی
@mounthly
0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@midnight همانند بالایی
@hourly 0 * * * *
بسیار
خوب حالا می توانید کار هایتان را به کامپیوتر لینوکستان بسپارید و دیگر
نگران تنظیم وقت خود نباشید ، خوب بازی با اعداد را شروع کنید تا کاملا به
این ابزار مسلط شوید ;)
[?] به کاراکتر استریسک یا * در گوشی
های تلفن Star یا ستاره می گویند و نامیدن ستاره یا Star در کامپیوتر برای
این کاراکتر اشتباه است.
[?] اگر نمی خواهید با vi کار هایتان را انجام
دهید کافیست ویرایشگر پیش فرض سیستم خود را از vi به ویرایشگر مورد علاقه
ی خود تغییر دهید برای این کار باید متغییر محیطی VISUAL و EDITOR را
تغییر دهید.
dostan.net
کلمات کلیدی : اینترنت، کامپیوتر، اموزش اینترنت، اموزش کامپیوتر، مقالات اموزشی اینترنت، مقالات کامپیوتروit، ملزومات و اصطلاحات کامپیوتری