Cron gebruiken op Linux Unix

Wat is cron?


Cron is de naam van het programma waarmee Linux / Unix-gebruikers automatisch commando's of scripts (groepen commando's) op een specifieke tijd of datum kunnen uitvoeren. Het wordt normaal gesproken gebruikt voor opdrachten voor beheertaken, zoals back-ups, maar het kan voor alles worden gebruikt. Zoals gedefinieerd in de cron-manpagina's; het is een daemon die geplande programma's uitvoert.
In praktisch alle Linux-distributies wordt de Vixie Cron-versie gebruikt door de persoon die deze heeft ontwikkeld, Paul Vixie, een van de grote goeroes van Unix, ook de maker van onder andere BIND, een van de meest populaire DNS-servers in de wereld.

cron starten


Cron is een daemon (service), wat betekent dat het maar één keer hoeft te worden gestart, meestal met dezelfde systeemstart. De cron-service wordt crond genoemd. In de meeste distributies wordt de service automatisch geïnstalleerd en gestart vanaf het opstarten van het systeem, het kan op verschillende manieren worden geverifieerd:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) draait… 
Als u het servicecommando hebt geïnstalleerd:
 service crond-status
 crond (pid 507) draait… 
het kan ook worden bekeken via het ps-commando:
 ps -ef | grep crond
als cron om de een of andere reden niet werkt, kunnen we het starten met:
 /etc/rc.d/init.d/crond start Starten van crond: [OK]
[color = rgb (0,0,0)] Als de service niet was geconfigureerd om vanaf het begin te starten, zou het voldoende zijn om deze toe te voegen met de opdracht chkconfig: [/ color]
 chkconfig --level 35 crond on 
Hiermee zou je het toevoegen om niveau 3 en 5 uit te voeren, zodat het begint bij het opstarten van het systeem.

cron gebruiken


Er zijn ten minste twee verschillende manieren om cron te gebruiken:
De eerste bevindt zich in de map / etc, waar u waarschijnlijk de volgende mappen zult vinden:
  • cron.uurlijk
  • cron.dagelijks
  • cron.wekelijks
  • cron.maandelijks
Als een scriptbestand in een van deze mappen wordt geplaatst, wordt het script elk uur, elke dag, elke week of elke maand uitgevoerd, afhankelijk van de map.
Om het script uit te voeren, moet het iets zijn dat lijkt op het volgende:
 #! / bin / sh #script dat een back-up-cd genereert / usr / documenten tar czf * back-up cp back-up / andere_map /
