Закажите задатке у Линуксу користећи Crontab

  • Крон је демон који извршава заказане задатке, а Кронтаб је датотека у којој су они дефинисани, са флексибилном синтаксом заснованом на пет поља времена и команди.
  • Правилна конфигурација времена, дозвола, апсолутних путања и променљивих окружења је кључна за осигуравање да се cron задаци исправно извршавају без тихих грешака.
  • Крон вам омогућава аутоматизацију резервних копија, чишћења, ажурирања и праћења, али ако је лоше испланиран, може утицати на перформансе и безбедност система.
  • Постоје алати и алтернативе као што су Anacron, Fcron, launchd или екстерни сервиси који проширују или замењују Cron у сложенијим сценаријима или у другим системима.

Закажите задатке у Линуксу користећи Crontab

Ако користите Линукс свакодневно, пре или касније ће вам затребати Аутоматизујте понављајуће задатке помоћу Cron-а и Crontab-аРезервне копије, ажурирања, генерисање извештаја, чишћење датотека, праћење… Ручно обављање свега тога одузима много времена и лако се заборавља. Ту долази до изражаја Cron, темељ администрације система Unix и GNU/Linux већ деценијама.

Иако на први поглед синтакса Crontab-а може деловати помало застрашујуће, када једном схватите њену логику, видећете да Заказивање задатака у Линуксу помоћу Кронтаба је много лакше него што се чиниОвај чланак пружа свеобухватан водич: шта је Cron, шта је Crontab, како писати правила, како отклањати грешке, његов потенцијални утицај на перформансе, спољне алате које можете користити, алтернативе у другим системима и случајеве употребе код куће и у пословним сврхама.

Разлике између Cron-а и Crontab-а

О Cron-у и Crontab-у се често говори као да су иста ствар, али у стварности То су два различита дела која раде заједно.Разумевање ове разлике ће вам уштедети много проблема када морате да отклањате грешке у задацима који се не покрећу.

  • Црон То је демон који ради у позадини од тренутка покретања система. Његов задатак је веома једноставан: прегледајте низ конфигурационих датотека сваког минута и проверите да ли је потребно извршити неке заказане задатке према датуму и времену система.
  • цорнтабСа своје стране, то је текстуална датотека у којој су ти задаци дефинисаниСваки корисник може имати своју crontab датотеку, са својим правилима и скриптама, које се извршавају са њиховим дозволама. Cron демон чита ове датотеке и покреће команде када је то потребно.

У било којој модерној Линук дистрибуцији ћете наћи обе компоненте доступне подразумевано, тако да Можете заказати понављајуће задатке у практично свакој дистрибуцији, било да је у питању Дебијан, Убунту, Оракл Линукс, ЦентОС, Роки, Федора итд.

црон

Шта је Cron и зашто је системско време критично?

Крон је системски демон који се покреће када се Линукс покренеОбично се покреће преко класичних скрипти за покретање у /етц/инит.д или на еквивалентним рутама као што су /етц/рц.дили коришћењем системских јединица (сервис crond или cron, у зависности од дистрибуције). Проверава сваког минута:

/etc/crontab, /etc/cron.d, /var/spool/cron и /var/spool/cron/crontabs (Тачна путања варира у зависности од дистрибуције), тражећи уносе који одговарају тренутном минуту. Ако пронађе било који, извршава назначену команду.

Нешто што многи људи превиђају јесте да Крон се потпуно ослања на системско времеАко сат или временска зона нису правилно подешени, ваши задаци ће се извршавати у погрешно време. Да бисте проверили време на модерним системима, можете користити:

timedatectl

Ова команда приказује локално време, UTC, временску зону и да ли се систем синхронизује са NTP (Network Time Protocol) серверима. Идеално би било да NTP синхронизација је активнајер се на тај начин сат аутоматски исправља.

Ако видите да је временска зона погрешна, можете је променити нечим попут timedatectl set-timezone Европа/Мадрид или другу зону која одговара вашој земљи. Такође, у многим Линукс инсталацијама, НТП се конфигурише аутоматски, али ако желите да га прилагодите, можете... /етц/нтп.цонф или користите алтернативне сервисе попут Chrony-ја.

Шта је Crontab и како је структуриран?

Кронтаб је датотека у коју пишете правила извршавања за заказане задаткеСвака линија (игноришући коментаре) представља „задатак“: када се покреће и која се команда извршава. Типично, сваки корисник има свој crontab у директоријуму за спул. / вар / споол / црон o /вар/споол/црон/цронтабс, према дистрибуцији.

