Cron & crontab, paskaidrots

Lūkēns publicēts pirms kāda laika lieliska apmācība par cron un crontab kas, manuprāt, ir vērts dalīties. Cron ir sava veida ekvivalents ieplānotajiem uzdevumiem sistēmā Windows, tikai ar to tiek galā no termināļa. Tie, kas izvēlas vizuālo saskarni, lai sasniegtu to pašu mērķi, to var redzēt cits priekšmets.

Kas ir cron?

Cron nosaukums cēlies no grieķu valodas chronos, kas nozīmē "laiks". Unix operētājsistēmā cron ir regulārs fona procesu pārvaldnieks (dēmons), kas procesus vai skriptus palaiž regulāri (piemēram, katru minūti, dienu, nedēļu vai mēnesi). Procesi, kas jāizpilda, un to izpildes laiks ir norādīti crontab failā.

COMO darbi

Cron dēmons sākas no /etc/rc.d/ o /etc/init.d atkarībā no sadalījuma. Krona darbojas fonā, katru minūti pārbauda crontab uzdevumu tabulu / etc / crontab o lv / var / spole / cron veicamo uzdevumu meklējumos. Kā lietotājs mēs varam pievienot komandas vai skriptus ar uzdevumiem, lai automatizētu dažus procesus. Tas ir noderīgi, piemēram, lai automatizētu sistēmas atjaunināšanu vai labu dublēšanas sistēmu.

saistīto rakstu:
Apmācība: instalējiet .tar.gz un .tar.bz2 pakotnes

Kas ir Crontab?

Crontab ir vienkāršs teksta fails, kurā glabājas komandu saraksts, kas jāizpilda lietotāja norādītajā laikā. Crontab pārbaudīs skripta vai komandas izpildes datumu un laiku, izpildes atļaujas un to darīs fonā. Katram lietotājam var būt savs crontab fails, patiesībā / etc / crontab tiek pieņemts, ka tas ir root lietotāja crontab fails, kad parastie lietotāji (un pat root) vēlas izveidot savu crontab failu, tad mēs izmantosim komandu crontab.

Crontab ir vienkāršākais veids, kā pārvaldīt cron uzdevumus vairāku lietotāju sistēmās kā vienkāršs sistēmas lietotājs vai root lietotājs.

Izmantojot crontab

Mēs sākam ar vienkāršu piemēru.

Mēs automatizēsim sistēmas atjaunināšanu, lai novērstu kaitinošo tekstu "Man vienmēr ir jāatjaunina, un tas man nepatīk!"

saistīto rakstu:
Komandas, lai pārzinātu sistēmu (identificētu aparatūru un dažas programmatūras konfigurācijas)

Vispirms mēs izveidosim scenāriju. Šis skripts tiks izsaukts ar cron, un tajā būs visas instrukcijas, kuras mēs vēlamies, lai to izdarītu, tāpēc pirms iekļaušanas cron ir nepieciešams to pārbaudīt vairākos gadījumos un vairākos veidos, šāds vienkāršs atjaunināšanas skripts:

#! / bin / bash #script atjaunināšanas piemērs #izvēlieties izplatīšanu # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Noņemiet # no savas izplatīšanas līnijas. Gadījumā, ja tas ir Ubuntu / Debian, tas sākas ar apt-get.

Mēs saglabājam skriptu kā update.sh (piemēram, skripti direktorē jūsu māju). Mēs mainām minētā skripta izpildes atļaujas ar:

chmod a + x ~ / scripts / update.sh

Mēs pāris reizes izpildām skriptu, lai pārliecinātos, ka viss darbojas nevainojami, mēs pārveidojam nepieciešamo (tajā nedrīkst būt kļūdu, pretējā gadījumā cron kļūdu atkārtos tikai atkal un atkal). Tagad, lai pievienotu uzdevumu mūsu vietnei.

Pievienojiet uzdevumus crontab

Crontab izdevums tiek izpildīts ar crontab -e, dažos distros (piemēram, Ubuntu) tas dod mums iespēju izvēlēties vajadzīgo teksta redaktoru, pārējais mums paliek ar vi. Crontab fails izskatīsies apmēram šādi.

# mh dom mon dow lietotāja komanda