We moeten repareren dat de eerste regel begint met #!, wat aangeeft dat het een bash-shellscript is, de andere regels zijn de opdrachten die we door het script willen laten uitvoeren. Dit script kan bijvoorbeeld backup.sh heten en we moeten ook de bijbehorende machtigingen wijzigen zodat het kan worden uitgevoerd, bijvoorbeeld:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 juli 20 09:30 backup.sh
De "x" in de toestemmingsgroep van de eigenaar (-rwx) geeft aan dat het kan worden uitgevoerd.
Als we dit script in cron.hourly laten staan, dan wordt het elk uur uitgevoerd met één minuut van elke dag, later zal ik uitleggen waarom.
De tweede manier om cron uit te voeren of te gebruiken is door het /etc/crontab-bestand direct te manipuleren. Bij de standaardinstallatie van verschillende Linux-distributies ziet dit bestand er ongeveer als volgt uit:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
De eerste vier regels zijn variabelen die het volgende aangeven:
SCHELPHet is de 'schil' waaronder de cron loopt. Indien niet gespecificeerd, wordt degene die is aangegeven in de regel / etc / passwd die overeenkomt met de gebruiker die cron uitvoert, standaard gebruikt.
PADBevat of geeft het pad aan naar de mappen waarin cron zoekt naar het uit te voeren commando. Dit pad verschilt van het globale pad van het systeem of de gebruiker.
MAIL NAARHet is naar wie de uitvoer van de opdracht wordt verzonden (als deze uitvoer heeft). Cron zal een e-mail sturen naar degene die in deze variabele is gespecificeerd, dat wil zeggen dat het een geldige gebruiker van het systeem of van een ander systeem moet zijn. Indien niet gespecificeerd, zal cron de e-mail naar de gebruiker sturen die eigenaar is van de opdracht die wordt uitgevoerd.
THUISHet is de root of hoofddirectory van het cron-commando, indien niet aangegeven, is de root degene die is aangegeven in het / etc / passwd-bestand dat overeenkomt met de gebruiker die cron uitvoert.
De opmerkingen worden aangegeven met # aan het begin van de regel.
Na het bovenstaande komen de lijnen die de correct geplande taken uitvoeren. Er zijn geen limieten aan het aantal taken dat er kan zijn, één per regel. Velden (Ze zijn 7) die deze lijnen vormen, worden als volgt gevormd:
 Minuut Uur DayOfMonth Maand DayOf Week Gebruikerscommando
  • Veld: Beschrijving
  • Minuut: Het bepaalt de minuut van het uur waarin de opdracht wordt uitgevoerd, deze waarde moet tussen 0 en 59 liggen.
  • Tijd: Het bepaalt de tijd dat de opdracht wordt uitgevoerd, het is gespecificeerd in een 24-uursindeling, de waarden moeten tussen 0 en 23 liggen, 0 is middernacht.
  • Dag van de maand: Dag van de maand waarin u de opdracht wilt uitvoeren. Er wordt bijvoorbeeld 20 aangegeven om het commando op de 20e van de maand uit te voeren.
  • Maand: Maand waarin de opdracht wordt uitgevoerd, kan numeriek (1-12) of door de naam van de maand in het Engels worden aangegeven, alleen de eerste drie letters.
  • Weekdag: Dag in de week wordt het commando uitgevoerd, het kan numeriek (0-7) zijn of de naam van de dag in het Engels, alleen de eerste drie letters. (0 en 7 = zondag)
  • Gebruiker: Gebruiker die de opdracht uitvoert.
  • Opdracht: Commando, script of programma dat u wilt uitvoeren. Dit veld kan meerdere woorden en spaties bevatten.
Een asterisk * als waarde in de eerste vijf velden geeft het begin-einde van het veld aan, dat wil zeggen alles. Een * in het minutenveld geeft alle minuten aan.
Om dit van de eerste 5 velden en de asterisk beter te begrijpen, zal ik verschillende voorbeelden gebruiken:
Voorbeeld:
 Beschrijving 01 * * * * Rijdt om 1 minuut van elk uur van elke dag 158 * * * Om 8:15 uur elke dag 15 20 * * * Om 20:15 uur van elke dag 00 5 * * 0 Om 5 uur elke zondag * 5 * * zo Elke minuut vanaf 5:00 uur om 05.59 uur elke zondag 45 19 1 * * Om 19:45 uur 1e van elke maand 01 * 20 7 * Om 1 minuut van elk uur op 20 juli 10 1 * 12 1 Om 01.10 uur Elke maandag in december 00 12 16 * wo om 12.00 uur op de 16e van elke maand en dat is woensdag 30 9 20 7 4 om 9.30 uur. van 20 juli en dat is donderdag 30 9 20 7 * Om 9.30 uur. vanaf 20 juli ongeacht de dag van de week 20 * * * 6 Tot de 20e minuut van elk uur op zaterdag 20 * * 1 6 Tot de 20e minuut van elk uur op zaterdag in januari 
Het is ook mogelijk om lijsten in de velden op te geven. De lijsten kunnen de vorm hebben van 1,2,3,4 of in de vorm van 1-4, wat hetzelfde zou zijn. Cron ondersteunt op dezelfde manier verhogingen in de lijsten, die als volgt worden aangegeven:
 Waarde of lijst / verhoging
