Disclaimer :
Dit document is niet juist en is niet meer onderhouden.
|
Gentoo Linux Cron Gids
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 |
* * * * * /bin/false
35 1 4 * mon-wed /bin/false
25 22 2 3 * /bin/true
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
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
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!
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|