Cron & crontab, патлумачыў

Люкайн апублікаваны нядаўна выдатны падручнік па cron і crontab што, на маю думку, варта падзяліцца. Cron - гэта свайго роду эквівалент запланаваных заданняў у Windows, толькі што ён апрацоўваецца з тэрмінала. Тыя, хто аддае перавагу візуальны інтэрфейс для дасягнення той жа мэты, могуць у гэтым пераканацца іншы артыкул.

Што такое cron?

Назва cron паходзіць ад грэчаскага chronos, што азначае "час". У аперацыйнай сістэме Unix cron - гэта звычайны фонавы менеджэр працэсаў (дэман), які запускае працэсы альбо сцэнарыі праз роўныя прамежкі часу (напрыклад, кожную хвіліну, дзень, тыдзень ці месяц). Працэсы, якія неабходна выканаць, і час, у які яны павінны быць выкананы, паказваюцца ў файле crontab.

Як гэта працуе

Дэмон cron пачынаецца з /etc/rc.d/ o /etc/init.d у залежнасці ад размеркавання. Cron працуе ў фонавым рэжыме, правярае табліцу задач crontab кожную хвіліну / І г.д. / кронтаб У / var / шпулька / cron у пошуках задач, якія трэба выканаць. Як карыстальнік мы можам дадаваць каманды або сцэнарыі з задачамі ў cron для аўтаматызацыі некаторых працэсаў. Гэта карысна, напрыклад, для аўтаматызацыі абнаўлення сістэмы або добрай сістэмы рэзервовага капіявання.

звязаныя артыкулы:
Падручнік: Усталюйце пакеты .tar.gz і .tar.bz2

Што такое Кронтаб?

Crontab - гэта просты тэкставы файл, які захоўвае спіс каманд, якія трэба выканаць у вызначаны карыстальнікам час. Crontab праверыць дату і час выканання сцэнарыя ці каманды, дазволы на выкананне, і зробіць гэта ў фонавым рэжыме. Кожны карыстальнік можа мець уласны файл crontab, на самай справе / І г.д. / кронтаб мяркуецца, што гэта файл crontab каранёвага карыстальніка, калі звычайныя карыстальнікі (і нават root) хочуць стварыць уласны файл crontab, тады мы будзем выкарыстоўваць каманду crontab.

Crontab - гэта самы просты спосаб кіравання задачамі cron у шматкарыстальніцкіх сістэмах, як просты карыстальнік сістэмы, альбо карыстальнік root.

Выкарыстанне crontab

Мы пачынаем з простага прыкладу.

Мы збіраемся аўтаматызаваць абнаўленне сістэмы, каб выключыць надакучлівае "Мне заўсёды трэба абнаўляць, і мне гэта не падабаецца!"

звязаныя артыкулы:
Каманды на веданне сістэмы (вызначэнне апаратных і некаторых канфігурацый праграмнага забеспячэння)

Перш за ўсё мы зробім сцэнар. Гэты скрыпт будзе выкліканы cron і будзе ўтрымліваць усе інструкцыі, якія мы хочам зрабіць, таму неабходна праверыць яго ў некалькіх выпадках і некалькімі спосабамі, перш чым уключыць у cron, просты скрыпт абнаўлення, як гэты:

#! / bin / bash # прыклад абнаўлення сцэнарыя # выбраць свой дыстрыбутыў # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Выдаліце ​​# з дыстрыбутыўнай лініі. У выпадку, калі гэта Ubuntu / Debian, усё пачынаецца з apt-get.

Мы захоўваем сцэнар як update.sh (напрыклад, каталог сцэнарыяў у вашым доме). Мы змяняем дазволы на выкананне згаданага сцэнарыя з дапамогай:

chmod a + x ~ / scripts / update.sh

Мы выконваем сцэнар пару разоў, каб пераканацца, што ўсё працуе гладка, мы мадыфікуем неабходнае (ён не павінен утрымліваць памылак, інакш cron будзе паўтараць памылку зноў і зноў). Зараз дадамо заданне ў наш crontab.

Дадайце задачы ў crontab

Мы запускаем выданне crontab з crontab -e, у некаторых дыстрыбутывах (напрыклад, Ubuntu) гэта дае нам магчымасць выбраць патрэбны тэкставы рэдактар, астатняе нам застаецца vi. Файл crontab будзе выглядаць прыблізна так.

# mh каманда карыстальніка dom mon dow

