Crontab - Ако в момента имате уебсайт, затруднен със сървъри, може да търсите да стартирате определени процеси като обогатяване на данни или генериране на миниатюри във фонов режим, без да се намесвате в потребителския интерфейс. Е, Linux crontab има добра програма, която прави точно това: Cron.

Въведение в Cron

И така, каква е тази програма? Cron е категоризиран като демон, който може да изпълнява планирани команди. Той се стартира автоматично при въвеждане на нива на стартиране на много потребители, от /etc/init.d. Той търси областта на шпулата при / var / spool / cron / crontabs за файлове crontab, наречени след акаунти в / etc / passwd. За достъп до crontabs в тази директория, трябва да използвате командата crontab, вместо директен достъп до тях. Cron може също така да чете леко различния формат на / etc / crontab, както и файлове в /etc/cron.d.

След като бъде конфигуриран, Cron се събужда всяка минута, изследва запаметените linux crontabs и проверява командата, за да види дали има какво да се изпълни. Ако се изпълни команда и се генерира изход, изходът след това се изпраща на собственика на crontab или на потребителя в променливата MAILTO в crontab. Децата копия на cron, който изпълнява тези процеси, са посочени в големи букви, които ще видите в изхода ps и syslog.

Cron също проверява всяка минута за промени в времето на директорията на макарата. Ако има промени, той след това проверява модното време на всички linux crontabs и презарежда тези, които са се променили. В резултат на това, cron не трябва да се рестартира при промяна на файл crontab.

Когато часовникът се промени с три или по-малко, съществуват специални съображения, като в началото и в края на лятното часово време. Ако времето се движи напред, задачите, които ще стартират в пропуснатото време, ще бъдат променени, за да стартират скоро след промяната. От друга страна, ако времето се движи назад, задачите, които падат в многократното време, няма да бъдат възстановени.

Засегнати са само задания, които се изпълняват в определено време, а не на почасови задачи или тези, отбелязани с „*“ в спецификатора за минута / час. Работите, определени с диви коли, веднага се изпълняват въз основа на новото време. В случай на смяна на часовника повече от три часа, веднага се използва новото време.

В Red hat и Debian, cron третира файловете cron.d като разширения към linux crontab файла, тъй като те следват специалния формат на файла, което означава, че те включват полето на потребителя. Тази функция има за цел да позволи пакети, които изискват по-добър контрол на планирането, отколкото дневни, месечни или седмични директории. Такива файлове в идеалния случай трябва да бъдат кръстени на техните доставчици. Файловете трябва да съответстват на конвенцията за именуване, използвана за изпълняващи се части, тъй като те трябва да се състоят единствено от големи и малки букви, цифри, тирета и подчертавания. Файловете в директорията cron.d се наблюдават за промени, точно както директорията на linux crontab. За команди като / bin / ls не забравяйте да използвате абсолютни имена на пътя, за да извикате правилната команда.

Въведение в Linux Crontab

Сега, когато знаете входовете и изходите на cron, нека разгледаме внимателно lron crontab, която е програма за инсталиране, деинсталиране или изброяване на таблиците за задвижване на самия демон. Всеки потребител може да има свой собствен Linux crontab и файловете са достъпни в директорията crontabs, но не са предназначени за директно редактиране.

Всяка команда, дадена в linux crontab на потребител, ще бъде изпълнена, тъй като потребителят го притежава. Раздели, водещи интервали и празни редове обикновено се игнорират. Линиите, които имат хеш-знак като първи символ без интервал, се игнорират, тъй като се третират като коментари. Заслужава да се отбележи, че коментарите не се допускат в същите редове от cron команди, тъй като те ще бъдат прочетени като част от командата. На подобна забележка също не се допускат коментари за линии с настройки на променливата на околната среда.

В linux crontab активен ред с настройка на cron команда или променлива среда, която е под формата „name = value“, където могат да се добавят интервали, ако е необходимо около знака, равен на знак. Всички следващи не-водещи интервали са част от стойността на името. Низът на стойността може да бъде поставен в единични или двойни съвпадащи кавички за запазване на последни или водещи празни интервали. Той не е анализиран за заместване на околната среда, така че може да откриете, че линии като „PATH = $ HOME / bin: $ PATH“ няма да работят както се очаква.

Много настройки за околната среда се настройват автоматично от cron, като HOME и LOGNAME се задават от passwd реда на потребителя и SHELL се задават на / bin / sh, а PATH се задава на / usr / bin: / bin. Можете да отмените PATH, SHELL и HOME чрез настройки на crontab. LOGNAME обаче не може да бъде променен, тъй като това е потребителят, от който работи. В BSD системи тази променлива може да се нарече USER, като в този случай ще бъде зададен и USER.

