CRON(8) مدیریت سیستم CRON(8)

crond - دیمنی برای اجرای دستورات زمان‌بندی‌شده

crond [-c | -h | -i | -n | -p | -P | -s | -m<دستورارسالایمیل>]
crond -x [ext,sch,proc,pars,load,misc,test,bit]
crond -V

هنگامی که از اسکریپت‌های سنتی sysvinit استفاده می‌شود، Cron از طریق /etc/rc.d/init.d یا /etc/init.d راه‌اندازی می‌شود. در صورتی که systemd فعال باشد، فایل واحد (unit file) در مسیر /lib/systemd/system/crond.service نصب شده و دیمن با دستور systemctl start crond.service آغاز به کار می‌کند. این دیمن بلافاصله کنترل را بازمی‌گرداند، بنابراین نیازی به راه‌اندازی آن با پارامتر '&' نیست.

Cron مسیر /var/spool/cron را برای یافتن فایل‌های crontab که بر اساس حساب‌های کاربری در /etc/passwd نام‌گذاری شده‌اند، جستجو می‌کند؛ فایل‌های crontab یافته‌شده در حافظه بارگذاری می‌شوند. Cron همچنین به دنبال فایل /etc/anacrontab و هر فایلی در دایرکتوری /etc/cron.d می‌گردد که ساختار متفاوتی دارند (نگاه کنید به crontab(5)). Cron تمام فایل‌های crontab ذخیره‌شده را بررسی کرده و هر وظیفه را بررسی می‌کند تا مشخص شود آیا باید در دقیقهٔ جاری اجرا شود یا خیر. هنگام اجرای دستورات، هرگونه خروجی برای مالک فایل crontab (یا برای کاربری که در متغیر محیطی MAILTO در crontab مشخص شده است، در صورت وجود) ایمیل می‌شود. همچنین می‌توان با استفاده از گزینهٔ -s هرگونه خروجی وظایف را به syslog ارسال کرد.

دو روش برای بررسی تغییرات در جدول‌های crontab وجود دارد. روش اول بررسی زمان تغییر (modtime) فایل است. روش دوم استفاده از پشتیبانی inotify است. استفاده از inotify پس از راه‌اندازی دیمن در گزارش‌های /var/log/cron ثبت می‌شود. پشتیبانی inotify تغییرات را در تمامی جداول crontab بررسی می‌کند و تنها زمانی به دیسک سخت دسترسی پیدا می‌کند که تغییری شناسایی شده باشد.

هنگام استفاده از گزینهٔ modtime، برنامهٔ Cron زمان تغییر جدول‌های crontab خود را هر دقیقه بررسی می‌کند تا هرگونه تغییر را شناسایی کرده و جداول تغییریافته را مجدداً بارگذاری کند. پس از تغییر برخی از فایل‌های crontab، نیازی به راه‌اندازی مجدد Cron نیست. همچنین در صورتی که inotify نتواند مقداردهی اولیه شود، از گزینهٔ modtime استفاده می‌شود.

Cron این فایل‌ها و دایرکتوری‌ها را بررسی می‌کند:

/etc/crontab
جدول زمانی crontab سیستم. امروزه این فایل به‌طور پیش‌فرض خالی است. در ابتدا معمولاً برای اجرای وظایف روزانه، هفتگی و ماهانه استفاده می‌شد. در حال حاضر به‌طور پیش‌فرض این وظایف از طریق anacron اجرا می‌شوند که فایل پیکربندی /etc/anacrontab را می‌خواند. برای جزئیات بیشتر به anacrontab(5) مراجعه کنید.
/etc/cron.d/
دایرکتوری شامل وظایف زمان‌بندی‌شدهٔ سیستمی (cronjobs) که برای کاربران مختلف ذخیره شده‌اند.
/var/spool/cron
دایرکتوری شامل جداول crontab کاربران که توسط دستور crontab ایجاد شده‌اند.

توجه داشته باشید که دستور crontab(1) هر زمان که یک crontab را تغییر دهد، زمان تغییر (modtime) دایرکتوری spool را به‌روزرسانی می‌کند.

تغییرات زمان محلی کمتر از سه ساعت، مانند تغییرات ناشی از ساعت تابستانی (Daylight Saving Time)، به روشی ویژه مدیریت می‌شوند. این موضوع تنها در مورد وظایفی اعمال می‌شود که در زمانی مشخص اجرا می‌شوند و وظایفی که تناوب زمانی اجرای آن‌ها بیش از یک ساعت است. وظایفی که با بسامد بیشتری اجرا می‌شوند به‌طور عادی زمان‌بندی خواهند شد.

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

تغییرات زمانی بیش از ۳ ساعت به عنوان تصحیح ساعت یا منطقهٔ زمانی در نظر گرفته شده و زمان جدید بلافاصله اعمال می‌شود.

امکان استفاده از مناطق زمانی متفاوت برای جداول crontab وجود دارد. برای اطلاعات بیشتر به crontab(5) مراجعه کنید.

در صورتی که PAM روی سیستم نصب باشد، Cron از کنترل دسترسی با استفاده از PAM پشتیبانی می‌کند. برای اطلاعات بیشتر به pam(8) مراجعه کنید. فایل پیکربندی PAM برای crond در مسیر /etc/pam.d/crond نصب می‌شود. این دیمن محیط PAM را از ماژول pam_env بارگذاری می‌کند. این رفتار را می‌توان با تعریف تنظیمات خاص در فایل crontab مربوطه بازنویسی کرد.