Да бисте управљали својим личним crontab-ом, користите команду цорнтаб са неколико веома основних, али моћних опција. Датотеке се не уређују ручно помоћу RAW едитора, већ путем ове команде како би се избегле грешке у дозволама или форматирању.

Основна синтакса једне линије у Crontab-у је заснована на пет временских поља плус команда:

m h dom mon dow comando

  • Минуто (м): вредности од 0 до 59.
  • Време (х): вредности од 0 до 23.
  • Дан у месецу (Недеља): од 1 до 31.
  • Месец (пон): од 1 до 12 или скраћени назив (јан, феб, итд., према систему).
  • Радним даном (доле): од 0 до 6 или од 0 до 7, при чему је недеља 0 (а понекад и 7).
  • Команда: било која команда коју можете покренути у терминалу, укључујући скрипте и преусмеравања.

Типичан пример би био:

00 19 * * * /home/usuario/scripts/backup.sh

Ова линија означава да ће скрипта бити извршена сваког дана у 19:00 часова (7 часова), без обзира на дан у месецу, месец или дан у недељи.

цорнтаб

Како креирати, уређивати и приказивати свој Crontab

Да бисте радили са својом датотеком личних задатака, скоро увек користите саму команду. цорнтаб. Идеја је у томе Немојте ручно уређивати датотеке у /var/spool/cron/crontabs, пошто су дизајнирани да њима систем аутоматски управља.

Најчешће поруџбине су:

  • цронтаб -еОтворите свој crontab у подразумеваном уређивачу текста (у многим дистрибуцијама) енергија o Нано) да бисте креирали или изменили уносе.
  • цронтаб -л: приказује на екрану све задатке заказане за вашег корисника.
  • цронтаб -рОбришите цео crontab; ово је неповратна радња. Не тражи потврду ако не додате -i.
  • crontab -i -r: тражи потврду пре брисања crontab-а.
  • цронтаб датотеку: замените ваш тренутни crontab садржајем наведене датотеке.
  • цронтаб -у корисник: управљање crontab-ом другог корисника (само root или они са дозволама).
  • цронтаб -ц р: На системима који га подржавају, дефинише директоријум у коме ће се чувати crontab.

Ако желите да направите резервну копију подешавања, можете учинити нешто једноставно као:

crontab -l > ~/crontab_backup.txt

А ако вам је касније потребно да га вратите, једноставно:

crontab ~/crontab_backup.txt

Напредна синтакса: специјални знакови у Crontab-у

Поред бројева, Crontab вам омогућава да користите Специјални знакови који чине синтаксу много флексибилнијомЗахваљујући њима можете изразити опсеге, листе или интервале на компактан начин.

  • * (звездица): означава „све могуће вредности“ у том пољу. На пример, * у пољу за сате То значи све сате.
  • , (јести): одвојити један листа специфичних вредности. Пример: 0 6,18 * * * Траје у 6:00 и 18:00 часова.
  • - (сценарио): дефинише континуирани опсег. Пример: 0 8-17 * * 1-5 Саобраћа сваког сата од 8 до 17 часова, од понедељка до петка.
  • / (коса црта)означи а корак или интервал. На пример */10 * * * * значи „сваких 10 минута“.
  • опсег/осим (у зависности од имплементације): неке варијанте дозвољавају дефинисање искључених вредности, иако то није стандардно у свим cron задацима.

Типичан пример комбиноване употребе би био:

*/5 2 * * 1-5 /bin/ejecutar/script.sh

Ова линија покреће команду сваких 5 минута током другог сата (2:00) од понедељка до петкаТо је компактан начин да се замени дугачак списак минута.

Карактер # (пад) на почетку реда служи за додај коментареСве после тог симбола у истој линији се игнорише, што је савршено за документовање зашто задатак постоји или за његово привремено онемогућавање без брисања.

Кључне речи и временске пречице у Crontab-у

За најчешће случајеве, Crontab нуди пречице у облику „резервисаних речи“ Ова поља замењују сва временска поља. Веома су корисна када желите нешто попут „сваког дана“ или „сваког сата“ без размишљања о бројевима.

  • @рестарт: извршава команду када се систем покрене.
  • @годишње o @сваке годинеједном годишње, што је еквивалентно КСНУМКС КСНУМКС КСНУМКС КСНУМКС *.
  • @монтхлиједном месечно, првог дана у поноћ, што је еквивалентно 0 0 1 * *.
  • @вееклиједном недељно, у поноћ 0. дана (обично недеља), што је еквивалентно КСНУМКС КСНУМКС * * КСНУМКС.
  • @даили o @миднигхтједном дневно, у 00:00, што је еквивалентно 0 0 * * *.
  • @По сатуједном на сваки сат, у минуту 0, што је еквивалентно 0 * * * *.