Ако изпращането на имейли е част от командите, които се изпълняват в linux crontab, cron също ще разгледа MAILTO. Ако променливата е дефинирана и не е празна, изпраща се имейл на посочения потребител. Но ако тя е празна, не се изпраща поща и вместо това се изпраща поща до собственика на linux crontab. Ако файлът cron.allow е наличен, тогава трябва да бъдете посочени в него, за да използвате тази команда. Ако този файл не съществува, но съществува файл cron.deny, тогава трябва да бъдете премахнат от него, за да използвате командата. Ако не съществува нито един от файловете, само суперпотребителят ще може да използва командата в зависимост от параметрите, зависещи от сайта. Като алтернатива, всички потребители ще могат да използват командата, какъвто е случаят със стандартните системи на Debian.

Ако опцията –u е налична, тя дава името на потребителя, чийто linux crontab изисква настройване. Ако не е дадено, crontab изследва crontab на потребителя, изпълняващ командата. Важно е да използвате тази опция винаги в интерес на безопасността, когато работите вътре в su, тъй като linux crontab може да бъде объркан от su. Опцията -l е налична за текущия crontab, който се показва на стандартния изход, докато опцията -r премахва текущия crontab. Командата -e се използва за редактиране на текущия linux crontab с помощта на редактори, посочени от променливите на околната среда EDITOR или VISUAL. Не можете да използвате редактор, който премахва връзката и пресъздава файла; имате нужда от редактор, който редактира файла на място. След излизане от редактора оправеният linux crontab ще бъде автоматично инсталиран.

Модулът pam_env също се поддържа от cron в системата Debian GNU / Linux, зареждайки средата, както е посочено във файла с модула. Трябва обаче да се отбележи, че настройката за PAM не отменя горепосочените настройки или настройките на файла crontab. Ако искате PATH, различен от местоположението на кошчето, трябва да го настроите във файла crontab. По подразбиране Cron ще изпраща имейли, използвайки типа съдържание „text / plain“ с зададения параметър за набор от знаци в кодовата група / символна карта на локала, където се е стартирал cron, което е системният локал по подразбиране без никаква настройка на променлива среда или локала, който настройват променливите. Можете да добавите свои собствени кодировки на символи за изходящата поща, като зададете променливите „Content_Transfer_Encoding“ и „Content_Type“ в crontabs, за да съответстват на заглавните съобщения на имената.

Препоръчителни курсове

  • Онлайн курс на R Studio Anova Techniques
  • Обучение за сертифициране в AngularJS
  • ISTQB Сертификационен курс на ниво 1
  • Обучение за сертифициране по основи на тестване на софтуер

Работа по Crontab

Командата crontab, намираща се в Unix-подобни и Unix операционни системи, може да бъде достъпна чрез терминал. За да видите какъв crontab работи в момента, отворете терминал на вашата система и изпълнете следната команда:

$ sudo crontab -l

За да редактирате списъците със задания на crontab, можете да използвате следната команда:

$ sudo crontab -e

Тази команда отваря редактора по подразбиране във вашата система, който може да бъде pico или vio, за промяна на crontab. За да запазите заданието crontab във вашия файл crontab, запазете и излезте от редактора. Работите в Crontab или cronjobs могат да бъдат написани така:

* * * * * /bin/execute/this/script.sh

В горната команда има пет звездички, като всяка от тях представлява различни части за дата, за да планирате работата. Ето ги и тях:

  1. Минути, вариращи от нула до 59
  2. Час, вариращ от нула до 23
  3. Ден на месеца, вариращ от един до 31
  4. Месец, вариращ от един до 12
  5. Ден от седмицата, вариращ от нула до шест, с нула означава неделя

Горният списък е даден по ред, така че първо трябва да определите минутата, последвана от час, ден от месеца, месец и ден от седмицата. Можете да запазите звездичката, ако не искате да дефинирате никое от полетата, но е важно да отбележите, че символът означава „всеки“. Ако оставите всичките пет полета неопределени със звездичките непокътнати, това означава всяка минута на всеки час, във всеки ден от всяка седмица и всеки месец.

Сега, нека предположим, че искате просто да изпълните скрипт всеки обед в неделя, ето какво правите:

0 12 * * 0 /bin/execute/this/script.sh