kur:

  • m atbilst skripta izpildes minūtei, vērtība svārstās no 0 līdz 59
  • h precīzs laiks, tiek apstrādāts 24 stundu formāts, vērtības svārstās no 0 līdz 23, 0 ir 12:00 pusnakts.
  • dāvana attiecas uz mēneša dienu, piemēram, varat norādīt 15, ja vēlaties palaist ik pēc 15 dienām
  • dow nozīmē nedēļas dienu, tā var būt skaitliska (no 0 līdz 7, kur 0 un 7 ir svētdiena) vai dienas pirmie 3 burti angļu valodā: pirmdiena, otrdiena, trešdiena, ceturtdiena, piektdiena, sestdiena, svētdiena.
  • lietotājs definē lietotāju, kurš izpildīs komandu, tā var būt root vai cits lietotājs, ja vien viņiem ir atļaujas izpildīt skriptu.
  • komanda attiecas uz komandu vai izpildāmā skripta absolūto ceļu, piemēram: /home/usuario/scripts/update.sh, ja tas izsauc skriptu, tam jābūt izpildāmam

Lai būtu skaidrs, daži izskaidroto cron uzdevumu piemēri:

15 10 * * * lietotājs /home/user/scripts/update.sh

Tas palaidīs skriptu update.sh katru dienu pulksten 10:15

15 22 * * * lietotājs /home/user/scripts/update.sh

Tas katru dienu paliks skriptu update.sh plkst. 10

00 10 * * 0 root apt-get -y atjauninājums Root lietotājs

Tas tiks atjaunināts katru svētdienu plkst. 10:00

45 10 * * saules saknes apt-get -y atjauninājums

Saknes lietotājs atjauninājumu veiks katru svētdienu (svētd.) Plkst. 10

30 7 20 11 * lietotājs /home/usuario/scripts/updata.sh

20. novembrī pulksten 7:30 lietotājs palaidīs skriptu

30 7 11 11 saules lietotājs /home/usuario/scripts/pastel_con_velitas.sh

11. novembrī pulksten 7:30 un tas ir svētdien, lietotājs svinēs savu sysadmin (tas ir, mani)

01 * * * * lietotājs /home/usuario/scripts/molestorecordatorio.sh

Kaitinošs atgādinājums katru stundu katru stundu katru stundu (NAV ieteicams).

Ar tiem joprojām var rīkoties īpašie diapazoni:

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

Katru dienu no pulksten 5:30 pēcpusdienā no pirmdienas līdz piektdienai.

00 12 1,15,28 *

Pulksten 12 katra mēneša pirmajā, piecpadsmitajā un 28. dienā (ideāli piemērots algas aprēķināšanai)

Ja tas ir mulsinoši, crontab rokturi īpašas virknes, lai definētu šos diapazonus.

@reboot Palaidiet vienreiz, startējot
@gadu darbojas tikai reizi gadā: 0 0 1 1 *
@gadīgi tāds pats kā @gadīgi
@ mēnesī notiek reizi mēnesī, pirmajā dienā: 0 0 1 * *
@ katru nedēļu nedēļas pirmās stundas pirmā minūte. 0 0 * * 0 ″.
@ katru dienu, plkst. 12:00. 0 0 * * *
@pusnakts tāds pats kā @daily
@ stundas laikā katras stundas pirmajā minūtē: 0 * * * *

Tās izmantošana ir ļoti vienkārša.

@hourly lietotājs /home/user/scripts/molestorecordatorio.sh @mēneša lietotājs /home/user/scripts/backup.sh

Pēdējais bet ne sliktākais:

Cron darba vadība

crontab fails

Nomainiet esošo crontab failu ar lietotāja definētu failu

crontab -e

Rediģējiet lietotāja crontab failu, katra jaunā rinda būs jauns crontab uzdevums.

crontab -l

Uzskaitiet visus lietotāja crontab uzdevumus

crontab -d

Izdzēsiet lietotāja crontab

crontab -c rež

Definē lietotāja crontab direktoriju (tam ir jābūt lietotāja rakstīšanas un izpildes atļaujām)

crontab -u lietotājs

prefikss, lai apstrādātu cita lietotāja vietni, piemēri:

$ sudo crontab -l -u sakne $ sudo crontab -e user2 #crontab -d -u lietotājs

Šis rīks, tāpat kā daudzi citi, ir padziļināti un detalizētāk apskatāms:

Paldies Lucain!

Raksta saturs atbilst mūsu principiem redakcijas ētika. Lai ziņotu par kļūdu, noklikšķiniet uz šeit.

