Cron (Unix)
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 . De naam cron komt van het Griekse chronos (χρόνος) wat "tijd" betekent.
crontab
Cron kan worden gedefinieerd als het equivalent van Windows Scheduled Tasks .
Overzicht
Cron wordt geactiveerd door crond , een configuratiebestand dat een shell -opdracht specificeert die periodiek op een bepaald tijdstip moet worden uitgevoerd. Crontab- bestanden worden opgeslagen waar takenlijsten en andere instructies voor de cron-daemon achterblijven. De gebruikers die uw crontab -bestand mogen maken, worden gespecificeerd in het cron.allow -bestand . Evenzo worden degenen die niet zijn toegestaan vermeld in cron.deny. Deze laatste twee bestanden bevinden zich in /etc/cron.d/ , of /etc/ , afhankelijk van de versie van Unix .
Elke regel van een crontab-bestand vertegenwoordigt een taak en bestaat uit een CRON-expressie, gevolgd door een uit te voeren shell -opdracht . Sommige implementaties van cron, zoals in de populaire BSD 4e editie geschreven door Paul Vixie , en opgenomen in veel Linux -distributies , voegen een gebruikersnaamspecificatie toe aan het formaat als een zesde veld, zoals wie de gespecificeerde taak zal uitvoeren (afhankelijk van het bestaan van een gebruiker in /etc/passwd en geautoriseerde machtigingen). Dit is alleen toegestaan in het crontab-systeem (/etc/crontab en /etc/cron.d/*), niet in andere waar elke gebruiker is toegewezen aan een configuratie.
Voor de "dag van de week" (veld 5), worden zowel 0 als 7 als zondag beschouwd, hoewel sommige versies van Unix zoals AIX "7" niet als geldig beschouwen volgens de man -pagina . Hoewel wanneer de taak normaal wordt uitgevoerd wanneer de tijd-/datumvelden zijn opgegeven, ze allemaal overeenkomen met de huidige datum en tijd, is dit een uitzondering.
Als zowel "dag van de maand" als "dag van de week" beperkt zijn (niet " * " ), moet ofwel "dag van de maand" (veld 3) of "dag van de week" (veld 5) overeenkomen met de huidige dag.
Crontab -bestandsformaat
Voorbeeld crontab-bestand:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root THUIS=/ # run-parts 01 * * * * root nice -n 19 run-parts /etc/cron.hourly 50 0 * * * root nice -n 19 run-parts /etc/cron.daily 22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly 42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly
Om taken toe te voegen, te verwijderen of te wijzigen, moet je de crontab aanpassen. Dit wordt gedaan met de opdracht crontab -e , die de editor opent die is gedefinieerd in de omgevingsvariabele EDITOR en het crontab -bestand laadt dat overeenkomt met de gebruiker die is ingelogd.
Elke keer dat de crontab wordt uitgevoerd, wordt er een bericht naar de gebruiker verzonden dat verschijnt in de MAILTO - omgevingsvariabele , indien ingeschakeld, om de uitgevoerde taak aan te geven.
Het Apache-foutlogboek wordt dan één minuut na middernacht (00:01 elke dag van de maand, elke dag van de week) afgebroken.
1 0 * * * echo -n "" > /www/apache/logs/error_log
Het script wordt vervolgens elke 5 minuten uitgevoerd: /home/user/test.pl.
*/5 * * * * /home/user/test.pl
.--------- minuut (0-59) | .------------ uur (0-23) | | .--------- dag van de maand (1-31) | | | .------ maand (1-12) of jan,feb,mar,apr,may,jun,jul... (maanden in het Engels) | | | | .--- dag van de week (0-6) (zondag=0 of 7) of zon,ma,di,wo,do,vrij,za (dagen in het Engels) | | | | | * * * * * opdracht om uit te voeren
Opmerking: omgevingsvariabelen worden niet ondersteund
Syntaxis
Het cron-configuratieformaat is heel eenvoudig.
- Het hekje "#" is een opmerking, alles na dat teken wordt niet uitgevoerd door cron .
- De uitvoeringstijd wordt gespecificeerd volgens de volgende tabel:
- Minuten: (0-59)
- Uren: (0-23)
- Dagen: (1-31)
- Maand: (1-12)
- Dag van de week: (0-6), waarbij 1=maandag, 2=dinsdag,... 6=zaterdag en 0=zondag (soms ook 7=zondag)
################################################## # ######## #minuut (0-59), # #| uur (0-23), # #| | dag van de maand (1-31), # #| | | maand (1-12), # #| | | | dag van de week (0-6 waarbij 0=zondag) # #| | | | | commando's # ################################################## # ######## 15 02 * * *
- Een asterisk (*) wordt gebruikt om alle mogelijke waarden van een variabele aan te geven .
- De laatste kolom komt overeen met het absolute pad van het binaire bestand of script dat u wilt uitvoeren.
Voorbeelden
Bijvoorbeeld:
30 10 * * 1 /usr/bin/who >> /var/log/usuarios.txt
Voer elke maandag om 10:30 het who -commando uit en sla de uitvoer op in het bestand users.txt
Om twee of meer waarden in elke variabele op te geven, moeten ze worden gescheiden door komma's, volgens het bovenstaande voorbeeld:
0,30 * * * 1 /usr/bin/who >> /var/log/usuarios.txt
Voer elke maandag elk half uur het who-commando uit en sla de uitvoer op in het bestand users.txt
Als we willen dat het elke 15 minuten wordt uitgevoerd, zou het zijn:
0,15,30,45 * * * * /usr/bin/who >> /var/log/usuarios.txt
of
*/15 * * * * /usr/bin/who >> /var/log/usuarios.txt
In dit voorbeeld zullen we zien hoe je meer dan één commando aan de cron kunt doorgeven en overigens hoe een download ingepland kan worden:
30 21 * * * cd /media/sda7/dexter/distributions/isos;wget http://example.com/archivo_a_descargar.loquesea
Deze andere is om het afsluiten van de pc te programmeren. In dit geval elke zaterdag om 21.30 uur.
30 21 * * 6 /sbin/shutdown -h now
Crontab van een bepaalde gebruiker bewerken
crontab [ -u gebruiker ] bestand
crontab [ -u gebruiker ] { -l | -r | -e }
De optie -u wordt gebruikt om de gebruikerscrontab aan te geven die we willen beheren. Alleen root kan met deze optie de opdracht crontab gebruiken.
De -e optie wordt gebruikt om het te bewerken
Definitie van voorgedefinieerde schema's
Er zijn verschillende vooraf gedefinieerde waarden die kunnen worden gebruikt om de CRON-expressie te vervangen.
| binnenkomst | Beschrijving | gelijk aan |
|---|---|---|
@yearly |
Rijdt één keer per jaar | 0 0 1 1 *
|
@annually |
(zelfde als @yearly) |
0 0 1 1 *
|
@monthly |
Rijdt één keer per maand | 0 0 1 * *
|
@weekly |
Rijdt een keer per week | 0 0 * * 0
|
@daily |
Rijdt eenmaal per dag | 0 0 * * *
|
@midnight |
(zelfde als @daily) |
0 0 * * *
|
@hourly |
Rijdt één keer per uur | 0 * * * *
|
Ook beschikbaar is @reboot, waarmee een taak één keer kan worden uitgevoerd telkens wanneer de cron-daemon wordt gestart, wat meestal samenvalt met het opstarten van de server. Dit kan handig zijn als het nodig is om een server of daemon te starten onder een bepaalde gebruiker of als de gebruiker geen rechten heeft voor het bestand rc.d/init.d .
manipuleren
Veel cron-implementaties interpreteren eenvoudig crontab-vermeldingen in de systeemtijdzone-instelling op grond van wat de daemon instelt wanneer deze wordt uitgevoerd. Dit kan de bron van conflicten zijn als grote teams met meerdere gebruikers gebruikers in meerdere tijdzones hebben, vooral als het standaard tijdzonesysteem de mogelijk verwarrende DST bevat . Dus een cron-implementatie kan elk speciaal geval "TZ=<timezone>" omgevingsvariabele-instellingsregels in de crontab van de gebruiker hebben, waarbij relatieve crontab-items na de tijdzone worden geïnterpreteerd. [ 1 ]
Geschiedenis
Vroege
Cron op Unix versie 7 , geschreven door Brian Kernighan , was een systeemservice (later daemon genoemd ) die werd aangeroepen /etc/inittabtoen het besturingssysteem in de modus voor meerdere gebruikers ging. Dit algoritme was eenvoudig:
- Lezen
/usr/etc/crontab - Bepaal of er opdrachten werden uitgevoerd op de huidige datum en tijd en of ze als root werden uitgevoerd .
- Een minuut onderbreken
- Herhaal stap 1.
Deze versie van cron was eenvoudig en robuust, maar het verbruikte ook middelen, of het nu werk vond of niet; Bij het horen van deze beschrijving merkte Douglas Comer , een professor aan de Purdue University , op: "Ah, een algoritme met een kort geheugen." In een experiment aan de Purdue University in de late jaren '70 om cron-services uit te breiden naar alle 100 gebruikers op een VAX -timeshare die zich op een locatie met hoge systeembelasting bevond.
Mogelijkheid voor meerdere gebruikers
De volgende versie van cron, met de System V -release , is gemaakt om de mogelijkheden van cron uit te breiden naar alle gebruikers op een Unix-systeem, niet alleen root (of superuser). Hoewel dit tegenwoordig misschien triviaal is met de meeste Unix- en Unix-achtige systemen met krachtige processors en een klein aantal gebruikers, vereist het momenteel een nieuwe benadering op een 1 MIPS -systeem met ongeveer 100 gebruikersaccounts.
versies
Met het voordeel van het GNU- en Linux- project verscheen er een nieuwe cron. De meest relevante hiervan is Vixie cron, oorspronkelijk gecodeerd door Paul Vixie in 1987. Vixie cron versie 3 werd uitgebracht na 1993. Versie 4.1 werd omgedoopt tot ISC (Internet System Consortium) Cron en werd uitgebracht in januari 2004. Versie 3, met een kleine bug fixes, wordt gebruikt door de meeste GNU/Linux- en BSD-distributies.
In 2007 koppelde RedHat cron-vixie 4.1 aan het cronie-project en nam in 2009 anacron 2.3 op.
Andere populaire implementaties zijn anacron en fcron . Anacron is echter geen op zichzelf staand cron-programma; het vertrouwt op een ander cron-programma om het aan te roepen om te worden uitgevoerd.
Referenties
- ^ "Zon.com" . Gearchiveerd van het origineel op 5 augustus 2009 . Ontvangen 28 april 2010 .
Externe links
- Gentoo Linux Gids voor Cron Officiële Gentoo- documentatie .
- cron(8) : daemon om regelmatig commando's uit te voeren – Systeembeheer in de FreeBSD - handleiding