Cron & crontab, түсіндірді

Lucain жарияланған біраз уақыт бұрын cron және crontab бойынша керемет оқулық Менің ойымша, бөлісуге тұрарлық. Cron - бұл Windows-тағы Жоспарланған Тапсырмаларға баламалы түрі, тек оны терминалдан басқарады. Бір мақсатқа жету үшін визуалды интерфейсті қалайтындар мұны көре алады басқа элемент.

Крон дегеніміз не?

Крон атауы грек хроносынан шыққан, «уақыт» дегенді білдіреді. Unix операциялық жүйесінде cron - бұл процестерді немесе сценарийлерді белгілі бір уақыт аралығында (мысалы, әр минутта, күнде, аптада немесе айда) орындайтын тұрақты фондық менеджер (демон). Crontab файлында орындалуы керек процестер және оларды орындау уақыты көрсетілген.

Бұл қалай жұмыс істейді

Cron демоны басталады /etc/rc.d/ o /etc/init.d таралуына байланысты. Cron фонда жұмыс істейді, crontab тапсырмалар кестесін минут сайын тексереді / etc / crontab немесе / var / spool / cron орындалатын міндеттерді іздеуде. Пайдаланушы ретінде біз кейбір процестерді автоматтандыру үшін cron тапсырмалары бар командалар немесе сценарийлер қоса аламыз. Бұл, мысалы, жүйені немесе жақсы сақтық көшірме жүйесін жаңартуды автоматтандыру үшін пайдалы.

Тиісті мақала:
Оқулық: .tar.gz және .tar.bz2 бумаларын орнатыңыз

Crontab дегеніміз не?

Crontab - бұл қолданушы белгілеген уақытта орындалатын командалар тізімін сақтайтын қарапайым мәтіндік файл. Crontab сценарийдің немесе команданың орындалу күні мен уақытын, орындалу рұқсаттарын тексеріп, оны фондық режимде орындайды. Әрбір пайдаланушының жеке crontab файлы болуы мүмкін, шын мәнінде / etc / crontab бұл root пайдаланушының crontab файлы деп есептеледі, егер қарапайым пайдаланушылар (және тіпті root) өздерінің crontab файлын жасағысы келсе, онда біз crontab пәрменін қолданамыз.

Crontab - қарапайым пайдаланушы немесе түбірлік пайдаланушы ретінде көп қолданушы жүйелеріндегі cron тапсырмаларды басқарудың ең оңай әдісі.

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 болады.
  • DOM айдың күніне жатады, мысалы, сіз 15 күн сайын жүгіргіңіз келсе, 15 санын көрсете аласыз
  • dow бұл аптаның күнін білдіреді, ол сандық болуы мүмкін (0-ден 7-ге дейін, мұндағы 0 және 7 жексенбі) немесе ағылшын тіліндегі күннің алғашқы 3 әрпі: мон, сс, среда, сейсенбі, жұма, отыр, күн.
  • пайдаланушы команданы орындайтын пайдаланушыны анықтайды, ол root немесе басқа қолданушы болуы мүмкін, егер олардың сценарийді орындауға рұқсаты болса.
  • бұйрық орындау үшін сценарийдің командасына немесе абсолютті жолына сілтеме жасайды, мысалы: /home/usuario/scripts/update.sh, егер ол сценарийді шақырса, ол орындалуы керек

Крон тапсырмаларының бірнеше мысалын түсіндіру үшін:

15 10 * * * user /home/user/scripts/update.sh

Ол update.sh сценарийін күн сайын сағат 10: 15-те іске қосады

15 22 * * * user /home/user/scripts/update.sh

Ол update.sh сценарийін күн сайын 10: 15-те орындайды

00 10 * * 0 root apt-get -y жаңарту Root user

Ол әр жексенбі сайын сағат 10: 00-де жаңарып отырады

45 10 * * sun root apt-get -y жаңарту

Түбірлік қолданушы әр жексенбі (жексенбі) сағат 10: 45-те жаңартуды іске қосады

30 7 20 11 * user /home/usuario/scripts/update.sh

20 қарашада сағат 7: 30-да қолданушы сценарийді орындайды

30 7 11 11 күн қолданушысы /home/usuario/scripts/pastel_con_velitas.sh

