Gentoo Logo

Disclaimer : Dit document is niet juist en is niet meer onderhouden.


Gentoo Linux Cron Gids

Inhoud:

1.  De basis van Cron

Wat doet cron?

Cron is een programma die in de achtergrond werkt en geplande taken uitvoert op basis van een input van het commando crontab. Het voert deze daak uit door iedere minuut te waken en controleren als er geen cron-taken zijn in de gebruiker crontabs.

Nota: Merk op dat crontab de naam van een lijst van cron-taken is maar ook de naam van het commando om die lijst aan te passen.

De "de facto" cron

Er zijn op zijn minst drie implementaties voor jou om te kiezen in de portage. Ze leveren allemaal een gelijkaardige interface, namelijk het gebruik van crontab of een gelijkaardig commando. Er is ook een gerelateerd hulpmiddel die Anacron heet, die bedoeld is om te werken met cron op systemen die niet constant werken.

Het is ook niets waard om alle beschikbare cron pakketten te installeren die afhangen van sys-process/cronbase. Dit pakket is technisch gezien niet afhankelijk van de cron pakketten, maar het levert een cron-gelijkaardige functionaliteit die gebruikers kunnen apreciëren.

Vooraleer we beginnen te werken met cron, moet je kiezen welke implementatie je wilt gebruiken. Voor je handigheid, heb ik over elke versie informatie verzamelt. Deze is hieronder te vinden.

2.  Welke cron zoek jij?

Vixie cron

Vixie cron is een volledige cron met veel functies die gebaseerd is op SysV cron. Elke gebruikers heeft zijn eigen crontab en heeft de mogelijkheid om zijn omgevingsvariabelen binnen crontab in te stellen. Niet zoals andere cron variaties, bied het ook ondersteuning aan voor SELinux en PAM. Het ondersteund minder architecturen dan Dcron, maar meer dan Fcron.

Functies van sys-process/vixie-cron:

  • Ondersteuning voor SELinux
  • Ondersteuning voor PAM /etc/security/limits.conf
  • Instellen van de omgevingsvariabelen in crontabs (PATH, SHELL, HOME, enz.)
  • Elke gebruiker kan zijn eigen crontab, toegangsrechten laten controleren door cron door cron.allow en cron.deny

Dillon's Cron

Dcron's doel is een heel simpele, elegante en veilige implementatie zijn van cron. Het laat niet toe om de omgegingsvariabelen te specifiëren in trabs en alle cron-taken worden uitgevoert van /bin/sh. Zoals Vixie cron, heeft elke gebruiker zijn eigen crontab.

Eigenschappen van sys-process/dcron:

  • Snel, simpel en vrij van onnodige eigenschappen
  • Toegang tot crontab is gelimiteerd tot de cron groep, m.a.w. hangt het niet af van externe faculteiten

Fcron

Fcron's doel is het vervangen van Vixie cron en Anacron. Het is ontworpen om te werken op systemen die niet constant werken en is gebouwd met meerdere eigenschappen. Het heeft taak opstartbeperkingen, controles van taakrangschikking, de mogelijkheid om goede waarden aan taken te geven en de mogelijkheid om taken te plannen als het systeem opstart. Bekijk ook fcron's homepagina voor meer informatie.

Eigenschappen van sys-process/fcron:

  • Ontworpen om te werken op systemen die niet constant werken, m.a.w het kan een taak herstarten moest het niet uitgevoert is geweest
  • Instellen van omgevingsvariabelen en vele andere opties in crontabs
  • Elke gebruiker kan zijn eigen crontab hebben, toegang is gecontroleerd door cron.allow en cron.deny
  • Verbeterde crontab syntax met ondersteuning voor veel nieuwe eigenschappen

Anacron

Anacron is geen cron programma die op de achtergrond werkt, het is iets die meestal werkti in samenwerken met een ander. Het voert commando's uit op bepaalde intervallen uitgedrukt in dagen en het gaat der ook niet van uit dat het systeem constant werkt; Het zal dus taken uitvoeren die niet werden uitgevoert terwijl het systeem niet aangeschakelt was. Anacron hangt meestal af van een cron daemon om het iedere dag uit te voeren.

