یکی از مفیدترین ابزارهای موجود در FreeBSD، ابزار cron است. این ابزار برای خودکارسازی وظایف و فرآیندها استفاده میشود. شما که نمیتوانید همیشه پشت کامپیوتر خود نشسته و پیوسته همه چیز را کنترل کنید! ابزار cron به صورت پیوسته در پسزمینه اجرا شده و همیشه فایل /etc/crontab را چک میکند. همچنین این ابزار دایرکتوری /var/cron/tabs را هم برای پیدا کردن فایلهای crontab چک میکند. فایلهای crontab به ابزار cron می گویند که چه وظایفی را باید در چه زمان هایی انجام دهد. مثلا در ساعت ۰۲:۰۰ بامداد هر جمعه، از فایلهای موجود در دایرکتوری /usr/home نسخه پشتیبان تهیه کرده و آنها را بر روی یک سرور راه دور ارسال کند.
ابزار cron دو نوع فایل پیکربندی مختلف دارد:
- فایل crontab سیستمی
- فایل crontab مربوط به کاربران
تنها تفاوت این فایل ها در فیلد ششم به بعد است. در فایل crontab سیستمی، cron وظایف خود را از طریق کاربری که در فیلد ششم مشخص شده به انجام میرساند. علاوه بر فایل crontab سیستمی، هر کاربر میتواند یک فایل crontab مخصوص به خود داشته باشد که تمام وظایف موجود در آن، توسط همان کاربر صاحب فایل انجام میشود. بنابراین فیلد ششم آخرین فیلد محسوب میشود. این یک ویژگی امنیتی مهم محسوب میشود. فیلد آخر همیشه دستوری است که باید اجرا شود.
حال نگاهی به یک فایل crontab سیستمی داشته باشیم:
# /etc/crontab - root's crontab for FreeBSD # # $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # (۱) # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin (2) HOME=/var/log # # #minute hour mday month wday who command (3) # # */۵ * * * * root /usr/libexec/atrun (4)
(۱) مانند دیگر فایلهای پیکربندی، می توان از کاراکتر # برای قرار دادن توضیحات استفاده کرد. تمام خطوط خالی هم نادیده گرفته میشوند. کاراکترهای space یا tab ای که در ابتدای خطوط قرار دارند هم نادیده گرفته میشوند. دقت کنید که خطوطی که حاوی دستورات هستند، نمی توانند توضیحات را هم دربرگیرند. چون توضیحات به عنوان جزئی از دستور تفسیر میشوند. به عبارتی دیگر، کاراکتر # فقط میتواند در ابتدای خطوط قرار گیرد و قرار دادن آن در دیگر موقعیتها باعث میشود تا این کاراکتر جزئی از دستور مورد نظر تفسیر شود.
(۲) ابتدا باید متغیرهای محیطی را مقدار دهی کنید. از کاراکتر = میتوانید برای مقداردهی این متغیرها استفاده کنید. به طور کلی نحوه تعریف متغیرها این گونه است:
name = value
در دو طرف = کاراکتر فضای خالی قرار دارد که اختیاری بوده و می توان از آن صرف نظر کرد.
در مثال بالا سه متغیر به نامهای PATH,SHELL و HOME تعریف شده است. اگر متغیر SHELL را تعریف نکنید، از شل sh استفاده خواهد شد. اگر متغیر PATH تعریف نشود، هیچ جایگزینی برای آن تعریف نشده و دستورات باید با مسیر کاملشان نوشته شوند. اگر HOME تعریف نشود، cron از دایرکتوری خانگی کاربران استفاده خواهد کرد.
(۳) این خط نقش هفت فیلدی که در این فایل وجود دارد را توصیف میکند. این فیلدها عبارتند از :
minute,hour ,mday ,month ,wday ,who و command که نام آنها گویای همه چیز است. با این حال توضیح مختصری درباره آنها خواهیم داد:
minute: مشخص میکند که دستور مورد نظر باید در کدام دقایق از ساعت اجرا شود.
hour: مشخص میکند که دستور باید در چه ساعاتی از شبانه روز اجرا شود.
mday: به معنی day of month است. مشخص میکند که دستور باید طی چه روزهایی از ماه اجرا شود.
month: مشخص میکند که دستور باید در چه ماههایی از سال اجرا شود.
wday: به معنی day of week است. مشخص میکند که دستور باید در چه روزهایی از هفته اجرا شود.
تمام این فیلدها مقادیر عددی دریافت میکنند. فیلد who یک فیلد مخصوص بوده و فقط در فایل crontab سیستمی (که در مسیر /etc/crontab قرار دارد) وجود دارد. این فیلد مشخص میکند که دستور مورد نظر باید توسط چه کاربری اجرا شود. آخرین فیلد هم دستور مورد نظر را با تمام آرگومان هایش مشخص میکند.
(۴) خط آخر، یک مثال از قسمت (۳) است. کاراکتر * به معنی «هر دقیقه، هر ساعت، هر روز و …» است. یعنی اگر در فیلد hour مقدار * قرار گیرد، دستور مورد نظر در تمام ساعات شبانه روز اجرا خواهد شد. همچنین میتوانید یک بازه زمانی را مشخص کنید. مثلا اگر فیلد minute مقدار ۲۵-۳۰ بخود بگیرد، دستور مورد نظر در دقایق ۲۹,۲۸,۲۷,۲۶,۲۵ و ۳۰ اجرا خواهد شد.
کاراکتر دیگری که نیاز به توضیح دارد، کاراکتر / است. این کاراکتر به معنای ‘’’گام’’’ یا ‘’’پله’’’ است. مثلا اگر فیلد minute مقدار */۲ را بگیرد، دستور مورد نظر هر دو دقیقه اجرا خواهد شد. اگر می خواهید دستوری را هر چند دقیقه یک بار، هرچند ساعت یک بار و … اجرا کنید، این کاراکتر کمکتان خواهد کرد. (یعنی اگر زمان های مورد نظر یک رابطه خاص با هم دارند.)
اگر هیچ رابطه خاصی بین مقادیر برقرار نیست می توانید از کاراکتر , یا کاما استفاده کنید. با استفاده از این کاراکتر میتوانید صریحا مشخص کنید که میخواهید دستور در چه زمان هایی اجرا شود. مثلا اگر فیلد hour مقدار ۳,۹,۱۳,۱۵,۲۰,۲۳ را بگیرد، دستور در همان ساعات مشخص شده اجرا خواهد شد.
مثال ها:
* * * * * */۱ * * * * ۰-۵۹ * * * *
هر سه خط بالا معادل هم بوده و دستور مورد نظر را هر یک دقیقه اجرا میکند.
۱۰-۵۰/۲ * * * *
خط بالا دستور مورد نظر را از دقیقه دهم تا پنجاهم و هر دو دقیقه یک بار اجرا میکند.
اگر دستورات در یک خط جا نمیشوند، می توانید در آخر خطوط کارکتر \ قرار داده و ادامه آنها را در خط بعد بنویسید.
نصب کردن یک فایل crontab
ابتدا با ویرایشگر دلخواه خود این فایل ا ایجاد کرده و با یک نام دلخواه ذخیره کنید. سپس از دستور زیر برای نصب این فایل استفاده کنید:
% crontab crontab-file
در مثال بالا، crontab-file نام فایل مورد نظر است. برای حذف این فایل هم از گزینه –r استفاده کنید:
% crontab –r crontab-file