نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8

Cron یک برنامه زمانبندی شغلی مبتنی بر زمان است که در سیستم عاملهای یونیکس مانند، از جمله توزیع های لینوکس یافت می شود. Cron در پس زمینه اجرا می شود و کارهای برنامه ریزی شده با Cron ، که به صورت “cron jobs” شناخته میشوند به طور خودکار انجام می گردند ، و باعث می شود cron برای اتوماسیون کارهای مربوط به تعمیر و نگهداری مفید باشد.این راهنما مروری بر نحوه برنامه ریزی کارها با استفاده از دستور ویژه cron ارائه می دهد. همچنین به چندین میانبر می رود که می توان برای نوشتن و فهم جدول کارها از آنها استفاده کرد.پیش نیازهابرای تکمیل این راهنما ، به رایانه ای نیاز دارید که CentOS 8 در آن در حال اجرا باشد. این کامپیوتر می تواند دستگاه محلی شما ، یک ماشین مجازی یا یک سرور مجازی خصوصی مجازی باشد.صرف نظر از این که از چه نوع رایانه ای برای دنبال کردن این راهنما استفاده می کنید ، باید یک کاربر غیر ریشه با امتیازات ادمین و پیکربندی شده داشته باشد. برای انجام این کار ، راهنمای راه اندازی سرور مجازی اولیه ما را برای CentOS 8 دنبال کنید.نصب Cronتقریباً هر توزیع لینوکس به صورت پیش فرض شکلی از cron را به صورت نصب شده دارد. اما ، اگر از دستگاه CentOS 8 استفاده می کنید که cron در آن نصب نشده است ، می توانید آن را با استفاده از dnfنصب کنید.قبل از نصب cron در دستگاه CentOS 8 ، ایندکس پکیج محلی کامپیوتر را به روز کنید:$ sudo dnf updateسپس cron را با دستور زیر نصب کنید:$ sudo dnf install crontabsاین دستور اعلانی صادر میکند که از شما میخواهد تأیید کنید که می خواهید بسته crontabs و متعلقات آن را نصب کنید یا خیر. با فشار دادن y و سپس ENTER این کار را انجام دهید.با این کار cron روی سیستم شما نصب می شود ، اما لازم است که Daemon را بصورت دستی شروع کنید. همچنین باید اطمینان داشته باشید که هر زمان که سرور مجازی بوت شود ، برای اجرا تنظیم شده است. می توانید هر دو این کارها را با دستور systemctl انجام دهید.برای شروع cron daemon ، دستور زیر را اجرا کنید:$ sudo systemctl start crond.serviceبرای تنظیم cron جهت اجرا هنگام شروع کار سرور مجازی، دستور زیر را تایپ کنید:$ sudo systemctl enable crond.serviceپس از آن ، cron بر روی سیستم شما نصب می شود و برای شروع برنامه ریزی کارها برای شما آماده است.درک نحوه کار Cronوظایف cron در یک فایل ویژه به اسم crontab ثبت و مدیریت می شوند. هر پروفایل کاربر در سیستم می تواند crontab مخصوص به خود را داشته باشد تا بتواند کارهایی را ترتیب دهد ، که تحت / var / spool / cron ذخیره می شود.برای برنامه ریزی یک عملکرد ، فقط کافی است crontab خود را برای ویرایش باز کنید و یک کار نوشته شده در قالب یک cron expression را اضافه کنید. ترکیب عبارات cron را می توان به دو عنصر تقسیم کرد: برنامه ریزی و دستور برای اجرا.این دستور می تواند تقریباً هر دستوری باشد که معمولاً در خط فرمان اجرا می کنید. مولفه برنامه ریزی دستور به 5 قسمت مختلف تقسیم می شود که به ترتیب زیر نوشته می شوند:زمان مقادیر مجازدقیقه 0-59ساعت 0-23روزی از ماه 1-31ماه 1-12 or JAN-DECروز هفته 0-6 or SUN-SATوظایفی که با هم در یک crontab برنامه ریزی شده اند به صورت زیر ساختار یافته اند:minute hour day_of_month month day_of_week command_to_runدر اینجا یک مثال کاربردی از یک عبارت cron آورده شده است. این عبارت هر سه شنبه ساعت 5:30 دقیقه بعد از ظهر فرمان http://www.google.com را اجرا می کند:30 17 * * 2 curl http://www.google.comهمچنین چند کاراکتر ویژه وجود دارد که می توانید در جزء برنامه یک عبارت Cron درج کنید تا برنامه ریزی ساده تر شود:*: در عبارات Cron ، ستاره یک متغیر عام است که “all” را نشان می دهد. بنابراین ، یک کار که با * * * * * … برنامه ریزی شده هر دقیقه از هر ساعت از هر روز از هر ماه است.،: کاما مقادیر برنامه ریزی را برای تشکیل لیست می شکنند. اگر می خواهید یک کار در ابتدا و اواسط هر ساعت انجام شود، به جای نوشتن دو وظیفه جداگانه (به عنوان مثال ، 0 * * * * … و 30 * * * * …) ، می توانید همان عملکرد مشابه را با یک کار یعنی (0,30 * * * * …) به دست آورید.-: یک خط فاصله طیف وسیعی از مقادیر را در قسمت برنامه نمایش می دهد. به جای داشتن 30 کار برنامه ریزی شده جداگانه برای یک فرمان ،که می خواهید 30 دقیقه اول هر ساعت اجرا شود (مانند 0 * * * * …، 1 * * * * … ، 2 * * * * … ، و غیره) ، می توانید فقط آن را به عنوان 0-29 * * * * … برنامه ریزی کنید …/: برای بیان یک مقدار مرحله می توانید از فوروارد اسلش با ستاره استفاده کنید. به عنوان مثال ، به جای نوشتن 8 وظیفه جداگانه برای اجرای یک فرمان هر سه ساعت یک بار (مانند 0 ، 0 * * * * … ، 0 3 * * * … ، 0 6 * * * * … ، و غیره) ، می توانید آن را به صورت برنامه ریزی 0 */3 * * * …. کنید .توجه: شما نمی توانید مقادیر گام را به صورت اختیاری بیان کنید. فقط می توانید از اعداد صحیح استفاده کنید که به طور مساوی در محدوده مجاز از قسمت مورد نظر تقسیم شوند. به عنوان مثال ، در قسمت “ساعت” فقط می توانید یک فوروارد اسلش را با 1 ، 2 ، 3 ، 4 ، 6 ، 8 یا 12 دنبال کنید.در اینجا چند نمونه دیگر از نحوه استفاده از مؤلفه برنامه ریزی cron آورده شده است:* * * * – فرمان را هر دقیقه اجرا کنید.12 * * * * – دستور را 12 دقیقه بعد از هر ساعت اجرا کنید.0,15,30,45 * * * * – فرمان را هر 15 دقیقه یک بار اجرا کنید./ 15 * * * * – دستور را هر 15 دقیقه یک بار اجرا کنید.0 4 * * * – دستور را هر روز در ساعت 4 صبح اجرا کنید.0 4 * * 2-4 – فرمان را هر سه شنبه ، چهارشنبه و پنجشنبه ساعت 4:00 صبح اجرا کنید.20,40 */8 * 7-12 * – فرمان را در 20 و 40 دقیقه هر ساعت 8 هر روز از 6 ماه گذشته سال اجرا کنید.اگر هر یک از این موارد برای شما گیج کننده ها بود یا برای برنامه ریزی برای کارهای مهم خود کمک میخواهید ، Cronitor یک ویرایشگر برنامه مفید Cron به نام “Crontab Guru” را ارائه می دهد که می توانید برای بررسی صحت برنامه های cron خود استفاده کنید.مدیریت Crontabsوقتی برنامه خود را تنظیم کردید و کاری را که می خواهید اجرا کنید، تعیین نمودید، باید آن را در جایی قرار دهید که Daemon شما قادر به خواندن آن باشد.همانطور که قبلاً ذکر شد ، crontab یک فایل ویژه است که زمان بندی کارها را اجرا می کند. اما ، این کارها به طور مستقیم ویرایش نمیشوند. بلکه ، توصیه می شود از دستور crontab استفاده کنید. این کار به شما امکان می دهد crontab پروفایل کاربر خود را بدون تغییر امتیازات خود با sudo ، ویرایش کنید. دستور crontab همچنین در مورد خطاهای دستوری که در crontab دارید به شما اطلاع می دهد ، در حالی که ویرایش مستقیم آن این کار را نمیکند.شما می توانید crontab خود را با دستور زیر ویرایش کنید:$ crontab -eبا این کار ، crontab را در ویرایشگر متن پیش فرض پروفایل کاربرتان باز می کنید.توجه: در سرور مجازی های جدید CentOS 8 ، دستور crontab -e به طور پیش فرض crontab کاربر شما را با vi باز می کند. vi یک ویرایشگر متن بسیار قدرتمند و قابل انعطاف است ، اما می تواند برای کاربرانی که تجربه کار با آن را ندارند ، کمی خسته کننده باشد.اگر مایل به استفاده از ویرایشگر متن قابل دسترس تر به عنوان ویرایشگر پیش فرض crontab خود هستید ، می توانید nano را به همین ترتیب نصب و پیکربندی کنید.برای این کار ، nano را با dnf نصب کنید:$ sudo dnf install nanoوقتی از شما خواسته شد ، y و سپس ENTER را فشار دهید تا تأیید کنید که می خواهید nano نصب کنید.برای تنظیم نانو به عنوان ویرایشگر تصویری پیش فرض پروفایل کاربر ، فایل .bash_profile را برای ویرایش باز کنید. اکنون که آن را نصب کرده اید ، می توانید این کار را با nano انجام دهید:$ nano ~/.bash_profileدر انتهای فایل، خط زیر را اضافه کنید:~/.bash_profile. . .export VISUAL=”nano”این کار متغیر محیط visual را روی nano تنظیم میکند. visual یک متغیر محیط یونیکس است که بسیاری از برنامه ها از جمله crontab را برای ویراشگر فایل به کار میگیرد. پس از افزودن این خط، فایل را با فشردن CTRL + X، y و سپس enter ذخیره کنید و ببندید.سپس را .bash_profile دوباره لود کنید تا shell تغییر جدید را دریافت کند:$ . ~/.bash_profileهنگامی که در ویرایشگر هستید ، می توانید برنامه خود را با تعریف هر کار در یک خط جدید وارد کنید. در غیر این صورت ، می توانید فعلا crontab را ذخیره کنید و ببندید. اگر crontab خود را با vi ، ویرایشگر پیش فرض CentOS 8 باز کردید ، می توانید این کار را با فشار دادن ESC انجام دهید تا مطمئن شوید در حالت فرمان vi هستید ، سپس x را تایپ کنید و ENTER را فشار دهید.توجه داشته باشید که در سیستم های لینوکس ، crontab دیگری وجود دارد که تحت دایرکتوری / etc / ذخیره شده است. این crontab یک نوع سیستم گسترده است که دارای یک فیلد اضافی است که برای آن باید مشخصات کاربری هر کار cron تحت آن اجرا شود. این آموزش بر روی crontab های اختصاصی کاربر تمرکز دارد ، اما اگر می خواهید crontab سیستم گسترده را ویرایش کنید ، می توانید با دستور زیر این کار را انجام دهید:$ sudo nano /etc/crontabاگر می خواهید محتوای crontab خود را مشاهده کنید ، اما آن را ویرایش نکنید ، می توانید از دستور زیر استفاده کنید:$ crontab -lمی توانید crontab خود را با دستور زیر پاک کنید:هشدار: دستور زیر از شما نمی خواهد تأیید کنید که می خواهید crontab خود را پاک کنید یا خیر. فقط در صورتی آن را اجرا کنید که مطمئن هستید می خواهید آن را پاک کنید .$ crontab -rاین دستور بلافاصله crontab کاربر را حذف می کند. با این وجود، می توانید از فلگ -i استفاده کنید تا این فرمان از شما تأیید بخواهد که آیا واقعاً می خواهید crontab کاربر را حذف کنید:$ crontab -r -iOutputcrontab: really delete sammy’s crontab?هنگامی که از شما این تایید خواسته شد ، باید y را وارد کنید تا crontab حذف شود یا n را وارد کنید تا کنسل شود.مدیریت خروجی عملکرد Cronاز آنجا که کارهای Cron در پس زمینه اجرا می شوند ، همیشه مشخص نیست که آیا با موفقیت اجرا میشوند یا خیر. اکنون که می دانید چگونه از دستور crontab استفاده کنید و چگونه یک کار cron را برنامه ریزی نمایید، می توانید با روش های مختلف هدایت مجدد خروجی کارهای cron شروع به آزمایش کنید تا به شما در ردیابی موفقیت آمیز بودن آنها کمک کند.اگر یک mail transfer agent – مانند Sendmail – در سرور مجازی خود نصب و به درستی پیکربندی کرده اید ، می توانید خروجی کارهای cron را به آدرس ایمیل مرتبط با پروفایل کاربر لینوکس خود ارسال کنید. همچنین می توانید با ارائه تنظیمات MAILTO در بالای crontab ، آدرس ایمیل را به صورت دستی مشخص کنید.به عنوان مثال ، می توانید خطوط زیر را به crontab اضافه کنید. این خطوط شامل عبارت MAILTO به همراه یک آدرس ایمیل مثال میباشد، و همچنین یک دستورالعمل SHELL که به shell میگوید اجرا شود ( در این مثال bash ) ، یک دستورالعمل HOME با اشاره به مسیری که در آن می توانید جستجوی باینری cron را انجام دهید، و یک کار تکی cron :. . .MAILTO=”example@digitalocean.com”SHELL=/bin/bashHOME=/* * * * * echo ‘Run this command every minute’این کار خاص، دستور “هر دقیقه این دستور را اجرا کن” را به همراه دارد و آن خروجی هر دقیقه به آدرس ایمیل مشخص شده پس از دستورالعمل MAILTO ارسال می شود.همچنین می توانید برای جلوگیری از دریافت ایمیل با خروجی ، خروجی یک کار cron را به یک فایل log یا به یک مکان خالی هدایت کنید.برای افزودن خروجی یک دستور برنامه ریزی شده در یک فایل log ، >> را به انتهای فرمان اضافه کنید که به دنبال آن نام و مکان یک فایل log به انتخاب شما قرار میگیرد ، مانند این:* * * * * echo ‘Run this command every minute’ >> /directory/path/file.logبهتر است بگوییم شما می خواهید از cron برای اجرای یک اسکریپت استفاده کنید اما آن را در پس زمینه اجرا کنید. برای این کار ، می توانید خروجی اسکریپت را به یک مکان خالی ، مانند / dev / null هدایت کنید که بلافاصله تمام داده های نوشته شده برای آن را حذف می کند. به عنوان مثال ، کار cron زیر یک اسکریپت PHP را اجرا می کند و آن را در پس زمینه اجرا می کند:* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1این کار cron همچنین خطای استاندارد را – که با 2 نمایش داده میشود- به خروجی استاندارد( >&1) هدایت می کند. از آنجا که خروجی استاندارد در حال حاضر به / dev / null هدایت می شود ، اساساً به اسکریپت اجازه می دهد تا بی صدا اجرا شود. حتی اگر crontab حاوی جمله MAILTO باشد ، خروجی این فرمان به آدرس ایمیل مشخص شده ارسال نمی شود.محدود کردن دسترسیشما می توانید کاربران مجاز به استفاده از دستور crontab را با فایل های cron.allow و cron.deny مدیریت کنید، که هر دو در فهرست / etc / ذخیره شده اند. اگر فایل cron.deny وجود داشته باشد ، هر کاربر ذکر شده در آن از ویرایش crontab خود منع خواهد شد. اگر cron.allow وجود داشته باشد ، فقط کاربران ذکر شده در آن قادر به ویرایش crontab های خود هستند. اگر هر دو فایل وجود داشته باشد و در هر یک از کاربران یکسان قرار داشته باشد ، فایل cron.allow بر cron.deny غلبه می کند و کاربر قادر به ویرایش crontab خود خواهد بود.به عنوان مثال ، برای رد دسترسی برای همه کاربران و سپس دسترسی به کاربر ishmael ، می توانید از ترتیب دستور زیر استفاده کنید:$ sudo echo ALL >>/etc/cron.deny$ sudo echo ishmael >>/etc/cron.allowابتدا، با افزودن ALL به فایل cron.deny ، کلیه کاربران را قفل می کنیم. سپس با اضافه کردن نام کاربری به فایل cron.allow ، به پروفایل کاربر ishmael برای اجرای کارهای cron دسترسی می دهیم.توجه داشته باشید که اگر یک کاربر دارای امتیازات sudo است ، می تواند crontab کاربر دیگری را با دستور زیر ویرایش کند:$ sudo crontab -u user -eبا این حال ، اگر cron.deny وجود داشته باشد و کاربرها در آن لیست شده باشند و در cron.allow ذکر نشده باشند ، پس از اجرای دستور قبلی ، خطای زیر را دریافت خواهید کرد:OutputThe user user cannot use this program (crontab)به صورت پیش فرض، بیشتر cron daemon ها فرض خواهند کرد که همه کاربران به cron دسترسی دارند مگر اینکه cron.allow یا cron.deny وجود داشته باشد.دستور ویژهفرمان های کوتاه متعددی وجود دارند که می توانید در فایل crontab خود استفاده کنید تا به ساده سازی برنامه ریزی کاری کمک کند. آنها در اصل میانبرهایی هستند برای برنامه ریزی عددی معادل که به صورت زیر مشخص شده:Shortcut Shorthand for@hourly 0 * * * *@daily 0 0 * * *@weekly 0 0 * * 0@monthly 0 0 1 * *@yearly 0 0 1 1 *توجه: همه cron daemon ها (به ویژه نسخه های قدیمی) نمی توانند این ترکیب را تجزیه کنند ، بنابراین قبل از اعتماد به آن ، دوبار بررسی کنید.علاوه بر این، هر زمان که سرور مجازی شروع به کار کند، @reboot همه فرمان های بعد از خود را اجرا می کند:@reboot echo “System start up”استفاده از این میانبرها در هر زمان ممکن می تواند به تفسیر برنامه کارها در crontab شما کمک کند.نتیجهCron یک ابزار انعطاف پذیر و قدرتمند است که می تواند بار بسیاری از وظایف مرتبط با مدیریت سیستم را کاهش دهد. هنگامی که با اسکریپت های shell ترکیب شود ، می توانید کارهایی را که معمولاً خسته کننده یا پیچیده هستند ، به طور خودکار انجام دهید.