3.  cron gebruiken

Installatie

Selecteer de cron implementatie die je het best vind, en emerge het.

Codevoorbeeld 3.1: Cron installeren

# emerge dcron
# /etc/init.d/dcron start
# rc-update add dcron default

Optioneel, als je keuze is gevallen op Fcron, installeer je best ook Anacron.

Codevoorbeeld 3.2: Installing anacron

# emerge anacron
# /etc/init.d/anacron start
# rc-update add anacron default

Systeem crontab

De post-installatie berichten van enkele cron pakketten zeggen je om crontab /etc/crontab uit te voeren. Het /etc/crontab bestand is jouw systeem crontab. Een cron installatie kan het gebruiken in samenwerking met sys-process/cronbase om de scripts uit te voeren in /etc/cron.{daily,hourly,weekly,monthly}. Merk ook op dat alleen Vixie-cron geplande taken in /etc/crontab automatisch worden gestart. Fcron gebruikers moeten crontab /etc/crontab uitvoeren als ze veranderingen hebben gemaakt aan /etc/crontab.

Merk op dat de mogelijkheid er is dat geplande taken in het systeem crontab niet tussen de cron-taken afgebeeld staan, als men crontab -l uitvoert.

Natuurlijk, kun je kiezen om geen crontab te gebruiken. ALs je Dcron of Fcron verkiest, voer crontab /etc/crontab niet uit. Als je keuze uitgaat naar Vixie-cron, zou je alle regels in /etc/crontab in commentaar moeten plaatsen.

Codevoorbeeld 3.3: Alle regels in /etc/crontab in commentaar plaatsen

# sed -i -e "s/^/#/" /etc/crontab

Vertrouwde gebruikers toegang geven tot cron

Als je gebruikers wilt toegang verlenen om toegang te krijgen tot cron, wil je waarschijnlijk dit hoofdstuk lezen, in het andere geval kun je overgaan naar het volgende hoofdstuk, plannen van cron-taken.

Nota: Een andere gebruiker toegang tot crontab geven, laat hem niet toe cron-taken uit te voeren als root. Als je een gebruiker de mogelijkheid wil geven om het root crontab aan te passen, kijk je best eens naar sudo. Gelieve onze Gentoo Sudo(ers) Gids door te nemen voor meer details.

Het maakt niet uit welk cron pakket je gebruikt, als je een gebruiker wilt toegang geven tot crontab, moet hij eerst in de cron groep zitten. Als voorbeeld, als je de gebruiker wepy toegang wilt verlenen tot de groep cron, zou je hetvolgende moeten uitvoeren:

Codevoorbeeld 3.4: Een gebruiker toevoegen tot de cron groep

# gpasswd -a wepy cron

Nota: Wanneer je een gebruiker toevoegt aan de cron groep, controleer dat de gebruiker uit- en inlogt vooraleer de verandering effect heeft.

Als je Dcron niet gebruikt, moet je niets meer doen om een gebruiker toegang te verlenen tot crontab. Dcron gebruikers kunnen verder gaan naar het volgende hoofdstuk plannen van cron-taken, alle anderen, gelieve verder te lezen.

Als je Fcrongebruikt, moe tje /etc/fcron/fcron.deny en /etc/fcron/fcron.allow aanpassen. De veiligste manier is om eerst iedereen te weigeren en daarna bepaalde personen toe te staan in /etc/fcron/fcron.allow.

Belangrijk: Als /etc/fcron/fcron.allow nog /etc/fcron/fcron.deny bestaat, zullen alle gebruikers toegang hebben tot crontab. fcron heeft een standaard fcron.allow die alle gebruikers toelaat in de crongroep, fcrontab te raadplegen.

Codevoorbeeld 3.5: Permissies in fcron.deny

