Lucas hij publiceerde een tijdje geleden uitstekende tutorial over cron en crontab waarvan ik denk dat het de moeite waard is om te delen. Cron is een soort equivalent van geplande taken in Windows, alleen dat het wordt afgehandeld vanaf de terminal. Wie de voorkeur geeft aan een visuele interface om hetzelfde doel te bereiken, kan dit zien een ander item. |
Wat is cron?
De naam cron komt van het Griekse chronos wat "tijd" betekent. In het Unix-besturingssysteem is cron een reguliere procesmanager op de achtergrond (daemon) die processen of scripts met regelmatige tussenpozen uitvoert (bijvoorbeeld elke minuut, dag, week of maand). De processen die moeten worden uitgevoerd en het tijdstip waarop ze moeten worden uitgevoerd, worden gespecificeerd in het crontab-bestand.
Cómo werken
De cron-daemon begint vanaf /etc/rc.d/ o / Etc / init.d afhankelijk van de distributie. Cron wordt op de achtergrond uitgevoerd, controleert de crontab-taaktabel elke minuut / Etc / crontab of / var / spool / cron op zoek naar taken die moeten worden uitgevoerd. Als gebruiker kunnen we commando's of scripts met taken aan cron toevoegen om sommige processen te automatiseren. Dit is bijvoorbeeld handig om de update van een systeem of een goed back-upsysteem te automatiseren.
Wat is Crontab?
Crontab is een eenvoudig tekstbestand dat een lijst met opdrachten opslaat die moeten worden uitgevoerd op een door de gebruiker opgegeven tijdstip. Crontab controleert de datum en tijd waarop het script of commando moet worden uitgevoerd, de uitvoeringsrechten en het zal dit op de achtergrond doen. Elke gebruiker kan zijn eigen crontab-bestand hebben, in feite het / Etc / crontab Aangenomen wordt dat het het crontab-bestand van de rootgebruiker is, als normale gebruikers (en zelfs root) hun eigen crontab-bestand willen genereren, zullen we het crontab-commando gebruiken.
Crontab is de gemakkelijkste manier om cron-taken te beheren op systemen met meerdere gebruikers, hetzij als een eenvoudige systeemgebruiker of als rootgebruiker.
Crontab gebruiken
We beginnen met een eenvoudig voorbeeld.
We gaan de update van een systeem automatiseren, om het vervelende "Ik moet altijd updaten en dat vind ik niet leuk!"
Allereerst maken we een script. Dit script wordt aangeroepen door cron en zal alle instructies bevatten die we willen dat het doet, daarom is het nodig om het in verschillende gevallen en op verschillende manieren te testen voordat je het in cron opneemt, een eenvoudig updatescript zoals dit:
#! / bin / bash # script update voorbeeld # kies uw distributie # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Verwijder de # uit je distro-lijn. In het geval dat het Ubuntu / Debian is, begint het met apt-get.
We slaan het script op als update.sh (bijv. Scripts in de directory van uw huis). We wijzigen de uitvoeringsrechten van het genoemde script met:
chmod a + x ~ / scripts / update.sh
We draaien het script een paar keer om te controleren of alles soepel verloopt, we passen aan wat nodig is (het mag geen fouten bevatten, anders herhaalt cron een fout alleen maar keer op keer). Nu om de taak toe te voegen aan onze crontab.
Voeg taken toe aan crontab
We voeren de editie van de crontab uit met crontab -e, in sommige distributies (zoals Ubuntu) geeft het ons de mogelijkheid om de gewenste teksteditor te kiezen, de rest houden we over met vi. Het crontab-bestand ziet er ongeveer zo uit.
# mh dom mon dow gebruikerscommando
waar:
- m komt overeen met de minuut dat het script wordt uitgevoerd, de waarde varieert van 0 tot 59
- h de exacte tijd, het 24-uurs formaat wordt afgehandeld, de waarden variëren van 0 tot 23, waarbij 0 middernacht is.
- gift verwijst naar de dag van de maand, u kunt bijvoorbeeld 15 opgeven als u elke 15 dagen wilt hardlopen
- dow betekent de dag van de week, deze kan numeriek zijn (0 tot 7, waarbij 0 en 7 zondag zijn) of de eerste 3 letters van de dag in het Engels: ma, di, wo, do, vrij, za, zo.
- gebruiker definieert de gebruiker die het commando zal uitvoeren, het kan root zijn, of een andere gebruiker, zolang ze toestemming hebben om het script uit te voeren.
- commando verwijst naar de opdracht of het absolute pad van het script dat moet worden uitgevoerd, bijvoorbeeld: /home/usuario/scripts/update.sh, als het een script aanroept, moet het uitvoerbaar zijn
Voor de duidelijkheid een paar voorbeelden van cron-taken uitgelegd:
15 10 * * * gebruiker /home/user/scripts/update.sh
Het update.sh-script wordt elke dag om 10:15 uur uitgevoerd
15 22 * * * gebruiker /home/user/scripts/update.sh
Het update.sh-script wordt elke dag om 10:15 uur uitgevoerd
00 10 * * 0 root apt-get -y update rootgebruiker
Elke zondag om 10 uur wordt er een update uitgevoerd
45 10 * * sun root apt-get -y-update
De rootgebruiker zal elke zondag (zo) om 10:45 uur een update uitvoeren
30 7 20 11 * gebruiker /home/usuario/scripts/update.sh
Op 20 november om 7 uur zal de gebruiker het script draaien
30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh
Op 11 november om 7 uur en dat is zondag, viert de gebruiker zijn sysadmin (dat wil zeggen, ik)
01 * * * * gebruiker /home/usuario/scripts/molestorecordatorio.sh
Elke minuut van elk uur elke dag een vervelende herinnering (NIET aanbevolen).
Ze kunnen nog steeds worden afgehandeld speciale reeksen:
30 17 * * 1,2,3,4,5
Elke dag om 5 uur van maandag tot en met vrijdag.
00 12 1,15,28 * *
Elke eerste, vijftiende en 12ste van elke maand om 28 uur 's middags (ideaal voor salarisadministratie)
Als dit verwarrend is, handelt crontab speciale strings om deze bereiken te definiëren.
@reboot Eén keer uitvoeren bij het opstarten
@yearly draait slechts één keer per jaar: 0 0 1 1 *
@annually hetzelfde als @yearly
@monthly wordt eenmaal per maand uitgevoerd, de eerste dag: 0 0 1 * *
@weekly Wekelijks de eerste minuut van het eerste uur van de week. 0 0 * * 0 ″.
@dagelijks dagelijks, om 12 uur. 00 0 * * *
@midnight hetzelfde als @daily
@hourly op de eerste minuut van elk uur: 0 * * * *
Het gebruik ervan is heel eenvoudig.
@hourly gebruiker /home/user/scripts/molestorecordatorio.sh @maandelijkse gebruiker /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Tenslotte:
Beheer van cron-taken
crontab-bestand
Vervang het bestaande crontab-bestand door een door de gebruiker gedefinieerd bestand
crontab -e
Bewerk het crontab-bestand van de gebruiker, elke nieuwe regel wordt een nieuwe crontab-taak.
crontab -l
Maak een lijst van alle crontab-taken van de gebruiker
crontab-d
Verwijder de crontab van de gebruiker
crontab -c richt
Definieert de crontab-map van de gebruiker (deze moet de schrijf- en uitvoeringsrechten van de gebruiker hebben)
crontab -u gebruiker
prefix om de crontab van een andere gebruiker af te handelen, voorbeelden:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u gebruiker
Deze tool kan, net als vele andere, dieper en in meer detail worden bekeken in:
Ugh ... een beetje verwarrend.
* / 30 ontbreekt (in het minutenveld) dat elke 30 minuten draait ...
Ik wilde hier alleen commentaar op geven totdat ik besloot de opmerkingen te bekijken 😀
Deze modifier is een heel belangrijk stuk informatie en iets heel nuttigs.
Hello!
Op dit moment test ik elke 45 minuten een configuratie.
* / 45 * * * *, en de instructie wordt uitgevoerd op 45 minuten van elk uur EN elk uur. Het is te zeggen:
Het draait om 3:45, dan 4:00, 4:45, dan 5:00, 5:45, 6:00, 6:45, enzovoort.
Ik heb iets mis? Wat kan ik doen om het maar elke 45 minuten te maken, of minstens één keer per 45 minuten per uur.
Hello!
Op dit moment test ik elke 45 minuten een configuratie.
* / 45 * * * *, en de instructie wordt uitgevoerd op 45 minuten van elk uur EN elk uur. Het is te zeggen:
Het draait om 3:45, dan 4:00, 4:45, dan 5:00, 5:45, 6:00, 6:45, enzovoort.
Ik heb iets mis? Wat kan ik doen om het maar elke 45 minuten te maken, of minstens één keer per 45 minuten per uur.
Hallo super handig de informatie om te verduidelijken hoe cron werkt.
Bytes
voor *
Uitstekend, bedankt voor het verduidelijken hoe cron werkt .. laten we een klein handje opsteken 🙂
Deze regel zal, zoals ik begrijp, om 10:15 uur worden uitgevoerd, corrigeer me als ik het mis heb
Nou, daar staat 10:15 uur
15 22 * * * gebruiker /home/user/scripts/update.sh
Hallo! zeer goede info.
Om elk half uur een Script uit te voeren, zou de regel die aan CronTab moet worden toegevoegd zijn: "30 * * * * root Scrip.sh" Correct? Hartelijk bedankt!
Nee. Als ik het me goed herinner, moet je daarvoor / 30 * * * * root Scrip.sh invoeren.
Dat wil zeggen, voeg de / vóór 30 toe.
Proost! Paul.
Hallo, ik vond je bericht leuk, het is erg compleet, maar ik wilde je iets vragen.
Ik heb problemen met dit commando en een zoals "at".
Ik wil op een bepaald moment een script draaien en zetten
op -f /home/mi_user/Desk/script.sh 18:08 voorbeeld
en het script wordt niet uitgevoerd op het scherm, dat wil zeggen in de terminal, wordt het op de achtergrond uitgevoerd?
En met cron gebeurt hetzelfde met mij, ik bewerk het crontab-bestand met "crontab -e"
aan het einde voeg ik deze regel toe:
46 19 mijn_gebruiker /home/mi_user/Desk/script.sh
en het doet niets, het toont het script niet.
Enige suggestie? Hartelijk dank en excuses voor het eventuele ongemak
Om de terminal te laten verschijnen, moet u mogelijk de terminal uitvoeren en het script als parameter doorgeven.
Bijvoorbeeld:
lxterminal -e "mijn_gebruiker /home/mijn_gebruiker/Desk/script.sh"
De te gebruiken parameter kan variëren, afhankelijk van de terminalemulator die u gebruikt.
Ik hoop dat het werkt.
Knuffel! Paul.
De bijdrage wordt gewaardeerd.
10 punten !!
hallo2!!
Heel erg bedankt, het heeft me veel geholpen om sommige dingen te verduidelijken, totale dank, voor meer details of vragen ga ik naar de MAN-PAGINA, herhaalde groeten.
Oom, heel erg bedankt, ik heb de voorbeelden gelezen en getest. heel erg bedankt ... het is heel begrijpelijk. Proost
Ik heb ubuntu Server 12.04.2 LTS gebruikt, en de versie van crontab die ik heb, om de lijst met de taken van de gebruiker te verwijderen, crontab -r (en -l, zoals deze handleiding zegt). Natuurlijk is het een kwestie van versies.
Aan de andere kant heb ik ooit alleen crontab uitgevoerd en met dit soort kon ik mijn eigen executiebestand maken, maar dit was niet het bestand dat werd uitgevoerd. Degene die wordt uitgevoerd, is die in / etc / crontab. misschien zal iemand de opmerking gebruiken.
PS (ik zocht met lokaliseren en whereis crontab maar het retourneerde alleen het bovengenoemde adres en een ander bestand dat gecodeerd is, dus als degene die werd uitgevoerd die was in / etc / crontab, maar bij het uitvoeren van het crontab -e commando, zou de mijne verschijnen met alle banen die ik had gedefinieerd) waar werd dit bestand opgeslagen '???? Vriendelijke groeten. Ik log altijd in met root.
Uitstekend, erg handig !!!
Hallo, ik zou dit willen doen ………… «15 10 * * * root ifdown eth0»
dat wil zeggen dat op een bepaald moment de netwerkkaart is uitgeschakeld ………… nou, ik heb hem in de crontab gestopt en het werkte niet …… .. hoe gaat het?
Saludos y gracias
Je hebt de definitie van 'mon' gemist na de titel 'Taken toevoegen aan crontab'
Het artikel is nog steeds leuk, cron is buitengewoon handig.
Hoe gaaf was dat goede bericht, vraag het mij
Als ik de records wil bijhouden die zijn achtergelaten door de uitvoering van taken, waar kan ik die dan zien?
is decdir Ik wil de geschiedenis zien van de acties die in het verleden van dit bestand zijn ondernomen en ik wil zien wie het heeft gewijzigd en de datum
bedankt
Ik wil de wijzigingsgeschiedenis hiervan controleren
Hoe kan ik het doen
bedankt
Goedemorgen,
Ik denk dat je in het ubuntu-script een fout hebt gemaakt, je hebt ap-get -y upgrade geplaatst in plaats van apt-get -y upgrade. (Je hebt een t achtergelaten).
Een groet.
Zo is. Dank je!
Knuffel! Paul
Ik wil weten hoe ik een cron-bestand moet maken om de tijd te kunnen specificeren wanneer het wordt uitgevoerd, de map, enz.
Bedankt voor het verduidelijken van de werking en de basisopdrachten voor cron, nu om jezelf een tijdje te vermaken.
Telkens wanneer ik informatie zoek over een onderwerp gerelateerd aan Gnu / Linux, ga ik rond en rond om altijd in 90% van de gevallen de beste tutorial in deze geweldige gemeenschap te vinden, ik denk dat ik vanaf nu hier en dan ergens anders zal beginnen.
groeten
Bedankt Sander! Een knuffel! Paul.
dom = dag van de maand
dow = dag van de week
het is gemakkelijker als je associeert
Heel erg bedankt, heel compleet en goed uitgelegd.
Dit is hetzelfde dat mijn leraar Besturingssystemen ons gaf, ik verander niets, nu begrijp ik waarom de klas zo slecht is. - Nou, dit is hetzelfde als huiswerk xD
Geschatte,
Vraag, kan de duur van een taak worden beperkt?
Ik heb bijvoorbeeld een taak die zich elke 5 minuten herhaalt, bij herhaling als die taak nog steeds actief is, laat hem deze doden en opnieuw uitvoeren.
Dank je wel,
Marcelo. -
Hallo, Marcelo!
Ik denk dat het beter zou zijn als u deze vraag stelt in onze belde vraag- en antwoorddienst Vragen DesdeLinux zodat de hele gemeenschap u kan helpen met uw probleem.
Een knuffel, Pablo.
goede post.
Wat is het commando per terminal om taken toe te voegen aan de crontab (zonder de crontab in te voeren en ze handmatig toe te voegen met 'crontab -e' of de crontab te vervangen door een andere crontab met 'crontab-bestand').
Het idee is om een extern script te maken om de taken aan de crontab toe te voegen
bedankt
het lijkt mij dat je 'echo' kunt gebruiken wat je maar wilt toevoegen '| cat >> 'cronotab path (/ etc / cronotab)' «
Hoe zou een uitdrukking precies elke 3 dagen worden uitgevoerd?
Hey.
Ik heb een probleem met het uitvoeren van een cron-taak.
Ik voer de volgende taak uit met cronta -e:
01 * * * * root /home/user/script/mfile.sh
maar de taak is niet volbracht. Ik heb gecontroleerd of myfile.sh uitvoerrechten heeft en dat de gebruiker die het uitvoert root is.
Ik voer dezelfde taak uit in / etc / crontab en na het herstarten van de service, werkt het ook niet voor mij.
De inhoud van myfile.sh is een commando dat een database bijwerkt en als ik het in de console uitvoer, werkt het.
enig idee wat het probleem kan zijn?
De databasegebruiker heeft mogelijk niet alle rechten en u moet eerst de omgevingsvariabelen uit uw database-engine exporteren.
In db2 zou deze regel bijvoorbeeld naar het begin van het script gaan
. / home / db2inst1 / sqllib / db2profile
Een andere oorzaak kan zijn dat het script verbinding met de database vereist, maak de verbinding met de database binnen het script
Ik wist niet dat ik de crond opnieuw moest starten, ik had hier al een tijdje mee gevochten
Ze zullen weten hoe ze moeten aangeven dat de taak elk einde van de maand wordt uitgevoerd, op het aangegeven tijdstip .. het detail is dat ik niet kan bereiken hoe ik weet dat het de laatste dag van elke maand duurt .. ??? Ik moest ze een voor een opschrijven, maar als het einde van de maand februari komt, wat biciesto is, wordt het ingewikkeld ...
goede dag!!
Hoe stop ik het proces dat wordt uitgevoerd in de crontab?
werkwijze * …………
Zou het kunnen dat u mij kunt helpen? eu tenho um script door minha authored dat niet werkt no crontab! Já dei alle toestemmingen, niet een specifieke cron of gebruiker die het kan uitvoeren - er gebeurt bijna niets! Ik zou graag willen weten of je me kunt helpen, sommige andere dingen werken no cron! Vlws
Hoe zou u een taak elke laatste dag van de maand laten uitvoeren (dagen: 31-30-28)?
Zoals je al weet, wordt het su commando gebruikt om van gebruiker te veranderen in een console. Als ik het commando su zo gebruik: "jouw gebruiker" verander gebruiker maar zonder de juiste instellingen van "gebruiker", als ik su draai als: "su - gebruiker" verander gebruiker laadt de gebruikersinstellingen. Met cron geef ik de gebruiker aan, maar hoe laad ik de configuraties van deze gebruiker?
En als ik het wil stoppen?
Hallo,
Ik weet niet wat ik verkeerd doe, maar ik volg de stappen en er wordt niets uitgevoerd. Ik heb geprobeerd:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
en helemaal niets. Het voert niets uit. Ik ben opnieuw opgestart en zo.
heel hartelijk bedankt