Nogmaals, lijsten en stappen zijn gemakkelijker te begrijpen met voorbeelden:
Voorbeeld:
 Beschrijving 59 11 * 1-3 1,2,3,4,5 Om 11:59 uur Maandag tot vrijdag, januari tot maart 45 * 10-25 * 6-7 Op 45 minuten van alle uren van 10 tot 25 van alle maanden en dat de dag zaterdag of zondag is 10,30,50 * * * 1,3,5 Om 10, 30 en 50 minuten van alle uren op maandag, woensdag en vrijdag * / 15 10-14 * * * Elk kwartier vanaf 10:00 uur om 14.00 uur * 12 1-10 / 2 2,8 * Alle minuten van 12 uur, op de dagen 1,3,5,7 en 9 februari en augustus. (De verhoging in het derde veld is 2 en begint bij 1) 0 * / 5 1-10,15,20-23 * 3 Elke 5 uur van dag 1 tot 10, dag 15 en van dag 20 tot 23 van elke maand en dat het woensdag is 3/3 2/4 2 2 2 Elke 3 minuten vanaf minuut 3 (3,6,9, enz.) van uren 2,6,10, enz. (elke 4 uur vanaf uur 2) op 2 februari en dat is dinsdag
Zoals te zien is in het laatste voorbeeld, zou de cron-taak die aan die rij met die gegevens was toegewezen, alleen worden uitgevoerd als aan de 5 velden (AND) is voldaan. Dat wil zeggen, om de taak uit te voeren, moet deze op dinsdag 2 februari om 02:03 zijn. Het is altijd een Booleaanse EN die alleen waar retourneert als alle 5 velden in de specifieke minuut waar zijn.
[kleur = rgb (0,0,0)] Het vorige geval maakt dan duidelijk dat: [/ kleur]
Het cron-programma wordt elke minuut aangeroepen en voert de taken uit die zijn velden in die precieze minuut vervullen.
Inclusief het gebruikersveld en het commando, zouden de regels van crontab er als volgt uit kunnen zien:
 0 22 * ​​​​* * root /usr/daily backup.sh 0 23 * * 5 root /usr/wekelijkse backup.sh 0 8.20 * * * jcarrillo mail -s "systeem draait" [email protected]
De eerste twee regels worden uitgevoerd door de rootgebruiker en de eerste voert elke dag om 22:00 uur het script uit dat een dagelijkse back-up genereert. De tweede voert elke vrijdag om 23.00 uur een script uit dat een wekelijkse back-up genereert. De derde regel wordt uitgevoerd door de gebruiker sergio en zou elke dag om 8 uur 's ochtends en 8 uur 's avonds worden uitgevoerd en de opdracht is om een ​​e-mail te sturen naar het account [email protected] met het onderwerp "systeem werkt", een manier voor een beheerder om zich ervan bewust te zijn dat een extern systeem op de opgegeven tijden actief is, maar als hij op die tijden geen e-mail ontvangt, is er iets mis.
Root zijn, dan is het mogelijk, crontab direct wijzigen:
 vim / etc / crontab 
Dit wordt direct aangepast.

Cron uitvoeren met meerdere gebruikers, crontab-opdracht


Linux is een systeem voor meerdere gebruikers en cron is een van de applicaties die het werken met meerdere gebruikers tegelijk ondersteunt. Elke gebruiker kan zijn eigen crontab-bestand hebben, in feite wordt aangenomen dat de / etc / crontab het crontab-bestand van de rootgebruiker is, hoewel er geen probleem is dat andere gebruikers worden opgenomen, en vandaar het zesde veld dat precies aangeeft wie de gebruiker is. die de taak uitvoert en vereist is in:
 / etc / crontab

Maar wanneer normale gebruikers (en zelfs wortel) hun eigen crontab-bestand willen genereren, dan gebruiken we de crontab-opdracht.
In de map / var / spool / cron (kan variëren afhankelijk van de distributie), wordt voor elke gebruiker een cron-bestand gegenereerd, hoewel dit bestand tekst is, mag het niet rechtstreeks worden bewerkt.
Er zijn dan twee situaties waarbij het crontab-bestand direct wordt gegenereerd met het commando:
 crontab -e