all

Laten we nu zeggen dat we een gebruiker wepy hebben die zijn eigen taken mag regelen, zouden we die moeten toevoegen in /etc/fcron/fcron.allow als volgt:

Codevoorbeeld 3.6: Permissies in fcron.allow

wepy

Als je Vixie cron verkiest, wil je waarschijnlijk enkel /etc/cron.allow aanpassen.

Belangrijk: Het is belangrijk om te wetend at enkel /etc/cron.allow bestaat, dan zullen enkel de gebruikers in de cron-groep, toegang hebben, maar als er enkel een lege /etc/cron.deny bestaat, zullen alle crongroep gebruikers, toegang hebben. Laat /etc/cron.deny niet leeg als je geen /etc/cron.allow hebt.

Bijvoorbeeld, als je wilt teogang verstrekken tot de gebruiker wepy, zou je hem toevoegen tot /etc/cron.allow als volgt:

Codevoorbeeld 3.7: Permissies in /etc/cron.allow

wepy

plannen van cron-taken

Het proces van het aanpassen van crontabs is verschillend voor elk pakket, maar ze ondersteunen allemaal de zelfde basis set van commando's: toeveogen of vervangen in crontabs. De volgende lijst toont je hoe je die commando's voor elk pakket kunt uitvoeren.

Versie Aanpassen van crontab Verwijderen van crontab Niewe crontab Lijst van cron-jobs
dcron crontab -e crontab -d [gebruiker] crontab bestand crontab -l
fcron fcrontab -e fcrontab -r [gebruiker] fcrontab bestand fcrontab -l
vixie-cron crontab -e crontab -r -u [gebruiker] crontab bestand crontab -l

Nota: Als je het verwijder commando gebruikt, let er dan op dat je een argument meegeeft; als dit niet geval is zal die de huidige crontab van de gebruiker verwijderen.

Nota: Fcron heeft ook een snelkoppeling van crontab naar fcrontab.

Vooraleer we een van deze commando's kunnen gebruiken, moet je eerst crontab zelf verstaan . Elke lijn in een crontab moet vijf tijd velden voorstellen in de volgende volgorde: the minuten (0-59), uren (0-23), dagen (1-31), maanden (1-12), en dagen van de week (0-7, Maandag is 1, Zondag is 0 en 7). De dagen van de week en maand kunnen gespecifieerd worden door een drie-letter afkorting zoals mon, tue, jan, feb, enz. Elk veld kan ook een een reeks waarden bevatten (zoals 1-5 or mon-fri), een door een komma gescheiden lijst van waarden (zoals 1,2,3 or mon,tue,wed) of een lijst van waarden met een stap (zoals 1-6/2 als 1,3,5).

Dit klinkt misschien een beetje verwarrend, maar met enkele voorbeelden, zul je zien dat het niet zo moeilijk is als het klinkt.

Codevoorbeeld 3.8: Voorbeelden

# Voert /bin/false elke minuut uit
*     *     *     *     *        /bin/false

# Voert /bin/false uit om 1:35 op maandag,dinsdag,woensdag en de 4de van
elke maand
35    1     4     *     mon-wed  /bin/false

# Voert /bin/true uit op 22:25 de 2de maart
25    22    2     3     *        /bin/true

# Voert /bin/false uit om 2:00 elke maandag, woensdag en vrijdag
0     2     *     *     1-5/2    /bin/false

Nota: Merk op hoe je specifieke dagen van de week en dagen van de maand moet specifiëren vooraleer ze gecombineerd zijn. Als je een * plaats voor een van de twee, krijgt de andere prioriteit, terwijl een * voor bijde gewoon elke dag betekend.

Om te testen wat je juist hebt geleerd, laten we door deze stappen gaan en effectief enkele cron-taken gaan instellen. Laten we eerst een bestand maken dat crons.cron heet, en laten we die als volgt aanpassen.

Codevoorbeeld 3.9: Aanpassen van crons.cron