Сега сценарият се изпълнява, когато системният часовник удря 1200 часа всяка неделя, всяка седмица на всеки месец. Сега, ако искате да изпълните скрипта всеки работен ден в 12 часа на обяд, ето какво пишете:

0 12 * * 1-5 /bin/execute/this/script.sh

Cron изпълнява команди, когато полетата година, месец, час и минута съвпадат с текущото време или когато поне денят от месеца и годината съвпадат с текущото време. Полето може да бъде маркирано със звездичка, за да се обозначи „първо-последно“. Разрешени са числата, като диапазоните са две числа, които са разделени от тире. Конкретният обхват е включителен, така че диапазон от 8-11 за 'часа' указва изпълнението на осмия, деветия, десетия и единадесетия час. Поддържат се и списъци, като всяко число е разделено със запетаи, като „1, 2, 8, 9“. Можете също да смесвате и да съвпадате, така че да е '1, 2, 8-11'.

Можете да използвате стойности на стъпки във връзка с диапазоните, с '/' след диапазон, указващ пропускане на стойността на числото през диапазона. Например, "0-11 / 2" в полето часове указва изпълнението на команда на всеки друг час, което ще бъде написано като списък така: "0, 2, 4, 6, 8, 10". Стъпки могат да бъдат разрешени след звездичка, като '* / 2', за да се посочи команда, която трябва да се изпълнява на всеки два часа. За полетата ден и месец можете да използвате първите три букви от този ден или месец и случаят няма значение. Списъците и диапазоните от имена обаче не се поддържат. Денят на изпълнение може да бъде определен в две полета: ден от седмицата и ден от месеца. Ако и двете полета са ограничени, командата ще се изпълни, когато едно от двете полета съвпада.

Останалата част от реда е полето "шесто", което определя командата, която трябва да се изпълни. Командната част от реда заема до нов ред или до% знак. Изпълнява се от sh или от указаната обвивка в променливата SHELL на crontab файла. Командата% ще бъде променена на символи за нов ред, освен ако не бъдат избягани с наклонена черта "\". Всички данни след първия знак% се изпращат като стандартен вход към командата. Не можете да разделите един команден ред на няколко реда.

Трикове за планиране на Crontab

Форматирането може да отнеме известно привикване, но ето някои трикове, които ще ви помогнат да излезете. Ако искате да стартирате cronjob на всеки десет минути, можете или да го напишете по този начин:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Или можете да го напишете по този начин, което е по-лесно:

* / 10 * * * * /bin/execute/this/script.sh

Имате и специални думи, които можете да добавите за поле за първа минута вместо число, като така:

  • @reboot: това ще стартира скрипта веднъж при стартиране на системата
  • @yearly: да стартирате командата веднъж годишно (алтернативният формат ще бъде "0 0 1 1 *")
  • @annually: алтернатива на ключовата дума годишно
  • @monthly: да стартирате командата веднъж месечно ("0 0 1 * *")
  • @weekly: да стартирате веднъж седмично ("0 0 * * 0")
  • @daily: да стартирате веднъж седмично ("0 0 * * *")
  • @midnight: алтернатива на ежедневната ключова дума
  • @hourly: да работи всеки час ("0 * * * *")

Изходно съхранение

По подразбиране, cron записва изхода на заданието в потребителската пощенска кутия или root. Но можете да направите изхода по-опростен и представим, като го запишете в отделен лог файл. Ето как го правите:

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux е в състояние да отчита на различни нива. Имате стандартни грешки STDERR и стандартен изход STDOUT, обозначени съответно като 2 и 1. Следното изявление казва да съхранявате STDERR и STDOUT и двете, за да създадете един поток от данни от съобщения и грешки:

2> & 1

Така че дефинирахме изходния поток, сега трябва да му дадем дестинация. '>' Презаписва файла и '>>' се добавя към него. За добавяне, което е винаги по-безопасно, можете да използвате следната команда:

>> /var/log/script_output.log

заключение

Както можете да видите, cron ви позволява да задавате задачи, които автоматично да се изпълняват през равни интервали във фонов режим. Това дава възможност за автоматизирано създаване на архиви, планиране на актуализации, синхронизиране на файлове и много други. Можете да направите всичко това и още повече с crontab.

Препоръчителни статии: -

Ето няколко статии, които ще ви помогнат да получите повече подробности за Linux Crontab, така че просто преминете през линка.

  1. Въпроси и отговори за интервю за Linux | Полезни и най-питани
  2. Кариери в Linux
  3. Топ 10 полезни Linux приложения за системни администратори
  4. Linux срещу Windows 10