11 қарашада таңғы сағат 7: 30-да, яғни жексенбіде пайдаланушы өзінің сисадминін атап өтеді (яғни мен)

01 * * * * user /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 @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y жаңарту

Ақырғы бірақ соңғы емес:

Cron жұмысын басқару

crontab файлы

Қолданыстағы crontab файлын пайдаланушы анықтаған файлмен ауыстырыңыз

crontab -e

Пайдаланушының crontab файлын өңде, әр жаңа жол жаңа crontab тапсырмасы болады.

crontab -l

Пайдаланушының барлық crontab тапсырмаларын тізімдеңіз

crontab -d

Пайдаланушының crontab жою

crontab -c дир

Пайдаланушының crontab каталогын анықтайды (мұнда пайдаланушының жазу және орындау рұқсаттары болуы керек)

crontab -u пайдаланушысы

басқа пайдаланушының crontab-ін өңдеуге арналған префикс, мысалдар:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

Бұл құралды, басқалар сияқты, тереңірек және егжей-тегжейлі көруге болады:

Рахмет Лукаин!

Мақаланың мазмұны біздің ұстанымдарымызды ұстанады редакторлық этика. Қате туралы хабарлау үшін нұқыңыз Мұнда.

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 * * * user /home/user/scripts/update.sh

  7.   Агустин дижо

    Сәлеметсіз бе! өте жақсы ақпарат.
    Сценарийді әр жарты сағат сайын орындау үшін CronTab-қа қосу керек жол: «30 * * * * root Scrip.sh» Дұрыс па? Көп рақмет сізге!

  8.   линуксті қолданайық дижо

    Жоқ. Егер менің есімде дұрыс болса, онда сіз Scrip.sh / 30 * * * * түбірін қоюыңыз керек.
    Яғни, / санын 30-ға дейін қосыңыз.
    Алақай! Пауыл.

  9.   Джонатан дижо

    Сәлеметсіз бе, маған сіздің жазбаңыз ұнады, өте толық, бірақ мен сізден бір нәрсе сұрағым келді.
    Менде осы пәрменде проблемалар бар және «at» сияқты.

    Мен сценарийді белгілі бір уақытта іске қосқым келеді

    -f /home/mi_user/Desk/script.sh 18:08 мысалы

    ал сценарий экранда, яғни терминалда орындалмайды, ол фонда орындалады ма?

    Cron-мен бірдей жағдай болады, мен crontab файлын «crontab -e» арқылы өңдеймін

    соңында мен осы жолды қосамын:

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

    және ол ешнәрсе жасамайды, сценарийді де көрсетпейді.

    Ұсынысыңыз бар ма? Сізге көп рахмет және қолайсыздықтар үшін кешірім сұраңыз

    1.    линуксті қолданайық дижо

      Терминал пайда болуы үшін сіз терминалды іске қосып, сценарийді параметр ретінде беруіңіз керек.

      Мысалы:

      lxterminal -e «my_user /home/my_user/Desk/script.sh»

      Пайдаланылатын параметр сіз қолданатын терминал эмуляторына байланысты өзгеруі мүмкін.

      Бұл жұмыс істейді деп үміттенемін.

      Құшақтаңыз! Пауыл.

  10.   патреткалар дижо

    Үлес бағаланады.

    10 ұпай !!

    салу2 !!

  11.   Rodolfo дижо

    Сізге көп рахмет, маған біраз нәрсені нақтылауға көмектесті, жалпы алғыс, толығырақ немесе күмәндану үшін MAN PAGE парағына қайта барамын, сәлемдесу.

  12.   жаһир дижо

    Ағай сізге көп рахмет, мен мысалдарды оқып, тексеріп жүрдім. көп рахмет ... өте түсінікті. Алақай!

  13.   Геованни дижо

    Мен ubuntu Server 12.04.2 LTS-ді пайдаландым және пайдаланушының жұмыс тізімін жою үшін менде crontab нұсқасы, crontab -r (және осы нұсқаулықта айтылғандай -l) қолданылады. Әрине, бұл нұсқалар туралы.

    Екінші жағынан, мен бір кезде тек crontab-ты іске қосқан едім, және маған жеке орындау файлын жасауға рұқсат етіңіз, бірақ бұл орындалатын файл емес еді. Іске қосылған - / etc / crontab ішіндегі біреу. мүмкін біреу түсініктемені қолданар.

    PS (мен қайда орналасқанын анықтадым, бірақ ол тек жоғарыда көрсетілген мекен-жайды және шифрланған басқа файлды қайтарады, сондықтан егер орындалған / etc / crontab файлында болса, бірақ crontab -e пәрменін орындаған кезде менікі пайда болады мен анықтаған барлық жұмыстармен бірге) бұл файл қайда сақталды '???? Құрметпен. Мен әрқашан root арқылы кіремін.

  14.   Себастьян дижо

    Керемет, өте пайдалы !!!

  15.   MMM дижо

    Сәлеметсіз бе, мен мұны істегім келеді ………… «15 10 * * * root ifdown eth0»

    яғни, белгілі бір уақытта желілік карта өшіп қалады …………, мен оны crontab-ға қойдым, ол жұмыс істемеді …… .. не болды?

    Сәлем мен алғыс

  16.   Мигель дижо

    «Crontab-қа тапсырмалар қосу» деген тақырыптан кейін «мон» мағынасын анықтадыңыз

    Мақала әлі жақсы, cron өте пайдалы.

  17.   OS көлігі дижо

    Жақсы жазба қандай керемет болды, сұраңыз
    Тапсырмаларды орындау кезінде қалдырылған жазбаларды қадағалағым келсе, оны қайдан көруге болады?

    is decdir Мен осы файлдың өткен уақытындағы әрекеттер тарихын көргім келеді және оны кім өзгерткенін және күнін көргім келеді

    рахмет

  18.   Oscar дижо

    Мен мұның өзгеру тарихын тексергім келеді

    мен мұны қалай істей аламын

    рахмет

  19.   Андрес Ледо дижо

    Қайырлы таң,

    Менің ойымша, ubuntu сценарийінде сіз қате жібердіңіз, сіз apt-get -y жаңарту орнына ap-get -y жаңартуын қойдыңыз (Сіз т қалдырдыңыз).

    А құттықтау.

    1.    линуксті қолданайық дижо

      Солай. Рақмет сізге!
      Құшақтаңыз! Пауыл

  20.   Габриэль дижо

    Әрбір орындалған уақытты, каталогты және т.с.с. көрсету үшін cron файлын қалай құруға болатындығын білгім келеді.

  21.   Валентин дижо

    Операцияны түсіндіргеніңіз үшін және cron-ға арналған негізгі командалар үшін рақмет, енді біраз уақыт көңіл көтеру үшін.

  22.   Сандер дижо

    Мен Gnu / Linux-ке қатысты кез-келген тақырыпқа байланысты кез-келген ақпаратты іздеген сайын, мен әрдайым 90% жағдайда осы үлкен қоғамдастықтың ең жақсы оқулығын табамын, содан кейін мен осында, содан кейін басқа жерде бастаймын деп ойлаймын.

    тілекпен

    1.    линуксті қолданайық дижо

      Сандерге рахмет! Құшақ! Пауыл.

  23.   Дарья дижо

    дом = айдың күні
    dow = аптаның күні
    егер сіз байланыстырсаңыз оңайырақ

  24.   Pascual дижо

    Сізге көп рахмет, өте толық және жақсы түсіндірілген.

  25.   Максилья дижо

    Бұл менің Операциялық жүйелер пәнінің мұғалімі берген нәрсе, мен ештеңе өзгертпеймін, енді сыныптың неге нашар екенін түсіндім.-.

  26.   Марсело дижо

    Болжалды,

    Сұрау, тапсырманың ұзақтығын шектеуге бола ма?
    Мысалы, менде әр 5 минут сайын қайталанатын тапсырма бар, егер бұл тапсырма әлі белсенді болса, оны қайталаңыз, оны өлтіріп, қайта іске қосыңыз.

    Рахмет,
    Марсело.-

    1.    линуксті қолданайық дижо

      Сәлеметсіз бе, Марсело!

      Менің сұрағыма жауап беру қызметінде осы сұрақты қойсаңыз жақсы болар еді деп ойлаймын Linux-тен сұраңыз бүкіл қоғамдастық сіздің проблемаңызға көмектесуі үшін.

      Құшақтау, Пабло.

  27.   aj дижо

    жақсы пост.
    Crontab-қа тапсырмаларды қосу үшін crontab-қа қандай команда керек (crontab-ға кірмей және оларды 'crontab -e' -мен қолмен қоспай немесе crontab-ды басқа crontab-қа 'crontab file' -мен алмастырмай).
    Мұндағы мақсат - crontab-қа тапсырмаларды қосу үшін сыртқы сценарий құру
    Gracias

    1.    Дэвид дижо

      менің ойымша, 'echo' қосқыңыз келетін нәрсені қолдануға болады '| мысық >> 'cronotab жолы (/ etc / cronotab)' «

  28.   Рафаэль Вера дижо

    Өрнек әр 3 күнде қалай дәл орындалады

  29.   Хосе Антонио дижо

    Сәлеметсіз бе!

    Менде cron жұмысын орындау қиын болды.

    Мен келесі тапсырманы cronta -e көмегімен орындаймын:

    01 * * * * root /home/user/script/mfile.sh

    бірақ тапсырма орындалмады. Myfile.sh бағдарламасының орындалуға рұқсаты бар екенін және оны орындайтын пайдаланушының root екендігіне көз жеткіздім.

    Мен сол тапсырманы / etc / crontab-да орындаймын және қызметті қайта іске қосқаннан кейін ол мен үшін де жұмыс істемейді.
    Myfile.sh мазмұны - бұл ДБ-ны жаңартатын команда, егер оны консольға қоссам, ол жұмыс істейді.
    мәселе қандай болуы мүмкін деген кез-келген түсінік бар ма?

    1.    Fredd дижо

      Дерекқор пайдаланушысында барлық рұқсаттар болмауы мүмкін, алдымен сіз қоршаған орта айнымалыларын дерекқорыңыздың жүйесінен экспорттауыңыз керек.
      Мысалы, db2-де бұл жол сценарийдің басында болады
      . / home / db2inst1 / sqllib / db2profile

      Басқа себеп сценарийдің дерекқорға қосылуын талап етуі, сценарийдің ішінде дерекқорға қосылуын талап етуі мүмкін

  30.   LA3 дижо

    Мен кронды қайта қосуым керек екенін білмедім, мен онымен біраз уақыт күресіп жүрдім

  31.   Кеня дижо

    Олар тапсырманың айдың соңында, көрсетілген уақытта орындалатындығын қалай көрсететінін біледі .. егжей-тегжейлі, мен оның әр айдың соңғы күнін алатындығын біле алмаймын .. ?? Оларды бірінен соң бірін жазуға мәжбүр болдым, бірақ ақпан айы аяқталғаннан кейін бұл өте қиын болады.

  32.   Иса дижо

    Қайырлы күн!!

    Crontab-та орындалатын процесті қалай тоқтатуға болады?

  33.   Иса дижо

    процесс * …………

  34.   Джулианна дижо

    Сіз маған көмектесе аласыз ба? eu tenho um сценарийі минха авторы, ешқандай жұмыс істемейді crontab! Jb dei барлық рұқсат етіледі, нақты крон немесе оны орындай алатын қолданушы емес, ештеңе болмайды! Сіз маған көмектесе алатыныңызды білгім келеді, кейбір басқа нәрселер жұмыс істемейді! Vlws

  35.   Антокс дижо

    Сіз айдың әр соңғы күнінде (31-30-28 күндері) жүгіруге қалай тапсырма берер едіңіз?

  36.   тферчо дижо

    Өзіңіз білетіндей, su командасы пользовательді консольде өзгерту үшін қолданылады. Егер мен su командасын осылай қолдансам: «сіздің қолданушыңыз» пайдаланушыны өзгертеді, бірақ «user» -дің тиісті параметрлерінсіз, егер su: «su - user» ретінде іске қоссам, пайдаланушының параметрлерін жүктеу арқылы қолданушыны өзгертемін. Cron көмегімен мен пайдаланушыны көрсетемін, бірақ осы пайдаланушының конфигурацияларын қалай жүктеуге болады?

  37.   тонау дижо

    Егер мен оны тоқтатқым келсе?

  38.   Рэги дижо

    сәлем,
    Мен не істеп жатқанымды білмеймін, бірақ мен қадамдарды орындаймын және ештеңе орындалмайды. Мен көрдім:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    және ештеңе жоқ. Ол ештеңе орындамайды. Мен бәрін қайта жүктедім.

  39.   Феркос дижо

    көп рахмет