۱۳۸۶/۰۹/۰۴

آموزش Crontab

linux

چگونه یک فایل Crontab بسازیم


سلام

Cron چیست؟


Cron ابزاری (سرویسی؟) است که دستورات shell را به صورت دوره ای، بر اساس زمانبندی داده شده اجرا می کند. Cron بوسیله crontab گردانیده می شود. Crontab فایل پیکربندی ای است که جزییات دستورات و جدول زمانبندی در آن نگهداری می شود.

ساختن یک فایل crontab


برای ایجاد یک فایل crontab دستور زیر را در terminal وارد کنید:
[bash]crontab -e[/bash]

با وارد کردن دستور بالا، ویرایشگر ترمینال (ویرایشگر پیش فرض در اوبونتو Nano است) به همراه یک بلوک جدید از فایل crontab (و یا crontab موجود، در صورتی که از قبل آن را داشته باشید) باز می شود.
در این مرحله شما باید قبل از بستن ویرایشگر، دستوراتی را که قصد اجرای آن ها را دارید، با توجه به syntax (دستور زبان؟ نحو؟) ای که در ادامه توضیح داده شده است وارد کنید.

بعد از بستن ویرایشگر، برای مشاهده تمام crontab های فعال، دستور زیر را در ترمینال وارد نمایید:
[bash]crontab -l[/bash]

دستور زبان Crontab
فایل crontab شش field (فیلد؟) معین به ترتیب دقیقه، ساعت، روز ماه (۱ تا ۳۱)، ماه، روز هفته (۰ تا ۶) و دستوری(دستوراتی) که باید اجرا شوند. در زیر فرم کلی این دستور را می بینید:
[bash]
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
[/bash]

مثال های crontab


نوشتن فایل crontab ممکن است برای اولین بار کمی گیج کننده به نظر برسد. بنابراین در زیر تعدادی مثال به همرا توضیح ارائه شده است:
[bash]
* * * * * <command>
#هر دقیقه اجرا می شوند - Runs every minute

30 * * * * <command>
#هر ۳۰ دقیقه اجرا می شوند - Runs at 30 minutes past the hour

45 6 * * * <command>
#هر روز ساعت ۶:۴۵ صبح اجرا می شوند - Runs at 6:45 am every day

45 18 * * * <command>
#هر روز صبح ساعت ۶:۴۵ بعد از ظهر اجرا می شوند - Runs at 6:45 pm every day

00 1 * * 0 <command>
#هر یکشنبه یاعت ۱ صبح(بامداد؟) اجرا می شوند - Runs at 1:00 am every Sunday

00 1 * * 7 <command>
#هر یکشنبه ساعت ۱ بامداد اجرا می شوند - Runs at 1:00 am every Sunday

00 1 * * Sun <command>
#هر یکشنبه ساعت ۱ بامداد اجرا می شوند - Runs at 1:00 am every Sunday

30 8 1 * * <command>
#اولین روز هر ماه ساعت ۸:۳۰ - Runs at 8:30 am on the first day of every month

00 0-23/2 02 07 * <command>
#Runs every other hour on the 2nd of July
[/bash]

علاوه بر مثال های بالا String های خاصی را می توان به کار برد:
[bash]
@reboot <command> #هنگام بوت سیستم اجرا می شود - Runs at boot
@yearly <command> #هر سال اجرا می شود - Runs once a year [0 0 1 1 *]
@annually <command> #هر سال اجرا می شود - Runs once a year [0 0 1 1 *]
@monthly <command> #هر ماه اجرا می شود - Runs once a month [0 0 1 * *]
@weekly <command> #هر هفته اجرا می شود - Runs once a week [0 0 * * 0]
@daily <command> #هر روز اجرا می شود - Runs once a day [0 0 * * *]
@midnight <command> #هر روز اجرا می شود - Runs once a day [0 0 * * *]
@hourly <command> #هر ساعت اجرا می شود - Runs once an hour [0 * * * *]
[/bash]