$ nano crons.cron
#Mins  Hours  Days   Months  Day of the week
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

Nu kunne we een kunnen we die crontab aan het systeem crontab toevoagen met het "nieuw commando" van de tabel hierboven.

Codevoorbeeld 3.10: Een niewe crontab

# crontab crons.cron

Nota: Je zult niet echt de teruggave van deze commando's zien tenzij je omleiding gebruikt.

Om te conterleren dat de cron-taken die je plande uitvoert worden, gebruiken we het gepaste list command van de bnovenstaande tabel.

Codevoorbeeld 3.11: Een lijst maken van cron-jobs

# crontab -l

Je zou een lijstje moeten zie die gelijkaardig is aan crons.cron, indien niet, heb je warschijnlijk het foute commando gebruikt om je cron toe te voegen.

Deze crontab zou moeten elke minuut "I really like cron" teruggeven. Natuurlijk zou je dit alleen doen als je erg veel van cron houdt. De crontab zal ook elke dag in januari en frebuari "I like cron a little" teruggeven. Het zal ook om 3:10 op de eerste januari "I don't really like cron" teruggeven.

Als je anacron gebruikt, zou je moeten verder lezen, in de andere gevallen ga je verder naar het volgende hoofdstuk, aanpassen van crontabs.

Anacron gebruikers willen waarschijnlijk /etc/anacrontab aanpassen. Dit bestand heeft vier velden: Het nummer van de dagen tussen elke startr, de tussentijd in minuten na welke het start, de naam van de taak, en het commando waarin het moet starten.

Bijvoorbeeld, om het echo "I like anacron" elke 5 dagen, 10 minuten na Anacron gestart is, te laten uitvoeren, zou je het volgende moeten hebben:

Codevoorbeeld 3.12: /etc/anacrontab

5 10 wasting-time /bin/echo "I like anacron"

Anacron verlaat echter alle taken in anacrontab wanneer die uitgevoert zijn, dus als je wilt dat deze elkda dag zijn taken controleert, zul je cron moeten gebruiken. De instructies op het ieinde van het hoofdstuk zullen je zeggen dit te doen.

aanpassen van crontabs

Laten we beginnen met een realistische gedachte, je wilt niet dat je systeem je zegt hoeveel je van cron houdt elke minuut. Als een volgende stap, laten we dit verwijderen door de gepaste remove command van de bovenstaande tabel gebruiken. We zullen daarna ook een lijstje opvragen van alle taken, gewoon om te controleren dat het goed is verlopen.

Codevoorbeeld 3.13: Verwijderen van een crontab

# crontab -d
# crontab -l

Je zou geen verschil moeten zien in de teruggave van crontab -l. Als je geen taken ziet, wil dat zeggen dat je faalde om de crontab te verwijderen, en dat je zou moeten controleren dat je de correcte remove command voor je cron pakket hebt gebruikt.

Nu je een schone lei hebt, laten we iets handig in de root crontab stoppen. De meeste mensen willen updatedb elke week uitvoeren. Controleer dat slocate goed werkt. Om het toe ge voegen aan je crontab, laten eerst crons.cron terug aanpassen zodat het er als volgt uitziet:

Codevoorbeeld 3.14: Een echte crontab

22 2 * * 1    /usr/bin/updatedb

Dit zou er voor zorgen dat cron elke maandag morgen om 2:22 A.M. de taak uitvoert. Voeg eje crontab nu met het juiste new command toe uit de bovenstaande tabel.

Codevoorbeeld 3.15: Een lijstje maken van de cron-taken

# crontab crons.cron
# crontab -l

Laten we nu zeggen dat je emerge --sync wilt toevoegen aan je dagelijkse plannen. Je kunt dit doen door crons.cron aan te passen en crontab crons.cron te gebruiken, net als daarjuist, of je kunt het juiste edit command gebruiken van de bovenstaande tabel. Het geeft je een juiste manier om de gebruikers crontab aan te passen, zonder af te hangen van externe bestanden zoals crons.cron.

