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.
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!"
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:
Ugh ... lite förvirrande.
* / 30 saknas (i minutfältet) som körs var 30: e minut ...
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.
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.
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.
Hej super användbar information för att klargöra hur cron fungerar.
Bytes
för *
Utmärkt, tack för att du klargjorde hur cron fungerar .. låt oss lägga lite hand 🙂
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
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!
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.
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
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.
Bidrag är uppskattat.
10 poäng !!
salu2!!
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.
Farbror tack så mycket, jag har läst och testat exemplen. tack så mycket ... det är väldigt förståeligt. Skål
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.
Utmärkt, mycket användbart !!!
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
Du missade att definiera "mon" efter titeln "Lägg till uppgifter i crontab"
Artikeln är fortfarande trevlig, cron är extremt användbar.
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
Jag vill kontrollera ändringshistoriken för detta
hur kan jag göra det
Tack
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.
Så är det. Tack!
Kram! Paul
Jag vill veta hur man skapar en cron-fil för att kunna specificera tiden varje gång den körs, katalogen etc.
Tack för att du klargjorde operationen och de grundläggande kommandona för cron, nu för att underhålla dig lite.
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
Tack Sander! En kram! Paul.
dom = dag i månaden
dow = veckodag
det är lättare om du associerar
Tack så mycket, det här är väldigt komplett och väl förklarat.
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
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. -
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.
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
det verkar för mig att du kan använda "eko" vad du vill lägga till "| katt >> 'cronotab path (/ etc / cronotab)' «
Hur skulle ett uttryck kunna köras var tredje dag exakt
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?
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
Jag visste inte att jag var tvungen att starta om crond, jag hade kämpat med detta ett tag
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 ..
God dag!!
Hur stoppar jag processen som körs i crontab?
bearbeta * …………
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
Hur skulle du göra en uppgift att köra varje sista dag i månaden (dagar: 31-30-28)?
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?
Och om jag vill stoppa det?
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.
tack så mycket