اجرای چندین دستور


برای اجرای چندین دستور پی درپی، آنها را با استفاده از "&&" به صورت پی در پی بنویسید. مثال زیر ابتدا دستور command_01 و سپس دستور command_02 را در هر روز اجرا می کند:
[bash]
@daily <command_01> && <command_02>
[/bash]

غیر فعال کردن اطلاع رسانی از طریق پیام


به صورت پیش فرض برنامه cron در هنگام اجرا کردن cronjob، یک پیام به کاربر ارسال می کند. در صورتی که می خواهید این امکان را غیر فعال کنید، کافیست خط زیر را به آخر برنامه cron خود اضافه کنید:
[bash]
>/dev/null 2>&1
[/bash]

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


همانطور که پیش تر در بالای همین مطلب ذکر شد، شما می توانید با دستور "crontab -e" یک فایل crontab بسازید. به هر حال ممکن است شما از قبل یک فایل crontab داشته باشید. برای مشخص کردن فایل خود، دستور زیر را وارد کنید:
[bash]
crontab -u username CRONTAB_FILE;
[/bash]

سپس دستور زیر را وارد کنید(به جای tux نام کاربری خود را بنویسید):
[bash]
crontab -u tux ~/crontab
[/bash]

فایل crontab کاربر tux با نام crontab در پوشه خانگی آن ذخیره شد.

حذف کردن فایل crontab


برای حذف فایل crontab، دستور زیر را در ترمینال وارد کنید:
[bash]
crontab -r
[/bash]

اطلاعات بیشتر
برای بدست آوردن اطلاعات بیشتر می توانید فایل manual مربوط به crontab را با استفاده از دستور زیر در ترمینال ببیند:
[bash]
man crontab
[/bash]

منابع


Howto Set-up a Crontab File
Cron article on Wikipedia
Ubuntu Documentation - CronHowto



موفق باشید