Codevoorbeeld 3.16: Een crontab aanpassen

# crontab -e

Dit zou de editor van de gebruiker's crontab moeten openen met een editor. We willen emerge --sync elke dag om 6:30 gestart hebben, dus laten we het op de volgende manier aanpassen:

Codevoorbeeld 3.17: Een echte crontab

22 2 * * 1    /usr/bin/updatedb
30 6 * * *    /usr/bin/emerge --sync
(Als je anacron gebruikt, voegen de volgende lijn toe)
30 7 * * *    /usr/sbin/anacron -s

Nogmaals, controleer de cron-taken lijst zoals we in het vorige voorbeeld gedaan hebben om te controleren dat de taken die geplant zijn, toegevoegt zijn. Als ze daar allemaal zijn, ben je klaar.

4.  cronbase gebruiken

Zoals eerder vermeld, hangen alle cron-pakketten af van sys-process/cronbase. Het cronbase pakket maakt /etc/cron.{hourly,daily,weekly,monthly} aan, en een script die run-crons heet. Je hebt waarschijnlijk ook gemerkt dat de standaard /etc/crontab iets zoals dit bevat:

Codevoorbeeld 4.1: Standaard systeem crontab

*/15 * * * *     test -x /usr/sbin/run-crons && /usr/sbin/run-crons
0  *  * * *      rm -f /var/spool/cron/lastrun/cron.hourly
0  3  * * *      rm -f /var/spool/cron/lastrun/cron.daily
15 4  * * 6      rm -f /var/spool/cron/lastrun/cron.weekly
30 5  1 * *      rm -f /var/spool/cron/lastrun/cron.monthly

Om te vermijden te veel uit te wijden,, kunnen we gewoon aannemen dat deze commandos effectief je uurlijkse, dagelijkse, wekelijkse en maandelijkse scripts uitvoert. De methode van het plannen van cron-taken heeft enkele belangrijke voordelen:

  • Ze zullen starten zelfs als je computer uit was wanneer ze geplant waren.
  • Het is gemakkelijk voor onderhouders een script te plaatsen in die goed bepaalde plaatsen
  • Je weet perfect waar je crontaken geplaatst zijn, dit maakt het makkelijk voor je om een backup te maken en je systeem herstellen

Nota: Nogmaals, is het handig dat Vixiecron automatisch /etc/crontab leest, terwijl dcron en fcron dit niet doen. Gelieve Systeem crontab hoofdstuk te lezen om daar meer over te leren.

5.  Laatste Notities

Probleemoplossing

Als je moeilijkheden ondervindt cron goed aan de praat te krijgen, wil je waarschijnlijk door deze controlelijst gaan.

  • Is cron gestart?
    Voer ps ax | grep cron uit en controleer dat het tevoorschijn komt!
  • Werkt cron?
    Probeer: * * * * * /bin/echo "foobar" >> /bestand_die_je_eigendom_is en controleer dat het werkt.
  • Werkt je commando?
    Probeer: * * * * * /bin/foobar > /bestand_die_je_eigendom_is 2>&1 en bekijk de fouten in /bestand_die_je_eigendom_is
  • Kan cron je taak uitvoeren?
    Controleer de cron log, meestal /var/log/cron.log of /var/log/messages op fouten
  • Zijn er dead.letter's?
    Cron send meestal mail waneer er een probleemis, controleer ook dat je mail en zoek ook naar ~/dead.letter.

Hou ook in het achterhoofd, dat elk cron pakket verschillend is van eigenschappen. Controleer de man paginas voor crontab, fcrontab of anacrontab, afhangend van wat je gebruikt.

Veel succes!



Print

Upgedate op 20 februari 2006

De originele versie van dit document wordt niet meer onderhouden

Korte inhoud: Deze gids beschrijft hoe je cron kunt instellen en gebruiken.

Eric Brown
Auteur

Xavier Neys
Redacteur

Dimitry Bradt
Vertaler

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.