дзе:

  • m адпавядае хвіліне выканання сцэнарыя, значэнне вагаецца ад 0 да 59
  • h дакладны час, апрацоўваецца 24-гадзінны фармат, значэнні вар'іруюцца ад 0 да 23, а 0 - 12:00.
  • Сонца адносіцца да дня месяца, напрыклад, вы можаце паказаць 15, калі хочаце запускаць кожныя 15 дзён
  • dow азначае дзень тыдня, ён можа быць лічбавым (ад 0 да 7, дзе 0 і 7 - нядзеля) альбо першыя 3 літары дня на англійскай мове: панядзелак, аўторак, серада, чц, пятніца, субота, сонца.
  • карыстальнік вызначае карыстальніка, які выканае каманду, гэта можа быць root альбо іншы карыстальнік, калі ў яго ёсць дазвол на выкананне сцэнарыя.
  • каманда адносіцца да каманды альбо да абсалютнага шляху выканання сцэнарыя, напрыклад: /home/usuario/scripts/update.sh, калі ён сапраўды выклікае сцэнар, ён павінен быць выкананым

Каб было зразумела, растлумачаны некалькі прыкладаў задач cron:

15 10 * * * карыстальнік /home/user/scripts/update.sh

Ён будзе запускаць сцэнар update.sh кожны дзень у 10:15

15 22 * * * карыстальнік /home/user/scripts/update.sh

Ён будзе запускаць сцэнар update.sh кожны дзень у 10:15

00 10 * * 0 корань apt-get -y абнаўленне Каранёвы карыстальнік

Ён будзе абнаўляцца кожную нядзелю ў 10:00

45 10 * * абнаўленне apt-get -y sun root

Карыстальнік root будзе запускаць абнаўленне кожную нядзелю (нядзеля) у 10:45 раніцы

30 7 20 11 * карыстальнік /home/usuario/scripts/updata.sh

20 лістапада ў 7:30 карыстальнік запусціць сцэнар

30 7 11 11 карыстальнік сонца /home/usuario/scripts/pastel_con_velitas.sh

11 лістапада ў 7:30, а гэта нядзеля, карыстальнік адзначыць свайго сісадміна (гэта значыць мяне)

01 * * * * карыстальнік /home/usuario/scripts/molestorecordatorio.sh

Прыкрае напамін кожную хвіліну кожную гадзіну кожны дзень (НЕ рэкамендуецца).

З імі ўсё яшчэ можна справіцца спецыяльныя дыяпазоны:

30 17 * * 1,2,3,4,5

У 5:30 днём кожны дзень з панядзелка па пятніцу.

00 12 1,15,28 * *

У 12 кожны першы, пятнаццаты і 28-га чысла кожнага месяца (ідэальна для разліку заработнай платы)

Калі гэта бянтэжыць, апрацоўвае crontab спецыяльныя радкі для вызначэння гэтых дыяпазонаў.

@reboot Запуск адзін раз пры запуску
@yearly працуе толькі раз на год: 0 0 1 1 *
@ штогод гэтак жа, як @yearly
@monthly працуе раз на месяц, у першы дзень: 0 0 1 * *
@weekly Weekly першая хвіліна першай гадзіны тыдня. 0 0 * * 0 ″.
@daily штодня, у 12:00. 0 0 * * *
@midnight гэтак жа, як @daily
@hourly у першую хвіліну кожнай гадзіны: 0 * * * *

Яго выкарыстанне вельмі простае.

@hourly user /home/user/scripts/molestorecordatorio.sh @ месячны карыстальнік /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Не ў апошнюю чаргу:

Cron кіраванне працай

файл crontab

Заменіце існуючы файл crontab на вызначаны карыстальнікам файл

кронтаб -e

Адрэдагуйце файл карыстальніка crontab, кожны новы радок будзе новай задачай crontab.

кронтаб -l

Пералічыце ўсе заданні карыстальніка crontab

crontab -d

Выдаліце ​​crontab карыстальніка

crontab -c рэж

Вызначае каталог карыстальніка crontab (ён павінен мець дазволы карыстальніка на запіс і выкананне)

карыстальнік crontab -u

прэфікс для апрацоўкі crontab іншага карыстальніка, прыклады:

$ sudo crontab -l -u корань $ sudo crontab -e user2 #crontab -d -u карыстальнік

Гэты інструмент, як і многія іншыя, можна ўбачыць больш падрабязна і больш падрабязна ў:

Дзякуй Лукайн!

Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