نمایش پیام راهنما و خروج.
غیرفعال‌سازی پشتیبانی از inotify.
این گزینه به شما اجازه می‌دهد تا به جای استفاده از sendmail(8) یک دستور پوسته برای ارسال خروجی‌های پستی Cron تعیین کنید. این دستور باید یک پیام ایمیل کاملاً قالب‌بندی‌شده (همراه با هدرها) را در ورودی استاندارد دریافت کرده و آن را به عنوان یک پیام ایمیل به گیرندگان مشخص‌شده در هدرهای ایمیل ارسال کند. تعیین رشتهٔ off (به‌عنوان مثال: crond -m off) ارسال ایمیل را غیرفعال خواهد کرد.
دیمن را ملزم می‌کند تا در پیش‌زمینه (foreground) اجرا شود. این قابلیت هنگام راه‌اندازی آن از طریق init می‌تواند مفید باشد. با این گزینه، تغییر تنظیمات pam ضروری است؛ /etc/pam.d/crond نباید ماژول pam_loginuid.so را فعال کند.
همانند -n، برای سازگاری با سایر پیاده‌سازی‌های crond.
به Cron اجازه می‌دهد تا هرگونه جدول crontab تنظیم‌شده توسط کاربر را بپذیرد.
متغیر PATH را مقداردهی نمی‌کند؛ در عوض PATH از متغیرهای محیطی به ارث برده می‌شود.
پشتیبانی از خوشه‌بندی (clustering) را طبق توضیحات زیر فعال می‌کند.
این گزینه Cron را هدایت می‌کند تا خروجی وظایف را با استفاده از syslog(3) به گزارش‌های سیستم ارسال کند. این قابلیت در صورتی که سیستم شما فاقد sendmail(8) باشد یا ارسال ایمیل غیرفعال شده باشد، مفید است.
این گزینه امکان تنظیم پرچم‌های اشکال‌زدایی (debug) را فراهم می‌سازد.
نمایش نسخه و خروج.

هنگامی که سیگنال SIGHUP دریافت شود، دیمن Cron فایل لاگ خود را بسته و مجدداً باز خواهد کرد. این قابلیت برای اسکریپت‌هایی که فایل‌های لاگ را می‌چرخانند و بایگانی می‌کنند (rotate و age) بسیار مفید است. طبیعی است که اگر Cron برای استفاده از syslog(3) ساخته شده باشد، این موضوع کاربردی نخواهد داشت.

در این نسخه از Cron امکان استفاده از مسیر اشتراکی نصب‌شده تحت شبکه /var/spool/cron در میان خوشه‌ای از میزبان‌ها (cluster of hosts) وجود دارد و می‌توان مشخص کرد که در هر زمان تنها یکی از میزبان‌ها وظایف crontab موجود در این دایرکتوری را اجرا کند. این کار با راه‌اندازی Cron همراه با گزینهٔ -c و قرار دادن تنها یک خط در فایل /var/spool/cron/.cron.hostname انجام می‌شود که نشان‌دهندهٔ نام میزبان (hostname) آن میزبانی از خوشه است که باید وظایف را اجرا کند. اگر این فایل وجود نداشته باشد، یا نام میزبان درون آن با آنچه توسط gethostname(2) برگردانده می‌شود مطابقت نداشته باشد، تمام فایل‌های crontab در این دایرکتوری نادیده گرفته می‌شوند. این امر هیچ تأثیری بر وظایف cron مشخص‌شده در فایل /etc/crontab یا فایل‌های موجود در دایرکتوری /etc/cron.d ندارد. این فایل‌ها همیشه اجرا شده و مختص هر میزبان در نظر گرفته می‌شوند.

به جای ویرایش مستقیم /var/spool/cron/.cron.hostname، از گزینهٔ -n در crontab(1) برای تعیین میزبان استفاده کنید.

باید اطمینان حاصل کنید که ساعت تمام میزبان‌ها در یک خوشه و سرور فایلی که دایرکتوری اشتراکی crontab را از آن متصل (mount) می‌کنند، به‌طور دقیق همگام‌سازی شده باشد (مثلاً با استفاده از ntpd(8))، در غیر این صورت نتایج بسیار غیرقابل‌پیش‌بینی خواهند بود.

استفاده از اشتراک‌گذاری خوشه‌ای به‌طور خودکار پشتیبانی از inotify را غیرفعال می‌کند، زیرا در سامانه‌های پروندهٔ اشتراکی تحت شبکه نمی‌توان به inotify اتکا کرد.

تمامی فایل‌های crontab باید فایل‌های معمولی یا پیوندهای نمادین (symlink) به فایل‌های معمولی باشند، و نباید برای کسی به جز مالک قابل‌اجرا یا قابل‌نوشتن باشند. این الزام را می‌توان با استفاده از گزینهٔ -p در خط فرمان crond نادیده گرفت. در صورت استفاده از پشتیبانی inotify، تغییرات در فایل‌های crontab پیوند داده‌شده به صورت نمادین، به‌طور خودکار توسط دیمن cron شناسایی نمی‌شوند. دیمن cron باید یک سیگنال SIGHUP دریافت کند تا فایل‌های crontab را مجدداً بارگذاری نماید. این یک محدودیت در رابط برنامه‌نویسی (API) مربوط به inotify است.

در صورتی که sendmail نصب نشده باشد، خروجی syslog به جای ایمیل استفاده خواهد شد.

crontab(1), crontab(5), inotify(7), pam(8)

Paul Vixie
Marcela Mašláňová
Colin Dean
Tomáš Mráz

2013-09-26 cronie