На пример, ако желите да се покрене скрипта сваки сат, довољно са:

@hourly /bin/ejecutar/script.sh

А ако желите да се покрене скрипта за одржавање након сваког поновног покретањаКористили бисте:

@reboot /ruta/a/mi_script.sh

Променљиве окружења и синтакса команди

Типичан извор грешака је то што Крон ради у минималном окружењуНе пуни ти .басхрц нити целокупно ваше корисничко окружење, тако да PATH је веома ограничен (обично је нешто попут /usr/bin:/binОво прави команде попут Пајтон, Гит, ПХП или Пип Не могу се пронаћи ако не користите апсолутну путању.

Да бисте то избегли, имате две опције: Увек користите комплетне руте у вашим скриптама (на пример, /usr/bin/python3 уместо python) Или Дефинишите променљиве окружења на почетку вашег crontab-аПример би био:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
HOME=/home/usuario

Ови редови се налазе на почетку crontab датотеке, без временских пољаи утичу на остале послове које декларишете у наставку. Такође можете дефинисати МАИЛТО да би се назначило на коју имејл адресу се шаљу стандардни и грешке излазних података задатака.

Запамтити Команде у Crontab-у прихватају сву синтаксу шкољкеМожете преусмерити излаз у датотеку, повезати команде са цевоводним линијама итд. На пример, да сачувај сав излаз скрипте у дневник:

* * * * * /home/usuario/helloworld.sh >> /var/log/logs.log 2>&1

А ако желите потпуно утишајте поруке и не примајте имејлове За тај посао, можете преусмерити на / дев / нулл:

* * * * * /home/usuario/helloworld.sh >/dev/null 2>&1

Управљање излазом: логови и е-пошта

У зависности од дистрибуције и конфигурације, Cron излаз се може обрађивати на неколико начина. На системима као што су Oracle Linux или минимални Debian, ако није инсталиран mail agent, Крон демон шаље излаз директно систему за евидентирање..

У многим случајевима можете видети cron активност у датотекама као што су:

  • /вар/лог/црон (типично за Oracle Linux, CentOS, RHEL).
  • / вар / лог / сислог (уобичајено у Дебијану и дериватима).

На пример, за филтрирај само поруке везане за cron На систему који користи syslog, можете урадити нешто слично:

grep CRON /var/log/syslog

Информације су обично кратке (време, корисник, команда), али вам помажу да видите да ли нешто ради или не ради како треба.

Ако инсталирате агент за пренос поште (MTA) као што је Постфикс или Сендмејл, затим се шаље излаз послова у локални ред за пошту корисникаОбично се чува у /var/spool/mail/$USER или сличне руте, а можете га прочитати помоћу алата као што су маилк (наредба mail).

Поред тога, можете контролисати примаоца cron имејлова користећи променљиву МАИЛТО на почетку crontab-а:

MAILTO="tu.correo@ejemplo.com"

Ако оставите MAILTO празно, овако:

MAILTO=""

Онда Неће бити послата е-пошта ни за један од задатака дефинисаних у том crontab-уОво је корисно ако имате много задатака који генеришу константан излаз.

crontab гуру

Алати и услужни програми за рад са Cron-ом

Ако вам није удобно да ручно пишете cron изразе, постоји неколико... Алати који вам помажу да генеришете правила без грешакаНеки су веб сервиси, други су графичке апликације.

  • Кронтаб Гуру: Веома практична страница где пишете cron израз и он... Објасните шта ради у тексту који је разумљив људимаУпозорава вас на грешке и нуди уобичајене примере и савете.
  • Генератор Cron задатакаОнлајн асистент за генерисање cron израза из опција као што су време, дан, интервал итд. Омогућава вам да креирате понављајуће задатке са унапред дефинисана подешавања и персонализовати их.
  • ЕасиЦрон: услуга у облаку за заказивање HTTP захтева за URL-ове у одређеним интервалима. Широко се користи за покретање веб скрипти, API задатака итд., са контролном таблом, логовима и обавештењима путем е-поште.
  • КДЕ Крон (ККрон)графички алат интегрисан у KDE окружење за Креирајте, мењајте и бришите cron задатке без додиривања командне линијеОмогућава вам да изаберете време и датуме из визуелног интерфејса.
  • Крон креатор: онлајн генератор cron израза дизајниран за интеграција са Quartz библиотеком (широко коришћен у Јава окружењима), али је такође користан за разумевање сложених комбинација.

Ови услужни програми не замењују Cron на вашем систему, али Они поједностављују део израза који се односи на саставсмањење синтаксних грешака.

Врсте Crontab-а: системски и кориснички

У Линуксу постоје две главне врсте конфигурационих датотека за заказане задатке: системски crontab и корисник crontabОба користе веома сличну синтаксу, али се њима не управља на исти начин.

El Cronab sistema, обично у / етц / цронтаб и у датотекама /etc/cron.d, обично захтева роот дозволеКористи се за критичне системске задатке (ротација дневника, одржавање базе података, задаци прављења резервних копија високог нивоа итд.) и, за разлику од crontab-а корисника, експлицитно укључује поље корисника у сваки ред да би назначио Под којим идентитетом се извршава команда?.

Л Кориснички crontab се управљају са цронтаб -е и чувају се у /вар/споол/црон/цронтабс или слична локација. Само корисник може да пошаље своје послове. (или root, који може да управља туђим cron задацима), и не би требало да се директно мењају. Да бисте ограничили ко може да користи cron, можете изменити датотеке /etc/cron.allow y /etc/cron.deny.

Утицај Cron-а и Crontab-а на перформансе

Иако сам Cron троши врло мало ресурса, лоше планирање задатака може негативно утичу на перформансе системаПроблем обично није cron демон, већ оно што му командујемо да изврши.

Када закажете покретање више задатака истовремено, можете проузроковати Врхунци потрошње процесора и RAM-аНа пример, покретање три велике резервне копије, реиндексирање базе података и скрипта за анализу логова у исто време готово је гаранција да ће се сервер успорити.

Ако задаци укључују умрежавање (удаљене копије, синхронизације са rclone-ом(масовни пренос података), можете генерисати преоптерећење пропусног опсега, повећана латенција и пингутичући на друге услуге које зависе од везе.

Такође постоји ризик од сукоби задатакаДве скрипте које истовремено делују на исту датотеку или базу података са различитим операцијама могу проузроковати оштећење података или чудне грешке које је тешко дијагностиковати.

Да бисте ограничили утицај, можете користити алате као што су лепо да смањите приоритет процесора задатка, или цпулимит да бисте ограничили максимални проценат процесора који процес може да потроши:

  • Низак приоритет процесора:
    0 19 * * * usuario nice -n 19 /ruta/script.sh
  • Ограничите процесор на 50%:
    0 19 * * * usuario cpulimit -l 50 /ruta/script.sh

Коришћење Crontab-а за рутинске задатке: резервне копије, чишћење и праћење

Једна од великих предности Крона је то што вам омогућава да аутоматизовати „одржавање“ ваше машине готово без напора, побољшавајући перформансе на средњи рок и штедећи време.

Веома типична употреба је периодично чистите привремене датотеке, кеш меморију и празне директоријумеПомоћу скрипте која брише старе или празне датотеке на одређеним путањама, можете ослободити простор и смањити фрагментацију датотечног система.

Још један користан образац је закажите ажурирања система и апликација ван шпица. На пример, ноћни посао који покреће апт упдате && апт надоградња (или еквивалент у вашој дистрибуцији) омогућава да систем буде ажуриран без прекидања свакодневног рада.

Такође можете аутоматизовати затварање апликација које су предуго биле неактивнеослобађање меморије за друге процесе. У окружењима десктоп рачунара или сервера апликација, ово може направити значајну разлику.

И, наравно, Cron је савршен за скрипте за праћење и евидентирањеРедовно бележите податке о процесору, RAM-у, коришћењу диска, латенцији мреже итд., чувајте их у лог датотекама, а затим анализирајте трендове како бисте открили уска грла пре него што постану озбиљни инциденти.

Мане и ограничења Cron-а и Crontab-а

Иако је Cron изузетно моћан алат, није савршено решење за све. Има Ограничења која вреди знати како га не би гурали даље од онога што нуди.

На једној страни је крива учењаАко долазите из графичкијих окружења или система попут Windows-а, у почетку може бити застрашујуће писати cron изразе ручно и радити без визуелног интерфејса.

С друге стране, Cron је уско повезан са екосистемом Unix/Linux. Оно што научите биће корисно на многим серверима и сличним системима, али Нећете моћи да га користите какав јесте на Windows-у или macOS-у (који има своје механизме).

Што се тиче безбедности, ако Конфигурационе датотеке cron нису добро заштићенеОни могу бити улазна тачка за злонамерна извршења. Дозвољавање било ком кориснику да програмира ствари без контроле отвара врата проблемима.

Штавише, Крон Није идеалан за веома сложене задатке или задатке са много зависности.Не обрађује ток грешака на напредан начин, не може поново покушати са условном логиком и не интегрише се изворно са дистрибуираним системима. За то постоје софистициранији распоређивачи или systemd-ови сопствени тајмери.

То такође морате имати на уму crontab нуди тачност од само једног минутаАко вам је потребно нешто што се извршава неколико пута у секунди или у интервалима краћим од једног минута, мораћете да користите друге алате или програмске петље унутар саме скрипте.

Алтернативе за Cron и Crontab: Anacron, Fcron, hcron, Mcron и други

У неким сценаријима, Cron није савршено решење. На пример, ако имате лаптоп или сервер који није увек укључен, Послови заказани за одређено време могу бити „изгубљени“ ако је опрема искључена у том тренутку.

Да би се покрили такви случајеви, постоје алтернативе као што су Анакрон, који је дизајниран за обављање периодичних задатака без потребе да машина буде стално укљученаАко је рачунар био искључен када је задатак требало да се изврши, Anacron ће га покренути што је пре могуће након покретања.

Фкрон То је још једна занимљива опција. Не захтева да систем буде стално активан; може да ради са одређене датуме и времена, и нуди већу флексибилност по цену потребе за ручном инсталацијом на многим дистрибуцијама.

hcron То иде корак даље, омогућавајући употребу Ознаке за организовање послова, управљање мрежама машина и побољшање безбедностиНије толико популаран, али се може добро уклопити у окружења где је пожељна централизована администрација.

Мекон (засновано на Guile-у) разликује се по томе што се ослања на комплетан програмски језик за дефинисање заказивања задатака, дајући му огромна моћ када је у питању редефинисање послова, креирање зависности и руковање сложеном логиком.

У оперативном систему Windows се уместо тога користе решења попут Cron-а. WinCron, VisualCron или Напредни распоред задатакакоји пружају интуитивне графичке интерфејсе и упоредиве функционалности, иако су интегрисани са Мајкрософтовим екосистемом.

Cron и Crontab у пословним окружењима

У компанијама свих величина, Cron и Crontab су део „лепка“ који одржава системе у функцији. Они омогућавају аутоматизовати понављајуће и критичне процесе без сталне људске интервенције, смањујући ризик од кварова и ослобађајући време администраторима.

Међу најчешћим пословним употребама су Заказане резервне копије, ажурирања софтвера, периодично генерисање извештаја, задаци одржавања базе података и чишћење дневникаЗахваљујући грануларности синтаксе, можете фино подесити када се радње извршавају како бисте минимизирали утицај.

Штавише, ове аутоматизације имају директан утицај на ефикасност и продуктивностЗапослени не морају да памте да покрећу рутинске процесе, људске грешке су смањене, а прозори са малим оптерећењем се боље користе за обављање тешких операција.

Међутим, у пословном окружењу је препоручљиво Пажљиво документујте све заказане задатке, одржавајте резервне копије crontab датотека и периодично проверавајте да ли оно што је дефинисано и даље има смисла.Временом је лако акумулирати застареле задатке који настављају да троше ресурсе, а да притом ништа не доприносе.

На крају, Cron и Crontab постају нека врста „аутоматски распоред“ системаАко се користе мудро, постају неопходни и у скромним серверима и у великим инфраструктурама са много машина, и омогућавају вам да одржите чврсту основу на којој можете изградити друге напредније алате за оркестрацију или праћење.

У светлу свега наведеног, јасно је да Заказивање задатака у Линуксу помоћу Crontab-а остаје један од најједноставнијих и најмоћнијих начина за аутоматизацију вашег система.Са неколико добро написаних редова, можете да се носите са прављењем резервних копија, чишћењем, ажурирањима, праћењем и пословним процесима без додиривања дугмета, све док поштујете његова ограничења, управљате дозволама, контролишете окружење и разумно планирате утицај на перформансе и безбедност.

аутоматско прављење резервних копија на екстерне дискове
Повезани чланак:
Аутоматска резервна копија: Заштитите своје податке на екстерним дисковима