FCRONTAB(5) FCRONTAB(5)

fcrontab - قالب فایل برای تعریف کارهایی که fcron باید اجرا کند، و زمان‌بندی آن‌ها

یک fcrontab فایلی است شامل تمام جدول‌های مورد استفاده توسط دیمن fcron(8). به عبارت دیگر، ابزاری است که کاربر از طریق آن به دیمن اعلام می‌کند «این دستور را در این زمان اجرا کن». هر کاربر fcrontab مخصوص به خود را دارد که دستورهای آن از طرف مالک آن اجرا می‌شوند (به‌ویژه با مجوزهای همان کاربر -- تنها کاربر root می‌تواند با استفاده از گزینهٔ runas کاری را از طرف کاربر دیگری اجرا کند (به زیر مراجعه کنید)).

خطوط خالی، خطوطی که با علامت هش (#) شروع می‌شوند (که به عنوان توضیح در نظر گرفته می‌شوند)، و فاصله‌ها و تب‌های ابتدای خط نادیده گرفته می‌شوند. هر خط در یک فایل fcrontab می‌تواند یکی از موارد زیر باشد:

•
تنظیم یک متغیر محیطی،
•
تنظیم یک گزینه،
•
ورودی‌های مبتنی بر زمان سپری‌شده از بالا بودن سیستم (uptime)،
•
ورودی‌های مبتنی بر زمان مطلق (مانند ورودی‌های عادی crontab)، یا
•
ورودی‌هایی که به صورت دوره‌ای اجرا می‌شوند.

هر خط منطقی (یک ورودی یا یک انتساب مقدار) می‌تواند با قرار دادن یک بک‌اسلش (\) پیش از نویسهٔ خط جدید (\n)، به چند خط واقعی (خطوطی که با نویسهٔ خط جدید پایان می‌یابند) تقسیم شود.

تنظیمات محیطی به شکل زیر هستند:

name = value

که در آن فاصله‌های اطراف علامت مساوی (=) اختیاری بوده و نادیده گرفته می‌شوند. فاصله‌های انتهای خط نیز نادیده گرفته می‌شوند، اما می‌توانید مقدار را درون گیومه (تکی یا دوگانه، اما متناظر) قرار دهید تا فاصله‌های موجود در مقدار حفظ شوند.

هنگامی که fcron دستوری را اجرا می‌کند، همواره متغیرهای USER و HOME را مطابق آنچه در /etc/passwd برای مالک fcrontab مربوطه تعریف شده، مقداردهی می‌کند. در صورت استفاده از گزینهٔ timezone، متغیر TZ نیز برابر با مقدار این گزینه تنظیم می‌شود. همچنین متغیر SHELL را برابر با مقدار پوستهٔ مورد استفاده برای اجرای دستور قرار می‌دهد. Fcron مقدار SHELL را در صورت وجود از fcrontab می‌گیرد، در غیر این صورت از مقدار موجود در fcron.conf، و در نهایت از مقدار موجود در /etc/passwd استفاده می‌کند. مقادیر HOME و SHELL ممکن است توسط تنظیمات موجود در fcrontab بازنویسی شوند، اما USER قابل بازنویسی نیست. سپس تمام انتساب‌های محیطی دیگر تعریف‌شده در fcrontab کاربر اعمال شده و دستور اجرا می‌شود.

به‌طور پیش‌فرض، fcron ایمیل‌ها را با استفاده از سرآیند "Content-Type:" با مقدار "text/plain" و پارامتر "charset=" تنظیم‌شده بر روی نگاشت نویسه (charmap/codeset) محلی (locale) که fcron(8) در آن راه‌اندازی شده ارسال می‌کند — یعنی یا لوکال پیش‌فرض سیستم در صورتی که هیچ متغیر محیطی LC_* تنظیم نشده باشد، یا لوکال مشخص‌شده توسط متغیرهای محیطی LC_* (به locale(7) مراجعه کنید). با تنظیم متغیرهای CONTENT_TYPE و CONTENT_TRANSFER_ENCODING در fcrontab بر روی مقادیر صحیح سرآیندهای ایمیل مربوطه، می‌توانید از رمزگذاری‌های نویسه‌ای متفاوتی برای خروجی ایمیل‌شدهٔ کارهای fcron استفاده کنید.

علاوه بر این، متغیرهای ویژهٔ MAILFROM و MAILTO به شما امکان می‌دهند به fcron مشخص کنید خروجی دستور را از طرف چه کسی و برای چه کسی ایمیل کند. توجه داشته باشید که این متغیرها در واقع معادل اعلان سراسری گزینه‌های mailfrom و mailto هستند (به زیر مراجعه کنید). آن‌ها برای سازگاری با نسخه‌های پیشین در نظر گرفته شده‌اند و توصیه می‌شود به‌جای آن‌ها مستقیماً از گزینه‌های mailfrom و mailto استفاده کنید.

کارها به‌گونه‌ای زمان‌بندی می‌شوند که به ازای هر m دقیقه اجرای fcron (که معمولاً همان m دقیقه اجرای سیستم است) یک بار اجرا شوند. مدت زمانی که سیستم در حالت تعلیق (به حافظه یا دیسک) است، به عنوان زمان خاموشی سیستم در نظر گرفته می‌شود. برای پیکربندی چنین کاری، از خطوط پیکربندی به شکل زیر استفاده کنید:

@options frequency command

که در آن frequency یک مقدار زمانی به شکل value*multiplier+value*multiplier+...+value-in-minutes مانند "12h02" یا "3w2d5h1" است. اولی به معنای «۱۲ ساعت و ۲ دقیقه اجرای fcron» و دومی به معنای «۳ هفته، ۲ روز، ۵ ساعت و ۱ دقیقه اجرای fcron» است. تنها ضریب‌های معتبر عبارتند از:

"ضریب‌های زمانی معتبر (VALID TIME MULTIPLIERS)"
ماه (۴ هفته): m | هفته (۷ روز): w | روز (۲۴ ساعت): d | ساعت (۶۰ دقیقه): h | ثانیه: s

کاربر می‌تواند به جای options یک مقدار زمانی قرار دهد: این مقدار به عنوان @first(<time>) تفسیر خواهد شد. اگر گزینهٔ first تنظیم نشده باشد، مقدار "frequency" استفاده می‌شود.

این نوع ورودی، زمان و تاریخ دقیقی را برای اجرا تضمین نمی‌کند (زیرا کار در هر بار راه‌اندازی، به میزان زمان سپری‌شده از زمان خاموشی به تعویق می‌افتد)، اما برای کارهایی که به میزان فعالیت‌های انجام‌شده توسط کاربران بستگی دارند بسیار مفید است (برای نمونه، بررسی سیستم‌فایل بهتر است پس از مقدار مشخصی استفاده توسط کاربران انجام شود تا هر x روز یک‌بار، زیرا سیستم ممکن است در طول آن بازهٔ x روزه تنها از ۱ روز تا x روز روشن بوده باشد).

زمان باقی‌مانده تا اجرای بعدی هر ۱۸۰۰ ثانیه یک بار (جهت کاهش خسارات ناشی از کرش) و همچنین هنگام خروج fcron پس از دریافت سیگنال SIGTERM (یعنی زمان خاموش شدن سیستم) ذخیره می‌شود. بنابراین، این نوع ورودی‌ها به‌ویژه برای سیستم‌هایی که دائماً روشن نیستند بسیار مفید است. به دلیل سادگی ساختار نحوی، برای وظایفی که نیازی به اجرا در زمان و تاریخ خاصی ندارند نیز مناسب است.

همچنین ببینید: گزینه‌های first،‏ mail،‏ nolog،‏ serial،‏ lavg،‏ nice،‏ runas (به زیر مراجعه کنید).

# دریافت ایمیل‌ها هر ۳۰ دقیقه یک بار
@ 30 getmails -all 
# انجام برخی آزمایش‌های امنیتی هر ۴۸ ساعت از زمان روشن بودن سیستم،
# اجبار به ارسال ایمیل به root حتی در صورت نبود خروجی
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

نوع دوم ورودی‌های fcrontab با یک کاراکتر اختیاری "&" آغاز می‌شود که می‌تواند بلافاصله با یک عدد اختیاری مشخص‌کنندهٔ بسامد اجرا (معادل گزینهٔ runfreq) یا اعلان گزینه‌ها دنبال شود؛ این نوع ورودی شامل پنج فیلد زمان و تاریخ و یک دستور پوسته است:

&options min hrs day-of-month month day-of-week command

توجه داشته باشید که دستور پوسته می‌تواند با یک نام کاربری پیشوند شود که معادل runas(<user>) است: از آنجا که این مورد صرفاً برای سازگاری با گذشته وجود دارد، باید به‌جای آن از گزینهٔ runas (به زیر مراجعه کنید) استفاده کنید. بسامد به این صورت تفسیر می‌شود: «اجرای این دستور پس از x بار تطابق فیلدهای زمان و تاریخ». فیلدهای زمان و تاریخ عبارتند از:

"فیلدهای زمان و تاریخ (TIME AND DATE FIELDS)"
دقیقه (minute): 0-59 | ساعت (hour): 0-23 | روز ماه (day of month): 1-31 | ماه (month): 1-12 (یا نام‌ها، به زیر مراجعه کنید) | روز هفته (day of week): 0-7 (هر دو مقدار 0 و 7 نشان‌دهندهٔ یکشنبه هستند، یا نام‌ها)

یک فیلد همیشه با یک ستاره (*)، که به عنوان محدودهٔ «اولین-آخرین» عمل می‌کند، یک عدد منفرد یا یک فهرست پر می‌شود.

فهرست‌ها اعداد یا محدوده‌هایی هستند که با کاما (,) جدا شده‌اند؛ برای نمونه: "2,5,15,23".

محدوده‌های عددی به شکل "<begin>-<end>" هستند، که در آن‌ها "begin" و "end" شامل بازه می‌شوند. برای مثال، "3-5" مقادیر ۳، ۴ و ۵ را مشخص می‌کند. همچنین می‌توانید یک "/number" اختیاری به یک محدوده اضافه کنید، که در آن number گام‌های پرش از روی مقادیر در طول محدوده را مشخص می‌کند. برای مثال، می‌توان از "0-23/2" در فیلد ساعت برای اجرای دستور به صورت یک ساعت در میان استفاده کرد. در نهایت، می‌توان یک یا چند "~number" را برای استثنا کردن برخی مقادیر خاص در یک محدوده اضافه کرد. برای نمونه، "5-8~6~7" معادل "5,8" است. شکل نهایی یک فیلد به صورت زیر است:

a[-b[/c][~d][~e][...]][,f[-g[/h][~i][~j][...]]][,...]

که در آن حروف، اعداد صحیح هستند.

همچنین می‌توانید از یک ستاره (*) در یک فیلد استفاده کنید. این علامت نشان‌دهندهٔ «اولین-آخرین» است؛ برای نمونه، یک "*" در فیلد دقیقه به معنای تمام دقیقه‌ها از دقیقهٔ ۰ تا دقیقهٔ ۵۹ است.

محدوده‌ها می‌توانند مانند یک عدد منفرد در یک فهرست گنجانده شوند؛ برای نمونه: "2,5-10/2~6,15,20-25,30".

برای فیلدهای «ماه» و «روز هفته» می‌توان از نام‌ها نیز استفاده کرد. برای این کار، از سه حرف اول روز یا ماه مورد نظر استفاده کنید (بزرگ یا کوچک بودن حروف اهمیتی ندارد). لطفاً توجه داشته باشید که نام‌ها دقیقاً مانند اعداد به کار می‌روند: می‌توانید از آن‌ها در فهرست یا محدوده استفاده کنید.

اگر روز ماه و روز هفته هر دو مشخص شده باشند، دستور تنها زمانی اجرا خواهد شد که هر دو با زمان و تاریخ جاری مطابقت داشته باشند، مگر اینکه گزینهٔ dayor تنظیم شده باشد. برای مثال، با خط زیر:

5 10 31 * 7 echo ''
دستور echo تنها در روزهایی اجرا می‌شود که هم یکشنبه و هم روز سی‌ویکم ماه باشند، در ساعت ۱۰:۰۵.

همچنین ببینید: گزینه‌های dayor،‏ bootrun،‏ runfreq،‏ mail،‏ nolog،‏ serial،‏ lavg،‏ nice،‏ runas (به زیر مراجعه کنید).

# اجرای mycommand در ساعت‌های 12:05، 12:35، 13:05، 13:35، 
# 14:05 *و* 14:35 در هر روز
& 05,35 12-14 * * * mycommand -u me -o file 
# دریافت ایمیل‌ها در هر ساعت در دقیقه‌های 20، 21، 22 و 24
20-24~23 * * * * getmail 
# ذخیره کار روزانه در هر شب ساعت 03:45 با اولویت پایین 
# مگر اینکه یکشنبه باشد، ارسال خروجی با ایمیل به jim و اجرای کار 
# هنگام راه‌اندازی در صورتی که رایانه در 03:45 خاموش بوده باشد
&nice(10),mailto(jim),bootrun 45 03 * * *~0 "save --our work" 

نوع سوم از ورودی‌های fcrontab با یک علامت "%" آغاز می‌شود که پس از آن یک کلیدواژه از یکی از ۳ فهرست مختلف، و گزینه‌های اختیاری قرار می‌گیرد.

این کلیدواژه‌ها عبارتند از:

hourly ، daily ، monthly ، weekly

این کلیدواژه‌ها به fcron می‌گویند که دستور را یک بار از ابتدای بازهٔ زمانی مربوطه تا انتهای آن بازهٔ زمانی اجرا کند. یک بازهٔ زمانی برای مثال، زمان بین دوشنبه ساعت ۱۶:۲۰ تا چهارشنبه ساعت ۰۱:۴۳ است. برای نمونه، کلیدواژهٔ weekly به fcron می‌گوید که یک دستور را در هر هفته یک بار بین دوشنبه و یکشنبه اجرا کند.

با این دو نوع کلیدواژه، کاربر باید فیلدهای زمانی مورد نیاز را (همان‌گونه که در «ورودی‌های مبتنی بر زمان و تاریخ» تعریف شد) مشخص کند تا تعیین شود دستور چه زمانی در طول هر بازهٔ زمانی باید اجرا گردد:

"فیلدهای زمانی مورد نیاز برای هر کلیدواژه (NEEDED TIME FIELDS FOR EACH KEYWORD)"
کلیدواژه‌های hourly و midhourly: دقیقه.
کلیدواژه‌های daily، middaily، nightly، weekly و midweekly: دقیقه و ساعت.
کلیدواژه‌های monthly و midmonthly: دقیقه، ساعت و روز.

این کلیدواژه‌ها مشابه موارد "*ly" هستند:

midhourly ، middaily ، nightly ، midmonthly ، midweekly

عملکرد آن‌ها دقیقاً مشابه کلیدواژه‌های "*ly" است، با این تفاوت که بازه‌های زمانی از میانه تا میانهٔ بازه‌های متناظر "*ly" تعریف می‌شوند: midweekly یک دستور را یک بار از پنجشنبه تا چهارشنبه اجرا می‌کند. توجه داشته باشید که nightly معادل middaily است.

برای نمونه:

%nightly,mail(no) * 21-23,3-5 echo "a nigthly entry"

دستور را هر شب یک بار، یا بین ساعت‌های ۲۱:۰۰ و ۲۳:۵۹، یا بین ساعت‌های ۳:۰۰ و ۵:۵۹ اجرا می‌کند (در اولین فرصت ممکن اجرا خواهد شد؛ برای تغییر این رفتار، از گزینهٔ random استفاده کنید) و ایمیلی ارسال نخواهد کرد (زیرا گزینهٔ mail برابر با "no" تنظیم شده است).

همچنین ببینید: گزینه‌های lavg،‏ noticenotrun،‏ strict،‏ mail،‏ nolog،‏ serial،‏ nice،‏ runas،‏ random (به زیر مراجعه کنید).

عبارتند از:

mins ، hours ، days ، mons ، dow

این کلیدواژه‌ها رفتاری متفاوت دارند:

این دستور را یک بار در طول هر بازهٔ زمانی مشخص‌شده اجرا می‌کنند، و فیلدهای زیرین کلیدواژه را در تعریف بازهٔ زمانی نادیده می‌گیرند (یک hours مانع از در نظر گرفته شدن فیلد mins به عنوان یک بازهٔ زمانی می‌شود، اما از آن برای تعیین زمان اجرای خط در طول یک بازه استفاده خواهد شد: به یادداشت زیر مراجعه کنید) (dow به معنای روز هفته است).

چنین کلیدواژه‌ای با ۵ فیلد زمان و تاریخ (همان فیلدهای مورد استفاده برای خط مبتنی بر زمان مطلق) دنبال می‌شود. علاوه بر این، باید مقداری زمان و تاریخ غیر منطبق در خطوط دارای این نوع کلیدواژه وجود داشته باشد (یعنی خط زیر مجاز نیست:

%hours * 0-23 * * * echo "INCORRECT line!"
اما خط زیر
%hours * 0-22 * * * echo "Ok."
مجاز است).
یادداشت:

یک عدد منفرد در یک فیلد به عنوان یک بازهٔ زمانی در نظر گرفته می‌شود:

%mins 15 2-4 * * * echo
هر روز در ساعت‌های ۲:۱۵، ۳:۱۵ و ۴:۱۵ اجرا خواهد شد.

اما تمام فیلدهای زیرین کلیدواژه‌ها در تعریف بازهٔ زمانی نادیده گرفته می‌شوند:

%hours 15 2-4 * * * echo
تنها یک بار در یکی از ساعت‌های ۲:۱۵، ۳:۱۵ یا ۴:۱۵ اجرا خواهد شد.

همچنین ببینید: گزینهٔ random (به زیر مراجعه کنید).

برای تضمین سازگاری مناسب با Vixie cron، میانبرهای Vixie cron پشتیبانی می‌شوند. به‌طور کلی استفاده از آن‌ها توصیه نمی‌شود زیرا فاقد برخی از انعطاف‌پذیری‌های ارائه‌شده توسط fcron هستند. همچنین در مواردی که زمان دقیق اجرا حیاتی نیست، استفاده از خطوط مبتنی بر زمان بالا بودن سیستم توصیه می‌شود.

یک وظیفه که از میانبر Vixie cron استفاده می‌کند به شکل زیر است:

shortcut command

در زیر فهرستی از میانبرهای موجود، به همراه برخی موارد اختصاصی fcron، و معادل‌های آن‌ها در fcron آورده شده است:

"میانبرهای VIXIE CRON (VIXIE CRON SHORTCUTS)"

@reboot
اجرا یک بار هنگام راه‌اندازی | معادل در fcron: @runatreboot,runonce(true)
@resume
اجرا یک بار هنگام بازگشت از تعلیق/خواب زمستانی | معادل در fcron: @runatresume,runonce(true)
@yearly
اجرا سالی یک بار | معادل در fcron: 0 0 1 1 * | جایگزین پیشنهادی: @ 12m
@annually
(مشابه @yearly) | معادل در fcron: 0 0 1 1 * | جایگزین پیشنهادی: @ 12m
@monthly
اجرا ماهی یک بار | معادل در fcron: 0 0 1 * * | جایگزین پیشنهادی: @ 1m
@weekly
اجرا هفته‌ای یک بار | معادل در fcron: 0 0 * * 0 | جایگزین پیشنهادی: @ 1w
@daily
اجرا روزی یک بار | معادل در fcron: 0 0 * * * | جایگزین پیشنهادی: @ 1d
@midnight
(مشابه @daily) | معادل در fcron: 0 0 * * *
@hourly
اجرا ساعتی یک بار | معادل در fcron: 0 * * * * | جایگزین پیشنهادی: @ 1h

چند مثال:

# اجرای check_laptop_logs.sh در دقیقه اول هر ساعت:
@hourly check_laptop_logs.sh
# اجرای check_web_server.sh و check_file_server.sh هر روز رأس
# نیمه‌شب، هر دو به صورت همزمان:
@daily check_web_server.sh
@daily check_file_server.sh
# اجرای compress_home_made_app_log_files.sh دقیقا رأس نیمه‌شب
# در اولین روز هر ماه:
@monthly compress_home_made_app_log_files.sh

با این حال، ممکن است ترجیح دهید تعاریف وظایف را با مواردی مانند زیر جایگزین کنید:

# اجرای check_laptop_logs.sh پس از هر یک ساعت روشن بودن سیستم:
@ 60 check_laptop_logs.sh
# اجرای check_web_server.sh و check_file_server.sh هر شب بین نیمه‌شب
# و ساعت ۳ بامداد، یکی پس از دیگری:
%nightly,serial * 0-3 check_web_server.sh
%nightly,serial * 0-3 check_file_server.sh
# اجرای compress_home_made_app_log_files.sh ماهی یک بار، فقط در شب
# هنگامی که بار سیستم کم است:
@monthly,lavg(0.5) * 21-23,0-5 * compress_home_made_app_log_files.sh

در نهایت، باید توجه داشت که وظایف تعریف‌شده با استفاده از میانبرهای Vixie cron تنها در صورتی رفتاری مشابه Vixie cron خواهند داشت که با تعاریف قبلی گزینه‌ها تغییر نیافته باشند. این حالت در صورتی است که یک فایل crontab مربوط به Vixie cron را بدون تغییر وارد fcron کنید، یا پیش از تعریف وظیفه از reset استفاده نمایید، مانند:

!serial
@ 10 fcron_task_1
@ 25 fcron_task_2
!reset
@reboot start_unprivileged_user_program
@daily cleanup_tmp.sh

در مثال بالا، اگر از reset استفاده نمی‌کردیم، گزینهٔ serial به دو وظیفهٔ آخر نیز اعمال می‌شد.

گزینه‌ها را می‌توان برای تمام خطوط زیر اعلان یا برای یک خط مجزا تنظیم کرد. در حالت اول، تنظیم در یک خط کامل بلافاصله پس از علامت تعجب (!) انجام می‌شود، در حالی که در حالت دوم بسته به نوع زمان‌بندی، پس از «&»، «%» یا «@» قرار می‌گیرد. توجه داشته باشید که اعلان یک گزینه در یک زمان‌بندی، اعلان سراسری همان گزینه را بازنویسی می‌کند.

گزینه‌ها با کاما (,) از یکدیگر جدا می‌شوند و آرگومان‌های آن‌ها، در صورت وجود، درون پرانتز («(» و «)») قرار گرفته و با کاما جدا می‌شوند. هیچ فاصله یا گیومه‌ای مجاز نیست. اعلان گزینه‌ها به صورت زیر است:

option[(arg1[,arg2][...])][,option[(arg1[...])]][...]

که در آن option نام یک گزینه یا مخفف آن است. گزینه‌ها عبارتند از (مقدار پیش‌فرض در پرانتز آمده است):

"گزینه‌های معتبر در FCRONTAB"

boolean(false)

اجرای یک خط & (یعنی مبتنی بر تاریخ و زمان) هنگام راه‌اندازی fcron (یا بازگشت سیستم پس از تعلیق/خواب زمستانی) در صورتی که زمان اجرای آن در طول خاموشی سیستم بوده باشد. به‌طور دقیق‌تر، چنین کارهایی به صف lavg (اگر یکی از گزینه‌های lavg تنظیم شده باشد) یا صف serial اضافه می‌شوند تا از اجرای همزمان کارهای بیش از حد هنگام راه‌اندازی fcron جلوگیری شود.

boolean(true)

انجام AND منطقی بین روز هفته و روز ماه.

همچنین ببینید: گزینهٔ dayor.

boolean(false)

انجام OR منطقی بین روز هفته و روز ماه.

همچنین ببینید: گزینهٔ dayand.

boolean(false)

ارسال خروجی از طریق ایمیل تنها در صورتی که کار با وضعیتی غیر از صفر (خطا) پایان یافته باشد.

همچنین ببینید: گزینه‌های mail،‏ mailto،‏ forcemail،‏ nolog.

boolean(false)

آیا یک کار می‌تواند چندین بار به‌طور همزمان اجرا شود؟

همچنین ببینید: گزینه‌های serialonce،‏ lavgonce.

time-value

تأخیر پیش از نخستین اجرای یک کار مبتنی بر زمان بالا بودن سیستم (خطوط «@»). در این حالت مفید است: فرض کنید چندین کار دارید که برای مثال هر ساعت اجرا می‌شوند. با تنظیم مقادیر first متفاوت برای هر کار، می‌توانید از اجرای همزمان آن‌ها در هر بار جلوگیری کنید. همچنین می‌توانید آن را برابر با 0 قرار دهید، که در صورت استفاده همراه با گزینهٔ volatile بسیار کاربردی است.

boolean(false)

ارسال خروجی از طریق ایمیل حتی در صورت خالی بودن خروجی.

تنظیم این گزینه بر روی true گزینهٔ mail را نیز برابر با true قرار می‌دهد.

همچنین ببینید: گزینه‌های mail،‏ mailto،‏ erroronlymail،‏ nolog.

integer(0)

اجرای کار بین 0 تا jitter ثانیه دیرتر از زمانی که باید اجرا می‌شد. این گزینه فقط برای خطوط & اعمال می‌شود و برای سیستم‌هایی طراحی شده است که کارهای زیادی باید در همان دقیقه شروع شوند: گزینهٔ jitter شروع همهٔ آن کارها را به‌طور تصادفی در طول نخستین jitter ثانیه از آن دقیقه پخش می‌کند، به جای آنکه همهٔ آن‌ها را در ثانیه اول دقیقه آغاز کند. آرگومان باید بین 0 تا 255 (شامل هر دو) باشد.

همچنین ببینید: گزینهٔ random.

real(0) real(0) real(0)

تنظیم مقادیر میانگین بار کاری سیستم (load average) در بازه‌های ۱، ۵ و ۱۵ دقیقه‌ای (به همین ترتیب) که کار باید در مقادیر پایین‌تر از آن‌ها اجرا شود. مقادیر حداکثر ۱ رقم اعشار دارند (مانند "2.3"): اگر بیش از ۱ رقم اعشار باشد، مقدار گرد خواهد شد. برای نادیده گرفتن بار میانگین مربوطه مقدار را روی 0 قرار دهید (یا تمام مقادیر را صفر بگذارید تا کار بدون در نظر گرفتن میانگین بار اجرا شود).

همچنین ببینید: گزینه‌های lavg1،‏ lavg5،‏ lavg15،‏ until،‏ lavgonce،‏ lavgor،‏ lavgand،‏ strict،‏ noticenotrun.

real(0)

تنظیم آستانهٔ میانگین بار کاری سیستم به ترتیب برای ۱، ۵ یا ۱۵ دقیقه. برای نادیده گرفتن بار میانگین مربوطه مقدار آن را روی 0 قرار دهید.

همچنین ببینید: گزینه‌های lavg.

boolean(true)

انجام AND منطقی بین مقادیر میانگین بار ۱، ۵ و ۱۵ دقیقه.

همچنین ببینید: گزینه‌های lavg،‏ lavgor.

boolean(1)

آیا یک کار می‌تواند چندین بار به‌طور همزمان در صف lavg قرار گیرد؟

همچنین ببینید: گزینه‌های lavg.

boolean(false)

انجام OR منطقی بین مقادیر میانگین بار ۱، ۵ و ۱۵ دقیقه.

همچنین ببینید: گزینه‌های lavg،‏ lavgand.

boolean(true)

ارسال خروجی (در صورت وجود) از طریق ایمیل یا خیر.

تنظیم این گزینه بر روی false گزینهٔ forcemail را نیز بر روی false تنظیم می‌کند.

همچنین ببینید: گزینه‌های mailto،‏ forcemail،‏ erroronlymail،‏ nolog.

email-address(کاربری که وظیفه با آن اجرا می‌شود)

استفاده از این آدرس به عنوان نشانی 'From:' هنگام ارسال ایمیل خروجی کارها. می‌تواند یک نام کاربری تنها یا یک نشانی ایمیل کاملاً واجد شرایط (FQDN) باشد. در حالت اول، fcron نام میزبان را به‌طور خودکار اضافه می‌کند. تنظیم mailfrom به یک مقدار خالی معادل بازنشانی آن به مقدار پیش‌فرض یعنی نام کاربری است که کار با آن اجرا می‌شود.

همچنین ببینید: گزینه‌های mail،‏ forcemail،‏ erroronlymail،‏ nolog،‏ mailto.

email-address(نام مالک فایل)

ارسال خروجی (در صورت نیاز) به "email-address". می‌تواند یک نام کاربری تنها یا یک نشانی ایمیل کامل باشد. در حالت اول، fcron نام میزبان را به‌طور خودکار اضافه خواهد کرد. اعلان mailto به صورت خالی (رشتهٔ "") معادل "mail(false)" است.

همچنین ببینید: گزینه‌های mail،‏ forcemail،‏ erroronlymail،‏ nolog،‏ mailfrom.

nice-value

تغییر اولویت کار. یک nice-value یک عدد صحیح از -20 (بالاترین اولویت) تا 19 (پایین‌ترین) است (تنها root مجاز به استفاده از مقادیر منفی برای این گزینه است).

boolean(false)

در صورت تنظیم بر روی true، تنها خطاها برای کار(های) مربوطه ثبت وقایع می‌شوند. برای کارهایی که به دفعات زیاد اجرا می‌شوند و/یا برای کاهش دسترسی به دیسک در لپ‌تاپ‌ها بسیار مفید است.

همچنین ببینید: گزینه‌های mail،‏ mailto،‏ erroronlymail،‏ forcemail.

boolean(false)

آیا fcron باید عدم اجرای یک کار % یا یک کار & را با ایمیل به کاربر گزارش دهد؟ (به دلیل خاموش بودن سیستم (شامل تعلیق/خواب زمستانی) برای هر دو یا میانگین بار بسیار بالای سیستم برای دومی).

همچنین ببینید: گزینه‌های lavg،‏ strict.

boolean(false)

در خطی که به صورت دوره‌ای اجرا می‌شود، این گزینه به این پرسش پاسخ می‌دهد: آیا این کار باید در زودترین زمان ممکن در بازهٔ زمانی اجرای خود اجرا شود (امن‌تر)، یا fcron باید یک زمان اجرای تصادفی را در آن بازهٔ زمانی تعیین کند؟ توجه داشته باشید که اگر این گزینه تنظیم شده باشد، در صورتی که fcron در تمام بازهٔ اجرا در حال اجرا نباشد، ممکن است کار اجرا نشود. علاوه بر این، باید بدانید که الگوی تصادفی ممکن است برای افراد ماهر به سادگی قابل حدس باشد؛ بنابراین، نباید برای امن‌سازی موارد مهم به این گزینه تکیه کنید. با این حال، برای بیشتر کاربردها مشکلی نخواهد داشت.

همچنین ببینید: گزینهٔ jitter.

boolean(false)

هنگامی که بر روی true تنظیم شود، fcron در هر بار راه‌اندازی مجدد سیستم‌عامل طوری رفتار می‌کند که گویی وظیفه یک وظیفهٔ جدید است. این گزینه بسیار شبیه به volatile است اما به جای راه‌اندازی مجدد fcron، بر پایهٔ راه‌اندازی مجدد سیستم‌عامل عمل می‌کند. در صورتی که از fcron به این شیوه استفاده می‌کنید، ممکن است بخواهید از گزینهٔ first نیز استفاده کنید.

همچنین ببینید: گزینه‌های first،‏ volatile،‏ runonce،‏ runatreboot،‏ runatresume.

boolean

بازنشانی همهٔ گزینه‌ها به مقادیر پیش‌فرض.

user-name

اجرا با مجوزها و محیط "user-name" (تنها root مجاز به استفاده از این گزینه است).

boolean(false)

در صورت تنظیم بر روی true، وظیفه هنگام راه‌اندازی سیستم اجرا خواهد شد (یعنی بلافاصله پس از تأخیر sleeptime-- — به‌طور پیش‌فرض ۲۰ ثانیه — زمانی که دیمن fcron برای نخستین بار پس از بوت سیستم‌عامل شروع به کار می‌کند). این علاوه بر زمان‌بندی عادی است که توسط این گزینه تغییری نخواهد کرد.

برای نمونه، اگر برنامه‌ای باید بلافاصله پس از بوت به‌صورت خودکار آغاز شود و از ساعت ۷ صبح تا ۶ عصر اجرا گردد، می‌توانید از تعاریف fcrontab زیر استفاده کنید:

&runatreboot 0 6 * * 1-5 start_my_program.sh
& 0 7 * * 1-5 stop_my_program.sh

همچنین ببینید: گزینه‌های volatile،‏ runonce،‏ runatresume،‏ rebootreset.

boolean(false)

در صورت تنظیم بر روی true، وظیفه هنگام بازگشت سیستم از تعلیق (suspend یا خواب زمستانی) اجرا خواهد شد. این علاوه بر زمان‌بندی عادی است که توسط این گزینه تغییری نخواهد کرد.

برای نمونه، اگر برنامه‌ای باید بلافاصله پس از بازگشت سیستم به‌صورت خودکار آغاز شود و از ساعت ۷ صبح تا ۶ عصر اجرا گردد، می‌توانید از تعاریف fcrontab زیر استفاده کنید:

&runatresume 0 6 * * 1-5 start_my_program.sh
& 0 7 * * 1-5 stop_my_program.sh

همچنین ببینید: گزینه‌های volatile،‏ runonce،‏ runatreboot،‏ rebootreset.

integer

اجرا به ازای هر "runfreq" بار تطابق زمان و تاریخ. (این گزینه برای خطوط مبتنی بر زمان بالا بودن سیستم نادیده گرفته می‌شود).

boolean(false)

پس از یک بار اجرای وظیفه، آن را تا راه‌اندازی مجدد بعدی سیستم‌عامل (در صورت تنظیم نبودن volatile) یا تا شروع مجدد بعدی دیمن fcron (در صورت تنظیم بودن volatile) مجدداً زمان‌بندی نکن.

همچنین ببینید: گزینه‌های volatile،‏ rebootreset،‏ runatreboot،‏ runatresume.

boolean(false)

Fcron حداکثر ۱ کار سریالی (یعنی کارهایی که گزینهٔ serial برای آن‌ها بر روی true تنظیم شده) و همان تعداد کار سریالی lavg (یعنی کارهایی که هر دو گزینهٔ serial و lavg (یا lavg1 یا lavg5 یا lavg15) برای آن‌ها بر روی true تنظیم شده) را به‌طور همزمان اجرا می‌کند. این مقدار ممکن است توسط گزینهٔ -m در fcron تغییر یابد. این گزینه به‌ویژه هنگام استفاده از کارهای سنگین و مصرف‌کنندهٔ منابع به منظور محدود کردن بار اضافی سیستم بسیار کاربردی است.

همچنین ببینید: گزینه‌های serialonce،‏ lavg.

boolean(0)

آیا یک کار می‌تواند چندین بار به‌طور همزمان در صف serial قرار گیرد؟

همچنین ببینید: گزینه‌های exesev،‏ lavgonce.

boolean(false)

اگر fcron در پیش‌زمینه در حال اجرا باشد، به کارها اجازه می‌دهد به‌جای ارسال ایمیل یا دور انداختن خروجی، آن را در stderr/stdout چاپ کنند.

همچنین ببینید: گزینهٔ once-- در fcron(8).

boolean(true)

هنگامی که یک کار % از نوع lavg در پایان بازهٔ زمانی اجرای خود قرار دارد، آیا باید از صف lavg حذف شود (strict(true)، در نتیجه کار اجرا نمی‌شود) یا تا زمانی که میانگین بار سیستم اجازهٔ اجرای آن را بدهد در صف باقی بماند (strict(false))؟

همچنین ببینید: گزینه‌های lavg،‏ noticenotrun.

timezone-name(منطقه زمانی سیستم)

اجرای کار در منطقهٔ زمانی مشخص‌شده. timezone-name یک رشته است که برای متغیر محیطی TZ معتبر باشد: برای جزئیات بیشتر به مستندات سیستم خود مراجعه کنید. برای مثال، "Europe/Paris" یا "Asia/Tehran" در یک سیستم لینوکس معتبر است. این گزینه تغییرات ساعت تابستانی را به درستی مدیریت می‌کند. هنگام اجرای کاری که این گزینه را تعریف کرده، متغیر محیطی TZ برابر با مقدار timezone تنظیم می‌شود.

لطفاً توجه داشته باشید که اگر یک آرگومان timezone-name نادرست وارد کنید، بدون هیچ هشداری نادیده گرفته شده و کار در منطقهٔ زمانی سیستم اجرا خواهد شد.

هشدار: از گزینهٔ timezone و گزینهٔ tzdiff به‌طور همزمان استفاده نکنید! نیازی به این کار نیست و timezone بسیار هوشمندانه‌تر از tzdiff عمل می‌کند.

همچنین ببینید: گزینه‌های tzdiff.

integer(0)

هشدار: این گزینه منسوخ شده است: به‌جای آن از گزینهٔ timezone استفاده کنید!

اختلاف منطقهٔ زمانی (به ساعت، بین -24 تا 24) بین زمان سیستم و زمان واقعی محلی. این گزینه به کاربر اجازه می‌دهد خطوط & و % خود را در زمان محلی تعریف کند. توجه داشته باشید که این مقدار برای کل یک فایل fcrontab تنظیم می‌شود و تنها آخرین تعریف لحاظ خواهد شد. tzdiff بسیار ابتدایی است: تغییرات ساعت تابستانی را مدیریت نمی‌کند در حالی که گزینهٔ timezone این کار را انجام می‌دهد، بنابراین باید از دومی استفاده کنید.

همچنین ببینید: گزینه‌های timezone.

time-value(0)

تنظیم مهلت زمانی برای انتظار به منظور رسیدن به مقادیر میانگین بار مورد نظر سیستم. در صورت اتمام مهلت زمانی، کار بدون در نظر گرفتن میانگین بار اجرا می‌شود. برای حذف مهلت زمانی، until را روی 0 تنظیم کنید.

همچنین ببینید: گزینه‌های lavg.

boolean(false)

هنگامی که روی true تنظیم شود، کار بر پایهٔ زمان روشن بودن «فرار» سیستم زمان‌بندی می‌شود، یعنی با هر بار شروع fcron شمارش از ابتدا آغاز می‌شود؛ این ویژگی زمانی مفید است که fcron توسط اسکریپتی اجرا شود که مثلاً تنها در طول یک اتصال dialup اجرا می‌شود: در این صورت زمان روشن بودن «فرار» به مدت زمان اتصال dialup اشاره دارد. در صورتی که از fcron به این شیوه استفاده می‌کنید، ممکن است بخواهید از گزینهٔ first نیز استفاده کنید.

همچنین ببینید: گزینه‌های first،‏ stdout،‏ rebootreset،‏ خطوط مبتنی بر زمان بالا بودن سیستم، و آرگومان خط فرمان once-- در fcron(8).

یک آرگومان boolean می‌تواند بدون مقدار باشد، که در این حالت پرانتز استفاده نمی‌شود و به معنای true است؛ رشته‌های "true"، "yes" یا عدد 1 به معنای true هستند؛ و رشته‌های "false"، "no" یا عدد 0 به معنای false می‌باشند. برای توضیحات دربارهٔ مقدار زمانی به بخش «ورودی‌های مبتنی بر زمان بالا بودن سیستم» در بالا مراجعه کنید.

توجه داشته باشید که dayand و dayor در واقع یک گزینه هستند: مقدار false برای dayand معادل مقدار true برای dayor است، و برعکس مقدار false برای dayor معادل مقدار true برای dayand است. همین امر برای lavgand و lavgor نیز برقرار است.

به یک حالت خاص که باید مدیریت شود توجه کنید: یک کار باید وارد صف serial شود، *اما* ورودی قبلی این کار هنوز کامل نشده است (به دلیل بار بالای سیستم یا برخی رویدادهای خارجی). گزینهٔ serialonce به این پرسش پاسخ می‌دهد: آیا ورودی جدید کار باید نادیده گرفته شود؟ به این ترتیب می‌توان بین کارهایی که باید تعداد دفعات مشخصی اجرا شوند (ترجیحاً در زمان‌های تعیین‌شده) و وظایفی که فارغ از تعدادشان باید انجام شوند (serialonce(true) <- ) تفاوت قائل شد، که باعث می‌شود سیستم پاسخ‌دهی سریع‌تری داشته باشد.

همین ملاحظات برای صف میانگین بار نیز اعمال می‌شود و می‌توان آن را با گزینهٔ lavgonce بیان کرد.

علاوه بر این، اگر صف serial یا صف lavg به ترتیب حاوی بیش از ۳۰ و ۳۰ کار باشند، برای جلوگیری از اشباع منابع سیستم، از پذیرش هر کار جدید خودداری شده و اجرا نمی‌شود. در این حالت، یک پیام خطا از طریق syslog ثبت می‌گردد.

در نهایت، اگر هنگام متوقف شدن fcron کارهایی در صف‌های lavg یا serial باقی مانده باشند، در زمان راه‌اندازی یک بار در صف متناظر قرار خواهند گرفت (ممکن است ترتیب آن‌ها حفظ نشود).

!reset,serial(true),dayor,bootrun(0),mailto(root),lavg(.5,2,1.5)

# استفاده از /bin/bash برای اجرای دستورات، بدون توجه به محتوای /etc/passwd
SHELL=/bin/bash
# ارسال خروجی با ایمیل به thib، بدون توجه به اینکه این fcrontab متعلق به کیست
!mailto(thib) 
# تعریف یک متغیر که معادل " Hello thib and paul! " است
# در اینجا نویسه‌های خط جدید با یک بک‌اسلش (\) گریز داده شده‌اند
# و از گیومه‌ها برای حفظ فاصله‌های ابتدایی و انتهایی استفاده شده است
TEXT= " Hello\
 thib and\
 paul! " 
# می‌خواهیم از serial استفاده کنیم اما نه از bootrun:
!serial(true),b(0) 
# بار نخست پس از پنج دقیقه اجرا شود،
# سپس هر یک ساعت یک بار اجرا گردد
@first(5) 1h   echo "Run every hour" 
# هر روز اجرا شود
@ 1d echo "fcron daily" 
# یک بار در صبح و یک بار در بعدازظهر اجرا شود
# در صورتی که سیستم در هر لحظه‌ای از این بازه‌های زمانی روشن باشد
%hours * 8-12,14-18 * * * echo "Hey boss, I'm working today!" 
# یک بار در هفته در طول زمان ناهار اجرا شود
%weekly * 12-13 echo "I left my system on at least once \
 at lunch time this week." 
# هر یکشنبه و شنبه در ساعت 9:05 اجرا شود
5 9 * * sat,sun echo "Good morning Thibault!" 
# در تمام روزهای زوج ماه مارس در ساعت 18:00 اجرا شود، به جز روز شانزدهم
0 18 2-30/2~16 Mar * echo "It's time to go back home!"
# خط بالا معادل خط زیر است
& 0 18 2-30/2~16 Mar * echo "It's time to go back home!" 
# بازنشانی گزینه‌ها به حالت پیش‌فرض و تنظیم runfreq برای خطوط زیر
!reset,runfreq(7) 
# با توجه به تعریف بالا هر ۷ بار تطابق یک بار اجرا شود،
# بنابراین اگر سیستم هر روز در ساعت 10:00 روشن باشد، این دستور
# هفته‌ای یک بار اجرا خواهد شد
& 0 10 * * * echo "if you got this message last time 7 days ago,\
 this computer has been running every day at 10:00 last week.\
 If you got the message 8 days ago, then the system has been down \
 one day at 10:00 since you got it, etc" 
# هر ساعت منتظر میانگین بار ۵ دقیقه‌ای زیر 0.9 بماند
@lavg5(0.9) 1h echo "The system load average is low" 
# هر روز حداکثر ۵ ساعت برای کاهش میانگین بار منتظر بماند
@lavgand,lavg(1,2.0,3.0),until(5h) 1d echo "Load average is going down" 
# منتظر بهترین زمان برای اجرای یک کار سنگین بماند
@lavgor,lavg(0.8,1.2,1.5),nice(10) 1w echo "This is a heavy job" 
# هر شب یک بار، یا بین ساعت‌های 21:00 و 23:00 یا
# بین ساعت‌های 3:00 و 6:00 اجرا شود
%nightly,lavg(1.5,2,2) * 21-23,3-6 echo "It's time to retrieve \
 the latest release of Mozilla!"

/usr/local/etc/fcron.conf
فایل پیکربندی برای fcron، fcrontab و fcrondyn: شامل مسیرها (دایرکتوری spool، فایل pid) و برنامه‌های پیش‌فرض مورد استفاده (ویرایشگر، پوسته و غیره). برای جزئیات بیشتر به fcron.conf(5) مراجعه کنید.
/usr/local/etc/fcron.allow
کاربران مجاز به استفاده از fcrontab و fcrondyn (یک نام در هر خط، نام ویژهٔ "all" نشان‌دهندهٔ همهٔ کاربران است).
/usr/local/etc/fcron.deny
کاربرانی که مجاز به استفاده از fcrontab و fcrondyn نیستند (با قالبی مشابه فایل allow).
/usr/local/etc/pam.d/fcron (یا /usr/local/etc/pam.conf)
فایل پیکربندی PAM برای fcron. برای جزئیات بیشتر به pam(8) مراجعه کنید.

fcrontab(1)،

fcrondyn(1)،

fcrontab(5)،

fcron.conf(5)،

fcron(8).

اگر در حال یادگیری نحوهٔ استفاده از fcron از ابتدا هستید، پیشنهاد می‌کنم نسخهٔ HTML مستندات را مطالعه کنید (در صورتی که هم‌اکنون در حال خواندن آن نیستید! :) ): محتوا یکسان است، اما به لطف پیوندها مرور آن آسان‌تر است.

Thibault Godouet <fcron@free.fr>

22 March 2025 03/22/2025