۱۶ نظر:

  1. سلام آقا خوبي؟
    مي دوني كه من زياد از حرفات سر در نميارم ولي خب اومدم بگم اميدوارم همينطور رو به جلو حركت كني و به چيزايي كه مد نظرت هست برسي!
    موفق باشي...

    پاسخحذف
  2. سعید خوشحالم که دوباره وبلاگ رو آپ کردی! به هرحال آموزش جالبی بود! [من که هیچی ازش نفهمیدم!]
    موفق باشی

    پاسخحذف
  3. همین دیروز درباره ی cron مطلبی خوندم و می خواستم ببینم چطور کار می کنه! (چه به موقع :D )
    جالب بود! ممنون...

    پاسخحذف
  4. مرد حسابی ما قبلا با هم حرف زده بودیم دیگه! آی دی منو داشتی خوب :(
    به هر حال اینم آی دی من توی یاهو: sincere_tux
    نمیدونم این متاهل ها چرا اینقدر حواس پرت میشن :D
    اون از پیشگویی که مفقود الاثر شده،‌اینم از تو :))

    پاسخحذف
  5. خداحافظ یوتیوب

    سلام خدمت شما

    من هم در جواب شما می گویم خداحافظ یوتیوب ….

    .یوتیوب در یک اقدام جدید سایت ای دسکتاپ رو راه اندازی کرده

    دعوت می کنیم که حتما” ببینید

    پاسخحذف
  6. سلام دوست خوبم من از شما یک تقاضا دارم
    من مدتها وقتی وبلاگ داشتم به شما گفتم و شما مرا لبینک نکردید ولی از شما خواهشی دارم حالا که من سایت با ز کردم مرا لینک کنید من چون نمی دانم که شما پیشنهاد مرا خواهید پذیرفت یا نه شما را لینک نمی کنم ومنتظر جوابتان هستم
    باز هم می گویم خواهش می کنم مرا لینک کنید
    amirata.net
    با نام دنیای آی تی
    لطفا پس از لینک دادن (یا ندادن) در بخس نظرات سایتم بگویید

    پاسخحذف
  7. salam
    man shayan hastam site olc.ir mikhastam agemishe to webloge shoma tablighat dashte basham
    OLC ye site amozeshe online zabane english hastesh
    mishe be man tams begirin
    info@olc.ir

    پاسخحذف
  8. واقعا ممنوم از آموزش کاملتون
    جناب زبردست من میخوام دستور ifconfig p2p1:0 192.168.65.3/24 بعد از هربار ریست غیر فعال نشود و به من گفتن از crontab استفاده کردم . میخوام بدونم آیا مراحل کارم درست بوده ؟ اگه آره چرا عمل نمیکند و اگر نه جسارتا درستش را مینویسین.مرسی . این دستوراتی هست که اجرا کردم:
    crontab -e
    @ reboot ifconfig p2p1:0 192.168.65.3/24
    * * * * * ifconfig p2p1:0 192.168.65.3/24
    :wq
    پیغام هم داد که cron با موفقیت نصب شد.ممنونم

    پاسخحذف
  9. سلام،

    اگه میخواید اون دستور به صورت خودکار همیشه بعد از بوت شدن کامیپوتر اجرا بشه، از cron استفاده نکنین. بلکه دستور رو در فایل زیر قرار بدین:
    [bash]
    /etc/profile
    [/bash]

    مورد دیگه اینکه وقتی دارید اطلاعات رو در crontab وارد میکنید، دستورات رو به صورت کامل وارد کنین. یعنی به جای ifconfig از آدرس کامل آن به صورت زیر استفاده کنین:
    [bash]
    /sbin/ifconfig
    [/bash]

    در نهایت برای دیدن لاگ اجرا شدن crontab، فایل‌های زیر رو بررسی کنین:
    [bash]
    /var/log/syslog
    [/bash]
    و یا
    [bash]
    /var/log/cron
    [/bash]
    و یا
    [bash]
    /var/log/cron.log
    [/bash]

    پیوند‌های زیر میتونن به شما کمک کنن:
    http://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
    و
    http://www.thegeekstuff.com/2012/07/crontab-log

    پاسخحذف
  10. واقعا از لطفتون سپاسگذارم . توی همان crontab آدرس کامل ifconfig که نوشتم درست شد. فقط جسارتا بازم سوال دارم میخوام تو linux با c یه برنامه بنویسم که یک فایل txt حاوی چندین ip هست رو بگیره و طبق آن یک سری تنظیمات شبکه را با استفاده از دستورات ترمینال انجام بدم .
    میخواستم بدونم با چه نرم افزاری در لینوکس کدنویسی c کنم بهتره؟ و اینکه برای کاری که توضیح دادم آیا جسارتا امکان داره راهنمایی کنید که چجور میتونم کار کنم که راحتتر باشه؟ ممنونم

    پاسخحذف
  11. سلام،

    من با برنامه‌نویسی C/C++ خیلی آشنا نیستم. با این حال با پرسشی که از دوستان انجام دادم، نرم‌افزارهای زیر رو پیشنهاد کردند:


    Eclipse CDT


    Code::Blocks


    Codelite



    من تجربه کار با اکلیسپ برای برنامه‌نویسی جاوا رو دارم. امکانات مناسبی رو در اختیار برنامه نویس قرار میده. دو تا بعدی رو تا الان امتحان نکردم.

    پاسخحذف
  12. ممنونم از محبتتون. جسارتا منبع آموزشی eclips رو شما ندارین؟ تو نت پیدا نکردم.مرسی

    پاسخحذف
  13. خواهش میکنم. متاسفانه منبع آموزشی برای اکلیپس سراغ ندارم. ولی مطمئنن مستندات زیادی به انگلیسی و یا حتی فارسی در مورد اکلیپس وجود دارد. اکلیپس گروه کاربری خیلی بزرگی در بین برنامه نویسان داره. آموزش زیر ممکنه برای شروع خوب باشه:
    http://www.ibm.com/developerworks/library/os-eclipse-stlcdt

    پاسخحذف