48 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Alvaro Ortizs teica

    Uh ... mazliet mulsinoši.

  2.   tonizējošs teica

    * / 30 nav (laukā minūtes), kas darbojas ik pēc 30 minūtēm ...

    1.    erm3nda teica

      Tieši to es gatavojos komentēt, līdz nolēmu pārskatīt komentārus 😀
      Šis modifikators ir ļoti svarīga informācija un kaut kas ļoti noderīgs.

      1.    KIKA teica

        Labdien!
        Šobrīd es testēju konfigurāciju ik pēc 45 minūtēm.

        * / 45 * * * *, un instrukcija tiek izpildīta 45 minūtes katru stundu UN katru stundu. Proti:

        Tas darbojas 3:45, pēc tam 4:00, 4:45, pēc tam 5:00, 5:45, 6:00, 6:45 utt.

        Man kaut kas nav kārtībā? Ko es varu darīt, lai tas notiktu tikai ik pēc 45 minūtēm vai vismaz reizi 45 minūtēs katru stundu.

    2.    KIKA teica

      Labdien!
      Šobrīd es testēju konfigurāciju ik pēc 45 minūtēm.

      * / 45 * * * *, un instrukcija tiek izpildīta 45 minūtes katru stundu UN katru stundu. Proti:

      Tas darbojas 3:45, pēc tam 4:00, 4:45, pēc tam 5:00, 5:45, 6:00, 6:45 utt.

      Man kaut kas nav kārtībā? Ko es varu darīt, lai tas notiktu tikai ik pēc 45 minūtēm vai vismaz reizi 45 minūtēs katru stundu.

  3.   Ļengans teica

    Sveiki, super noderīga informācija, lai precizētu, kā darbojas cron.
    Baiti

  4.   Ļengans teica

    priekš *

  5.   Mednieks teica

    Lieliski, paldies, ka noskaidrojāt, kā cron darbojas .. pieliksim nelielu roku 🙂

  6.   Jēkabs teica

    Šī rinda, kā es saprotu, tiks izpildīta pulksten 10:15, izlabojiet mani, ja kļūdos
    Nu tur rakstīts 10:15
    15 22 * * * lietotājs /home/user/scripts/update.sh

  7.   Agustin teica

    Sveiki! ļoti laba info.
    Lai skriptu izpildītu ik pēc pusstundas, rinda, kas jāpievieno CronTab, būtu: "30 * * * * root Scrip.sh" Vai pareizi? Liels tev paldies!

  8.   izmantosim linux teica

    Nē. Ja es pareizi atceros, tam ir jāievieto / 30 * * * * root Scrip.sh.
    Tas ir, pievienojiet / pirms 30.
    Priekā! Pāvils.

  9.   Jonathan teica

    Sveiki, man patika jūsu ziņa, tā ir ļoti pilnīga, bet es gribēju jums kaut ko pajautāt.
    Man ir problēmas ar šo komandu un tādu kā "at".

    Es gribu izpildīt skriptu noteiktā laikā, un es to ievietoju

    at -f /home/mi_user/Desktop/script.sh 18:08 piemērs

    un skripts netiek izpildīts ekrānā, tas ir, terminālā, vai tas tiek izpildīts fonā?

    Un ar cron tas pats notiek ar mani, es rediģēju crontab failu ar "crontab -e"

    beigās es pievienoju šo rindu:

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

    un tas neko nedara, neparāda skriptu.

    Kādi ieteikumi? Liels paldies un atvainojos par sagādātajām neērtībām

    1.    izmantosim linux teica

      Lai parādītu termināli, jums, iespējams, būs jāpalaiž termināls un jānodod skripts kā parametrs.

      Piemēram:

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

      Izmantojamais parametrs var atšķirties atkarībā no izmantotā termināļa emulatora.

      Es ceru, ka tas izdosies.

      Apskāviens! Pāvils.

  10.   patretkas teica

    Ieguldījums tiek novērtēts.

    10 punkti !!

    salu2 !!

  11.   Rodolfo teica

    Liels paldies, tas man ļoti palīdzēja precizēt dažas lietas, kopīgu paldies, lai iegūtu sīkāku informāciju vai jautājumus, kurus es apmeklēšu MAN PAGE, atkārtoti sveicieni.

  12.   jahir teica

    vīrietis liels paldies, es lasīju un pārbaudīju piemērus. liels paldies ... tas ir ļoti saprotams. Priekā

  13.   Geovanni teica

    Es izmantoju ubuntu Server 12.04.2 LTS, un man ir pieejamā crontab versija, lai izdzēstu lietotāja darba sarakstu, crontab -r (un -l, kā teikts šajā rokasgrāmatā). Protams, tas ir jautājums par versijām.

    No otras puses, es reiz palaidu tikai crontab un šāda veida ļāva man izveidot savu izpildes failu, bet tas netika izpildīts. Darbojas tas, kas atrodas mapē / etc / crontab. varbūt kāds izmantos komentāru.

    PS (Es meklēju ar locate un whereis crontab, bet tas atgrieza tikai iepriekš minēto adresi un citu failu, kas ir šifrēts, tādēļ, ja izpildītais bija fails / etc / crontab, bet, izpildot komandu crontab -e, parādīsies mans ar visiem manis definētajiem darbiem) kur tika glabāts šis fails '???? Sveicieni. Es vienmēr piesakos ar root.

  14.   Sebastian teica

    Izcili, ļoti noderīgi !!!

  15.   mmm teica

    Labdien, es vēlētos to izdarīt ... 15 10 * * * saknes ifdown eth0 »

    tas nozīmē, ka noteiktā laikā tīkla karte ir izslēgta ... labi, es to ievietoju crontab un tas nedarbojās ... ... kas notiek?

    Saludos y Gracias

  16.   Miguel teica

    Jūs nokavējāt definēt "mon" pēc nosaukuma "Add task to crontab"

    Raksts joprojām ir jauks, cron ir ārkārtīgi noderīgs.

  17.   OScar teica

    Cik foršs bija tas labais ieraksts, jautājiet man
    Ja es vēlos sekot uzskaitei, ko atstāj uzdevumu izpilde, kur es to varu redzēt?

    ir decdir Es gribu redzēt šī faila pagātnē veikto darbību vēsturi un vēlos redzēt, kurš to ir modificējis, un datums

    paldies

  18.   Oskars teica

    Es vēlos pārbaudīt šī modifikāciju vēsturi

    kā es to varu izdarīt

    paldies

  19.   Andres Ledo teica

    Labrīt,

    Es domāju, ka Ubuntu skriptā esat kļūdījies, bet ap-get -y jaunināšanas vietā esat ievietojis ap-get -y jauninājumu. (Jūs esat atstājis t).

    Sveiciens.

    1.    izmantosim linux teica

      Tā arī ir. Paldies!
      Apskāviens! Pāvils

  20.   Gabriel teica

    Es gribu zināt, kā izveidot cron failu, lai varētu norādīt laiku, kad tas tiek izpildīts, direktoriju utt.

  21.   Valentin teica

    Paldies, ka precizējāt operāciju un cron pamata komandas, lai mazliet izklaidētu sevi.

  22.   Sander teica

    Ikreiz, kad meklēju informāciju par jebkuru ar Gnu / Linux saistītu tēmu, es turpinu visu laiku, lai 90% gadījumu vienmēr atrastu labāko apmācību šajā lieliskajā kopienā, es domāju, ka turpmāk es sākšu šeit un tad citur.

    Sveicieni

    1.    izmantosim linux teica

      Paldies Sander! Apskāviens! Pāvils.

  23.   Darjo teica

    dom = mēneša diena
    dow = nedēļas diena
    tas ir vieglāk, ja jūs asociējaties

  24.   Paschal teica

    Liels paldies, ļoti pilnīgs un labi izskaidrots.

  25.   Maksilija teica

    Tas ir tas pats, ko mums deva mans OS skolotājs, es neko nemainu, tagad es redzu, kāpēc klase ir tik slikta .-. Nu, tas ir tas pats, kas mājas darbs xD

  26.   Marcelo teica

    Paredzamais,

    Vaicājums, vai uzdevuma ilgumu var ierobežot?
    Piemēram, man ir uzdevums, kas tiek atkārtots ik pēc 5 minūtēm, atkārtojot, ja šis uzdevums joprojām ir aktīvs, nogaliniet to un palaidiet vēlreiz.

    Paldies,
    Marselo. -

    1.    izmantosim linux teica

      Sveiks, Marselo!

      Es domāju, ka būtu labāk, ja jūs izvirzītu šo jautājumu mūsu zvanīto jautājumu un atbilžu dienestā Jautājiet FromLinux lai visa sabiedrība varētu jums palīdzēt ar jūsu problēmu.

      Apskāviens, Pablo.

  27.   aj teica

    labs amats.
    Kāda ir komanda katram terminālim, lai pievienotu uzdevumus crontab (neievadot crontab un manuāli tos nepievienojot ar “crontab -e” vai aizstājot crontab ar citu crontab ar “crontab file”).
    Ideja ir izveidot ārēju skriptu, lai uzdevumus pievienotu crontab
    Gracias

    1.    david teica

      man šķiet, ka jūs varētu izmantot 'atbalss', ko vēlaties pievienot '| kaķis >> 'kronotaba ceļš (/ etc / cronotab)' «

  28.   Rafaels Vera teica

    Kā izteiksme darbotos tieši ik pēc 3 dienām

  29.   José Antonio teica

    Sveiki.

    Man ir problēmas izpildīt cron darbu.

    Es izpildu šādu uzdevumu ar cronta -e:

    01 * * * * sakne /home/user/script/myfile.sh

    bet uzdevums nav izdarīts. Esmu pārbaudījis, vai myfile.sh ir izpildes atļauja un vai lietotājs, kurš to izpilda, ir root.

    Es izpildu to pašu uzdevumu mapē / etc / crontab un pēc pakalpojuma restartēšanas tas nedarbojas arī man.
    Myfile.sh saturs ir komanda, kas atjaunina DB, un, ja es to palaidu konsolē, tā darbojas.
    kāda ideja, kāda var būt problēma?

    1.    Freds teica

      Visticamāk, ka datu bāzes lietotājam nav visu atļauju, un vispirms jums būs jāeksportē vides mainīgie no datu bāzes dzinēja.
      Piemēram, db2, šī rinda iet uz skripta sākumu
      . / home / db2inst1 / sqllib / db2profile

      Cits iemesls varētu būt tāds, ka skriptam ir nepieciešams savienojums ar datu bāzi, izveidojiet savienojumu ar datu bāzi skripta ietvaros

  30.   LA3 teica

    Es nezināju, ka man ir jārestartē dīķis, es kādu laiku ar to cīnījos

  31.   Kenija teica

    Viņi zinās, kā norādīt, ka uzdevums tiek izpildīts katru mēneša beigām, norādītajā laikā .. sīkāk ir tas, ka es nevaru sasniegt to, kā es to zinu, lai ņemtu katra mēneša pēdējo dienu .. ??? Man nācās tos pierakstīt pa vienam, bet, kad pienāk februāra mēneša beigas, ka tas ir divritenis, man tas ir sarežģīti ..

  32.   Jēzus teica

    laba diena!!

    Kā es varu pārtraukt procesu, kas tiek izpildīts crontab?

  33.   Jēzus teica

    process * …………

  34.   Julianna teica

    Vai var būt, ka jūs varat man palīdzēt? es tenho um skripts, ko autore minha, kas nedarbojas, nav crontab! jб dei visi atļautie, neviens privāts īpašnieks vai lietotājs, kas to var izpildīt, - nekas nenotiek! Es gribētu uzzināt, vai jūs varat man palīdzēt, dažas citas lietas nedarbojas! Vlws

  35.   Anthox teica

    Kā jūs liktu uzdevumu izpildīt katru mēneša pēdējo dienu (dienas: 31-30-28)?

  36.   tferčo teica

    Kā jūs jau zināt, komandu su izmanto, lai mainītu lietotāju konsolē. Ja es izmantoju komandu su šādi: "jūsu lietotājs" maina lietotāju, bet bez atbilstošiem "lietotāja" iestatījumiem, ja es palaidu su kā: "su - lietotājs", mainiet lietotāju, ielādējot lietotāja iestatījumus. Ar cron es norādu lietotāju, bet kā es varu ielādēt šī lietotāja iestatījumus?

  37.   Aplaupīt teica

    Un, ja es vēlos to apturēt?

  38.   Regi teica

    Hello,
    Es nezinu, ko daru nepareizi, bet es izpildu soļus, un nekas netiek izpildīts. ES esmu mēģinājis:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * saknes usr / bin / test.sh

    un vispār neko. Tas neko neizpilda. Esmu pārstartējis un viss.

  39.   Ferqos teica

    ļoti pateicos