48 каментарыяў, пакіньце свой

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.

  1.   Альвара Ортыс сказаў

    Цьфу ... трохі бянтэжыць.

  2.   тонік сказаў

    адсутнічае * / 30 (у полі хвілін), якое працуе кожныя 30 хвілін ...

    1.    erm3nda сказаў

      Проста гэта я збіраўся каментаваць, пакуль не вырашыў разгледзець каментарыі 😀
      Гэты мадыфікатар - вельмі важная інфармацыя і нешта вельмі карыснае.

      1.    КІКА сказаў

        Добры дзень!
        Зараз я тэстую канфігурацыю кожныя 45 хвілін.

        * / 45 * * * *, і інструкцыя выконваецца праз 45 хвілін кожную гадзіну І кожную гадзіну. Гэта значыць:

        Працуе ў 3:45, потым у 4:00, 4:45, потым у 5:00, 5:45, 6:00, 6:45 і гэтак далей.

        У мяне нешта не так? Што я магу зрабіць, каб гэта было толькі кожныя 45 хвілін, ці хаця б раз у 45 хвілін кожную гадзіну.

    2.    КІКА сказаў

      Добры дзень!
      Зараз я тэстую канфігурацыю кожныя 45 хвілін.

      * / 45 * * * *, і інструкцыя выконваецца праз 45 хвілін кожную гадзіну І кожную гадзіну. Гэта значыць:

      Працуе ў 3:45, потым у 4:00, 4:45, потым у 5:00, 5:45, 6:00, 6:45 і гэтак далей.

      У мяне нешта не так? Што я магу зрабіць, каб гэта было толькі кожныя 45 хвілін, ці хаця б раз у 45 хвілін кожную гадзіну.

  3.   Млявы сказаў

    Прывітанне, супер карысная інфармацыя, каб удакладніць, як працуе cron.
    байтаў

  4.   Млявы сказаў

    для *

  5.   Паляўнічы сказаў

    Выдатна, дзякуй за ўдакладненне, як працуе cron .. давайце прыкладзем руку 🙂

  6.   Якаў сказаў

    Як я разумею, гэты радок будзе выкананы ў 10:15, выправіце мяне, калі я памыляюся
    Ну там напісана 10:15
    15 22 * * * карыстальнік /home/user/scripts/update.sh

  7.   Agustin сказаў

    Добры дзень! вельмі добрая інфармацыя.
    Для выканання сцэнарыя кожныя паўгадзіны радок, які трэба дадаць у CronTab, будзе выглядаць так: "30 * * * * root Scrip.sh" Правільна? Вялікі дзякуй!

  8.   давайце выкарыстоўваць Linux сказаў

    Не. Калі я добра памятаю, для гэтага вам трэба паставіць / 30 * * * * корань Scrip.sh.
    Гэта значыць, дадаць / перад 30.
    На ўра! Павел.

  9.   Джонатан сказаў

    Добры дзень, ваш пост мне спадабаўся, ён вельмі поўны, але я хацеў нешта спытаць у вас.
    У мяне праблемы з гэтай камандай і такой, як "у".

    Я хачу запусціць сцэнар у пэўны час і паставіць

    у -f /home/mi_user/Desk/script.sh 18:08 прыклад

    і сцэнар не выконваецца на экране, гэта значыць у тэрмінале, ён выконваецца ў фонавым рэжыме?

    І з cron са мной адбываецца тое ж самае, я рэдагую файл crontab з "crontab -e"

    у канцы я дадаю гэты радок:

    46 19 my_user /home/mi_user/Desk/script.sh

    і нічога не робіць, не паказвае сцэнар.

    Любая прапанова? Вялікі дзякуй і прашу прабачэння за нязручнасці

    1.    давайце выкарыстоўваць Linux сказаў

      Каб тэрмінал з'явіўся, магчыма, прыйдзецца запусціць тэрмінал і перадаць сцэнар як параметр.

      Напрыклад:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      Параметр, які трэба выкарыстоўваць, можа адрознівацца ў залежнасці ад эмулятара тэрмінала, які вы выкарыстоўваеце.

      Я спадзяюся, што гэта атрымаецца.

      Абдымі! Павел.

  10.   патрэткі сказаў

    Уклад удзячны.

    10 балаў !!

    прывітанне !!

  11.   Радольфа сказаў

    Вялікі дзякуй, гэта вельмі дапамагло мне растлумачыць некаторыя рэчы, агульны дзякуй, за больш падрабязнай інфармацыяй ці пытаннямі я перайду на СТРАНІЦУ ЧАЛАВЕКА, паўтару вітанне.

  12.   Джахір сказаў

    Дзядзька вялікі дзякуй, я чытаў і тэставаў прыклады. вялікі дзякуй ... гэта вельмі зразумела. На ўра

  13.   Геовані сказаў

    Я выкарыстаў ubuntu Server 12.04.2 LTS, і для выдалення спісу заданняў карыстальніка выкарыстоўваецца версія crontab, якая ёсць у мяне, crontab -r (і -l, як сказана ў гэтым кіраўніцтве). Вядома, гэта пытанне пытанняў версій.

    З іншага боку, я калісьці запускаў толькі crontab і дазволіў мне стварыць уласны файл выканання, але гэты не выконваўся. Запускаецца той, які знаходзіцца ў / etc / crontab. магчыма, нехта скарыстаецца каментаром.

    PS (я шукаў з дапамогай locate і whereis crontab, але ён толькі вярнуў згаданы адрас і іншы файл, які зашыфраваны, таму, калі быў выкананы той, які знаходзіцца ў / etc / crontab, але пры выкананні каманды crontab -e з'явіўся мой з усімі заданнямі, якія я вызначыў) дзе захоўваўся гэты файл '???? З павагай. Я заўсёды ўваходжу з root.

  14.   Себасцьян сказаў

    Выдатна, вельмі карысна !!!

  15.   ЬЬЬ сказаў

    Добры дзень, я хацеў бы зрабіць гэта ………… «15 10 * * * root ifdown eth0»

    гэта значыць, у пэўны час сеткавая карта выключаецца ………… ну, я паклаў яе ў crontab, і яна не спрацавала …… .. што?

    Прывітанне і дзякуй

  16.   Мігель сказаў

    Вы прапусцілі вызначэнне "mon" пасля загалоўка "Дадаць задачы ў crontab"

    Артыкул па-ранейшаму добры, cron надзвычай карысны.

  17.   Оскар сказаў

    Якім класным быў гэты добры пост, спытайце мяне
    Калі я хачу адсочваць запісы, якія засталіся пры выкананні заданняў, дзе я магу іх убачыць?

    гэта вырашыць, што я хачу ўбачыць гісторыю дзеянняў, зробленых у мінулым гэтым файле, і я хачу ўбачыць, хто яго змяніў, і дату

    дзякуй

  18.   Оскар сказаў

    Я хачу праверыць гісторыю мадыфікацый гэтага

    як я магу гэта зрабіць

    дзякуй

  19.   Андрэс Леда сказаў

    Добрай раніцы,

    Я думаю, што ў сцэнарыі ubuntu вы памыліліся, вы паставілі абнаўленне ap-get -y замест apt-get -y абнаўлення. (Вы пакінулі т).

    Прывітанне.

    1.    давайце выкарыстоўваць Linux сказаў

      Так і ёсць. Дзякуй!
      Абдымі! Павел

  20.   Габрыель сказаў

    Я хачу ведаць, як стварыць файл cron, каб мець магчымасць кожны раз вызначаць час яго выканання, каталог і г.д.

  21.   Валянцін сказаў

    Дзякуй за ўдакладненне аперацыі і асноўныя каманды для cron, зараз пацешыце сябе крыху.

  22.   шліфавальныя станкі сказаў

    Кожны раз, калі я шукаю інфармацыю на любую тэму, звязаную з Gnu / Linux, я абыходжу круглы круг, каб заўсёды знайсці ў 90% выпадкаў лепшы падручнік у гэтым вялікім супольнасці, я думаю, што з гэтага часу я пачну тут і потым у іншым месцы.

    прывітанне

    1.    давайце выкарыстоўваць Linux сказаў

      Дзякуй Сандэр! Абдымкі! Павел.

  23.   дарыё сказаў

    dom = дзень месяца
    dow = дзень тыдня
    прасцей, калі вы звязваецеся

  24.   велікодны сказаў

    Вялікі дзякуй, вельмі поўны і добра растлумачаны.

  25.   Максілія сказаў

    Гэта тое самае, што даў мне мой настаўнік аперацыйных сістэм, я нічога не мяняю, цяпер я бачу, чаму ў класе так дрэнна. -.

  26.   Марсело сказаў

    Прыблізна,

    Запыт, ці можна абмежаваць працягласць задачы?
    Напрыклад, у мяне ёсць задача, якая паўтараецца кожныя 5 хвілін, пры паўтарэнні, калі гэтая задача ўсё яшчэ актыўная, дазвольце забіць яе і запусціць зноў.

    Дзякуй,
    Марсэла.

    1.    давайце выкарыстоўваць Linux сказаў

      Прывітанне, Марсела!

      Я думаю, было б лепш, калі б вы паднялі гэтае пытанне ў нашай службе пытанняў і адказаў Спытаеце FromLinux так што ўся суполка можа дапамагчы вам у вырашэнні вашай праблемы.

      Абдымкі, Пабла.

  27.   aj сказаў

    добры пост.
    Што ўяўляе сабой каманда на тэрмінале, каб дадаць задачы ў crontab (без уводу crontab і дадання іх уручную з дапамогай "crontab -e" альбо замены crontab іншым crontab на "crontab файл").
    Ідэя заключаецца ў стварэнні знешняга сцэнарыя для дадання задач у crontab
    дзякуй

    1.    Дэвід сказаў

      мне здаецца, вы маглі б выкарыстоўваць "рэха" ўсё, што хочаце дадаць "| кошка >> 'шлях да кронатаба ((і г.д. / кронатаб)' «

  28.   Рафаэль Вера сказаў

    Як бы дакладна выконваўся выраз кожныя 3 дні

  29.   Хасэ Антоніо сказаў

    Гэй.

    У мяне праблема з выкананнем задання cron.

    Я запускаю наступную задачу з cronta -e:

    01 * * * * корань /home/user/script/mfile.sh

    але задача не выканана. Я праверыў, ці мае файл myfile.sh дазвол на выкананне, і што карыстальнік, які яго выконвае, з'яўляецца root.

    Я запускаю тую ж задачу ў / etc / crontab, і пасля перазапуску службы яна таксама не працуе для мяне.
    Змест myfile.sh - гэта каманда, якая абнаўляе БД, і калі я запускаю яе ў кансолі, яна працуе.
    любая ідэя, у чым праблема?

    1.    Фрэд сказаў

      Цалкам верагодна, што карыстальнік базы дадзеных не мае ўсіх дазволаў, і спачатку вам прыйдзецца экспартаваць зменныя асяроддзя з вашага рухавіка базы дадзеных.
      Напрыклад, у db2 гэты радок будзе ісці ў пачатак сцэнарыя
      . / home / db2inst1 / sqllib / db2profile

      Іншай прычынай можа быць тое, што для сцэнарыя патрабуецца падключэнне да базы дадзеных, зрабіць сувязь з базай дадзеных у сцэнарыі

  30.   LA3 сказаў

    Я не ведаў, што мне трэба перазапусціць кронд, я некаторы час змагаўся з гэтым

  31.   Кенія сказаў

    Яны будуць ведаць, як паказаць, што задача выконваецца кожны канец месяца ў азначаны час .. дэталь у тым, што я не магу дасягнуць таго, як ведаю, што гэта займае апошні дзень кожнага месяца .. ??? Мне даводзілася запісваць іх па адным, але калі надыходзіць канец лютага, што гэта biciesto, для мяне гэта складана ..

  32.   Ісус сказаў

    добры дзень!!

    Як спыніць працэс, які выконваецца ў crontab?

  33.   Ісус сказаў

    працэс * …………

  34.   Julianna сказаў

    Ці можа вы дапамаглі мне? eu tenho um script ад Minha аўтара, які не працуе, няма crontab! Jb dei all permissionsхes, not a specific cron or user that can take it - амаль нічога не адбываецца! Я хацеў бы ведаць, ці можаце вы дапамагчы мне, некаторыя іншыя рэчы не працуюць! Vlws

  35.   Антокс сказаў

    Як бы вы паставілі задачу запускацца кожны апошні дзень месяца (дні: 31-30-28)?

  36.   тферха сказаў

    Як вы ўжо ведаеце, каманда su выкарыстоўваецца для змены карыстальніка ў кансолі. Калі я выкарыстоўваю каманду su такім чынам: "ваш карыстальнік" мяняе карыстальніка, але без належных налад "user", калі я запускаю su як: "su - user", змяняйце карыстальніка, загружаючы налады карыстальніка. З дапамогай cron я паказваю карыстальніка, але як загрузіць налады гэтага карыстальніка?

  37.   Рабаваць сказаў

    І калі я хачу гэта спыніць?

  38.   Рэгі сказаў

    Добры дзень,
    Я не ведаю, што я раблю няправільна, але я іду па кроках, і нічога не выконваецца. Я паспрабаваў:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * корань / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * корань usr / bin / test.sh

    і зусім нічога. Ён нічога не выконвае. Я перазагрузіў і ўсё.

  39.   Феркас сказаў

    Вялікі дзякуй