Waarmee de standaardeditor opent (meestal vi) met het bestand met de naam lege crontab en waar de gebruiker zijn taaktabel zal invoeren en deze automatisch wordt opgeslagen als / var / spool / cron / gebruiker.
Het andere geval is dat de gebruiker een normaal tekstbestand bewerkt met de vermeldingen van de taken en het als voorbeeld 'my_cron' noemt, waarna het commando $> crontab my_cron ervoor zorgt dat het wordt ingesteld als het cron-bestand van de gebruiker in / var / spoel / cron / gebruiker:
 vi my_cron # verwijdert bestanden uit gedeelde map 0 20 * * * rm -f / home / sergio / shared / * # voert een script uit dat een back-up maakt van de documentenmap op de eerste dag van elke maand 0 22 1 * * / home / sergio / maandelijkse support.sh # elke 5 uur van ma tot vr, hij zorgt ervoor dat de rechten in mijn huis correct zijn 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (de bestand)> ls mijn_cron> crontab mijn_cron (ingesteld op / var / spool / cron / gebruiker)
Het bovenstaande samenvatten en andere opties overwegen voor: crontab:
 crontab file.cron (zal het bestand.cron instellen als de crontab van de gebruiker) crontab -e (opent de vooraf ingestelde editor waar het crontab-bestand kan worden gemaakt of bewerkt) crontab -l (geeft de huidige crontab van de gebruiker weer, hun cron-taken) crontab -r (verwijdert de huidige crontab van de gebruiker)
Bij sommige distributies is het bij het bewerken van gewone gebruikerscrontabs nodig om de service opnieuw te starten, zodat de crontab-bestanden in / var / spool / cron opnieuw kunnen worden gelezen.
 service crond herstart 
Om beter te begrijpen hoe u services kunt starten / stoppen / herstarten, vindt u in dit artikel meer informatie.

Toegang tot cron . beheren


Met Cron kunt u bepalen welke gebruikers de cron-services wel of niet kunnen gebruiken. Dit wordt op een zeer eenvoudige manier bereikt door de volgende bestanden:
  • /etc/cron.allow
  • /etc/cron.deny
Om te voorkomen dat een gebruiker cron of liever het crontab-commando gebruikt, is het voldoende om hun gebruikersnaam toe te voegen aan het /etc/cron.deny-bestand, om het gebruik ervan toe te staan, dan zou het zijn om hun gebruikersnaam toe te voegen aan /etc/cron.allow, als je om de een of andere reden het gebruik van cron voor alle gebruikers wilt weigeren, dan kun je het woord ALL aan het begin van cron.deny schrijven en dat zou voldoende zijn.
 echo ALL >> / etc / cron.deny of om een ​​andere gebruiker toe te voegen aan cron.allow echo juan >> / etc / cron.allow
Als noch het bestand cron.allow noch het bestand cron.deny bestaat, is het gebruik van cron in theorie zonder gebruikersbeperkingen. Gebruikersnamen toevoegen in cron.allow, zonder een cron.deny-bestand te maken, heeft hetzelfde effect als het maken met het woord ALL. Dit betekent dat als cron.allow eenmaal is gemaakt met een enkele gebruiker, de andere gebruikers die cron willen gebruiken altijd in dit bestand moeten worden opgegeven.
conclusiesWe hebben het gehad over de werking ervan, ik hoop dat je het hebt begrepen, sommige distributies zoals Red Hat bevatten een variant zoals anacron die sommige cron-tekortkomingen kan compenseren, maar op elk niveau, van het meest basale tot het meest geavanceerde, wordt cron gebruikt , is het raadzaam om de werking ervan te begrijpen . Als u vragen heeft of een suggestie heeft, aarzel dan niet om deze in de opmerkingen te plaatsen.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave