Cron & crontab, förklarade

Lucaine publicerade för ett tag sedan utmärkt handledning om cron och crontab som jag tycker är värt att dela. Cron är ett slags motsvarighet till schemalagda uppgifter i Windows, bara att den hanteras från terminalen. De som föredrar ett visuellt gränssnitt för att uppnå samma mål kan se detta en annan artikel.

Vad är Cron?

Namnet cron kommer från den grekiska chronos som betyder "tid". I Unix-operativsystemet är cron en vanlig bakgrundsprocesshanterare (daemon) som kör processer eller skript med jämna mellanrum (till exempel varje minut, dag, vecka eller månad). Processerna som måste köras och när de måste köras anges i crontab-filen.

Como verk

Cron-demonen börjar från /etc/rc.d/ o /etc/init.d beroende på fördelningen. Cron springer i bakgrunden, kontrollerar crontab-uppgiftstabellen varje minut / Etc / crontab in / var / spole / cron på jakt efter uppgifter som ska utföras. Som användare kan vi lägga till kommandon eller skript med uppgifter för att cron för att automatisera vissa processer. Detta är till exempel användbart för att automatisera uppdateringen av ett system eller ett bra reservsystem.

Relaterad artikel:
Självstudier: Installera paketen .tar.gz och .tar.bz2

Vad är Crontab?

Crontab är en enkel textfil som lagrar en lista med kommandon som ska köras vid en tid som anges av användaren. Crontab kontrollerar datum och tid när skriptet eller kommandot ska köras, körningstillstånd och det gör det i bakgrunden. Varje användare kan ha sin egen crontab-fil, i själva verket / Etc / crontab det antas vara rotanvändarens crontab-fil, när normala användare (och till och med root) vill skapa sin egen crontab-fil kommer vi att använda kommandot crontab.

Crontab är det enklaste sättet att hantera cron-uppgifter på fleranvändarsystem, antingen som en enkel systemanvändare eller root-användare.

Använda crontab

Vi börjar med ett enkelt exempel.

Vi kommer att automatisera uppdateringen av ett system, för att eliminera det irriterande med "Jag måste alltid uppdatera och det gillar jag inte!"

hur man
Relaterad artikel:
Kommandon för att känna till systemet (identifiera hårdvara och vissa programkonfigurationer)

Först och främst kommer vi att skapa ett manus. Det här skriptet kommer att anropas av cron och innehåller alla instruktioner vi vill att det ska göra, därför är det nödvändigt att testa det i flera fall och på flera sätt innan det inkluderas i cron, ett enkelt uppdateringsskript som detta:

#! / bin / bash #exempel på skriptuppdatering #Välj din distribution # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Ta bort # från distrolinjen. Om det är Ubuntu / Debian börjar det med apt-get.

Vi sparar skriptet som update.sh (t.ex. skriptkatalog ditt hem). Vi ändrar exekveringsbehörigheterna för nämnda skript med:

chmod a + x ~ / scripts / update.sh

Vi kör skriptet ett par gånger för att verifiera att allt går smidigt, vi ändrar vad som är nödvändigt (det får inte innehålla fel, om inte cron bara upprepar ett fel om och om igen). Nu för att lägga till uppgiften till vår crontab.

Lägg till uppgifter i crontab

Vi kör utgåvan av crontab med crontab -e, i vissa distros (som Ubuntu) ger det oss möjlighet att välja den textredigerare vi vill ha, resten har vi kvar med vi. Crontab-filen ser ut så här.

# mh dom mon dow användarkommando

var:

  • m motsvarar den minut skriptet körs, värdet varierar från 0 till 59
  • h den exakta tiden, 24-timmarsformatet hanteras, värdena varierar från 0 till 23, med 0 är 12:00 midnatt.
  • present refererar till dagen i månaden, till exempel kan du ange 15 om du vill köra var 15: e dag
  • dow betyder veckodag, det kan vara numeriskt (0 till 7, där 0 och 7 är söndag) eller de tre första bokstäverna på engelska: man, tis, ons, tors, fre, lör, sol.
  • användare definierar användaren som kommer att utföra kommandot, det kan vara root eller en annan användare så länge de har behörighet att utföra skriptet.
  • kommando refererar till kommandot eller den absoluta sökvägen för skriptet som ska köras, exempel: /home/usuario/scripts/update.sh, om det kallar ett skript måste det vara körbart

För att vara tydlig förklaras några exempel på cron-uppgifter:

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

Det körs update.sh-skriptet klockan 10:15 varje dag

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

Update.sh-skriptet körs klockan 10 varje dag

00 10 * * 0 root apt-get -y uppdatering Rotanvändare

Det körs en uppdatering varje söndag klockan 10:00

45 10 * * sun root apt-get -y uppdatering

Rotanvändaren kör en uppdatering varje söndag (sön) kl 10:45

30 7 20 11 * användare /home/usuario/scripts/update.sh

Den 20 november kl 7:30 kommer användaren att köra skriptet

30 7 11 11 solanvändare /home/usuario/scripts/pastel_con_velitas.sh

Den 11 november kl 7:30 och det är söndag firar användaren sin sysadmin (det vill säga jag)

01 * * * * user /home/user/scripts/molestorecordatorio.sh

En irriterande påminnelse varje minut varje timme varje dag (rekommenderas INTE).

De kan fortfarande hanteras specialområden:

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

5:30 på eftermiddagen varje dag från måndag till fredag.

00 12 1,15,28 * *

Klockan 12 den första, femtonde och 28: e varje månad (perfekt för löner)

Om detta är förvirrande, hantera crontab speciella strängar för att definiera dessa intervall.

@reboot Kör en gång vid start
@yearly körs bara en gång om året: 0 0 1 1 *
@ årligen samma som @ årligen
@monthly körs en gång i månaden, den första dagen: 0 0 1 * *
@ Weekly Weekly den första minuten av den första timmen i veckan. 0 0 * * 0 ″.
@ dagligen dagligen, klockan 12:00. 0 0 * * *
@midnight samma som @daily
@hourly vid första minuten i varje timme: 0 * * * *

Dess användning är mycket enkel.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Sist men inte minst:

Cron jobbhantering

crontab-fil

Ersätt den befintliga crontab-filen med en användardefinierad fil

crontab -e

Redigera användarens crontab-fil, varje ny rad blir en ny crontab-uppgift.

crontab-l

Lista alla användarens crontab-uppgifter

crontab -d

Ta bort användarens crontab

crontab -c dir

Definierar användarens crontab-katalog (detta måste ha användarens skriv- och exekveringsbehörigheter)

crontab -u-användare

prefix för att hantera en annan användares crontab, exempel:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u användare

Detta verktyg, som många andra, kan ses mer ingående och mer detaljerat i:

Tack Lucain!

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

      Platshållarbild för Alvaro Ortiz sade

    Ugh ... lite förvirrande.

      tonic sade

    * / 30 saknas (i minutfältet) som körs var 30: e minut ...

         erm3nda sade

      Just detta skulle jag kommentera tills jag bestämde mig för att granska kommentarerna 😀
      Denna modifierare är en mycket viktig information och något mycket användbart.

           Kika sade

        Hej!
        Just nu testar jag en konfiguration var 45: e minut.

        * / 45 * * * *, och instruktionen utförs 45 minuter varje timme OCH varje timme. Det vill säga:

        Den körs 3:45, sedan 4:00, 4:45, sedan 5:00, 5:45, 6:00, 6:45 och så vidare.

        Jag har något fel Vad kan jag göra för att göra det bara var 45: e minut eller åtminstone en gång på 45 minuter varje timme.

         Kika sade

      Hej!
      Just nu testar jag en konfiguration var 45: e minut.

      * / 45 * * * *, och instruktionen utförs 45 minuter varje timme OCH varje timme. Det vill säga:

      Den körs 3:45, sedan 4:00, 4:45, sedan 5:00, 5:45, 6:00, 6:45 och så vidare.

      Jag har något fel Vad kan jag göra för att göra det bara var 45: e minut eller åtminstone en gång på 45 minuter varje timme.

      Slak sade

    Hej super användbar information för att klargöra hur cron fungerar.
    Bytes

      Slak sade

    för *

      Jägare sade

    Utmärkt, tack för att du klargjorde hur cron fungerar .. låt oss lägga lite hand 🙂

      Jacob sade

    Den här raden som jag förstår den kommer att utföras klockan 10, korrigera mig om jag har fel
    Tja där står det 10:15
    15 22 * * * user /home/user/scripts/update.sh

      Agustin sade

    Hallå! mycket bra info.
    För att utföra ett skript var halvtimme skulle raden som ska läggas till i CronTab vara: "30 * * * * root Scrip.sh" Rätt? Tack så mycket!

      låt oss använda Linux sade

    Nej. Om jag kommer ihåg rätt, för det måste du sätta / 30 * * * * root Scrip.sh.
    Det vill säga lägg till / före 30.
    Skål! Paul.

      Jonathan sade

    Hej, jag gillade ditt inlägg, det är väldigt komplett men jag ville fråga dig något.
    Jag har problem med det här kommandot och ett som "at".

    Jag vill köra ett skript vid en viss tidpunkt och jag lägger till

    på -f /home/mi_user/Desk/script.sh 18:08 exempel

    och manuset körs inte på skärmen, det vill säga i terminalen, körs det i bakgrunden?

    Och med cron händer samma sak för mig, jag redigerar crontab-filen med "crontab -e"

    i slutet lägger jag till den här raden:

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

    och det gör ingenting, det visar inte manuset.

    Några förslag? Tack så mycket och ber om ursäkt för eventuella besvär

         låt oss använda Linux sade

      För att terminalen ska visas kan du behöva köra terminalen och skicka skriptet som en parameter.

      Till exempel:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      Parametern som ska användas kan variera beroende på den terminalemulator du använder.

      Jag hoppas det fungerar.

      Kram! Paul.

      patrecas sade

    Bidrag är uppskattat.

    10 poäng !!

    salu2!!

      Rodolfo sade

    Tack så mycket, det hjälpte mig mycket att klargöra vissa saker, totalt tack, för mer information eller frågor kommer jag till MAN-SIDAN, upprepade hälsningar.

      Jahir sade

    Farbror tack så mycket, jag har läst och testat exemplen. tack så mycket ... det är väldigt förståeligt. Skål

      geovanni sade

    Jag använde ubuntu Server 12.04.2 LTS, och den version av crontab som jag har, för att radera listan över användarens jobb används, crontab -r (och -l, som denna manual säger). Visst är det med frågan om versioner.

    Å andra sidan körde jag en gång bara crontab och den här typen lät mig skapa min egen exekveringsfil, men det var inte den som kördes. Den som körs är den i / etc / crontab. kanske någon kommer att använda kommentaren.

    PS (jag sökte med lokalisera och var är crontab men den returnerade bara ovannämnda adress och en annan fil som är krypterad, så om den som kördes var den i / etc / crontab, men när jag kör kommandot crontab -e, såg min ut med alla jobb som jag hade definierat) var lagrades den här filen '???? Hälsningar. Jag loggar alltid in med root.

      Sebastian sade

    Utmärkt, mycket användbart !!!

      mmm sade

    Hej, jag skulle vilja göra det här ………… «15 10 * * * root ifdown eth0»

    det vill säga att nätverkskortet stängdes av vid en viss tidpunkt ………… ja, jag lade det i crontab och det fungerade inte …… .. vad händer?

    Hälsningar och tack

      Miguel sade

    Du missade att definiera "mon" efter titeln "Lägg till uppgifter i crontab"

    Artikeln är fortfarande trevlig, cron är extremt användbar.

      Oscar sade

    Hur coolt var det bra inlägget, fråga mig
    Om jag vill hålla reda på de poster som är kvar efter utförandet av uppgifter, var kan jag se det?

    är decdir Jag vill se historiken över de åtgärder som gjorts tidigare i den här filen och jag vill se vem som har ändrat den och datumet

    Tack

      oscar sade

    Jag vill kontrollera ändringshistoriken för detta

    hur kan jag göra det

    Tack

      Andres Ledo sade

    God morgon,

    Jag tror att i ubuntu-skriptet har du gjort ett misstag, du har lagt upp ap-get -y uppgradering istället för apt-get -y uppgradering. (Du har lämnat ett t).

    En hälsning.

         låt oss använda Linux sade

      Så är det. Tack!
      Kram! Paul

      Gabriel sade

    Jag vill veta hur man skapar en cron-fil för att kunna specificera tiden varje gång den körs, katalogen etc.

      Valentin sade

    Tack för att du klargjorde operationen och de grundläggande kommandona för cron, nu för att underhålla dig lite.

      Sander sade

    När jag letar efter information om något ämne relaterat till Gnu / Linux går jag runt och i slutändan och hittar i 90% av fallen alltid den bästa handboken i det här fantastiska samhället, jag tror att jag från och med nu kommer att börja här och då någon annanstans.

    hälsningar

         låt oss använda Linux sade

      Tack Sander! En kram! Paul.

      dario sade

    dom = dag i månaden
    dow = veckodag
    det är lättare om du associerar

      Paschal sade

    Tack så mycket, det här är väldigt komplett och väl förklarat.

      Maxilla sade

    Det här är samma sak som min operativsystemlärare gav oss, jag ändrar ingenting, nu ser jag varför klassen är så dålig .- Tja, det här är samma som läxor xD

      Marcelo sade

    Beräknad,

    Fråga, kan en uppgifts varaktighet begränsas?
    Till exempel har jag en uppgift som upprepas var 5: e minut, vid upprepning om den uppgiften fortfarande är aktiv, låt den döda den och köra den igen.

    Tack,
    Marcelo. -

         låt oss använda Linux sade

      Hej Marcelo!

      Jag tror att det skulle vara bättre om du tar upp denna fråga i vår fråga- och svarstjänst Fråga FromLinux så att hela samhället kan hjälpa dig med ditt problem.

      En kram, Pablo.

      aj sade

    bra inlägg.
    Vad är kommandot per terminal för att lägga till uppgifter i crontab (utan att gå in i crontab och lägga till dem manuellt med 'crontab -e' eller ersätta crontab med en annan crontab med 'crontab-fil').
    Tanken är att skapa ett externt skript för att lägga till uppgifterna i crontab
    tack

         David sade

      det verkar för mig att du kan använda "eko" vad du vill lägga till "| katt >> 'cronotab path (/ etc / cronotab)' «

      Raphael Vera sade

    Hur skulle ett uttryck kunna köras var tredje dag exakt

      José Antonio sade

    Hej.

    Jag har problem med att utföra ett cron-jobb.

    Jag kör följande uppgift med cronta -e:

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

    men uppgiften är inte klar. Jag har kontrollerat att myfile.sh har exekveringsbehörighet och att användaren som kör det är root.

    Jag kör samma uppgift i / etc / crontab och efter att jag startat om tjänsten fungerar det inte heller för mig.
    Innehållet i myfile.sh är ett kommando som uppdaterar en DB och om jag kör den i konsolen fungerar den.
    någon aning om vad problemet kan vara?

         fredd sade

      Databasanvändaren kanske inte har alla behörigheter och du måste först exportera miljövariablerna från din databasmotor.
      Till exempel i db2 skulle denna rad gå till början av skriptet
      . / home / db2inst1 / sqllib / db2profile

      En annan orsak kan vara att skriptet kräver anslutning till databasen, gör anslutningen till databasen inom skriptet

      LA3 sade

    Jag visste inte att jag var tvungen att starta om crond, jag hade kämpat med detta ett tag

      Kenya sade

    De kommer att veta hur man anger att uppgiften körs varje månadsslut, vid den angivna tiden .. detaljerna är att jag inte kan uppnå hur jag vet att det tar den sista dagen i varje månad .. ??? Jag var tvungen att skriva ner dem en efter en men när slutet av februari månad kommer att det är bäst är det komplicerat för mig ..

      Jesus sade

    God dag!!

    Hur stoppar jag processen som körs i crontab?

      Jesus sade

    bearbeta * …………

      Anna sade

    Kan det vara så att du kan hjälpa mig? eu tenho um manus av minha författad som inte fungerar ingen crontab! Jб dei alla tillåtelser, inte en specifik cron eller användare som kan utföra det-mest ingenting händer! Jag skulle vilja veta om du kan hjälpa mig, några andra saker fungerar inte cron! Vlws

      Anthox sade

    Hur skulle du göra en uppgift att köra varje sista dag i månaden (dagar: 31-30-28)?

      tfercho sade

    Som du redan vet används su-kommandot för att byta användare i en konsol. Om jag använder kommandot su så: "din användare" byter användare men utan rätt inställningar för "användare", om jag kör su som: "su - användare" byter användare genom att ladda användarinställningarna. Med cron anger jag användaren, men hur laddar jag inställningarna för den här användaren?

      Rob sade

    Och om jag vill stoppa det?

      Regi sade

    Hej,
    Jag vet inte vad jag gör fel, men jag följer stegen och ingenting utförs. Jag har försökt:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    och ingenting alls. Det utför ingenting. Jag har startat om och allt.

      Ferqos sade

    tack så mycket