Cron job: de timer van Linux
Een script laten uitvoeren iedere 20 minuten:
Ik maak eerst een testscript met mcedit TestCronJob.sh met daarin:
touch /home/myself/bin/TestCronJob.txt
(het enige wat dat doet is de datum/tijd van dat testbestand aanpassen. Je kan het script eerst zelf op de commandolijn starten om te kijken of de werking juist is.)
Ik edit mijn cronjobs: ( * )
crontab -e
Soms moet je op de INS (insert) toets duwen om in de tekst te kunnen werken.
Wat je hopelijk weet is hoe je weer uit deze edit mode komt :p
- Na het ingeven van de lijn doe je escape.
- Dan tik je
:wq
, wat betekent : commando w write (schrijf of bewaar wijzigingen), en quit (afsluiten). - Wil je enkel afsluiten zonder bewaren: enkel
:q
, wil je tussendoor bewaren, enkel:w
.
(als je nog geen cron jobs had krijg je een melding dat er een nieuwe file voor je wordt gemaakt)
Daarna kan je checken met
crontab -l
Voorbeeld van wat je in de crontab zet :
*/20 * * * * MyTestScript.sh
De sterretjes betekenen in volgorde: minuten, uur, dag, maand, weekdagnummer en daarna moet het commando komen.
Het truukje met de slash / zorgt ervoor dat het iedere 20 minuten gebeurt.
Je kan de uitvoering even veel korter zetten, bv */03 om het effect te bekijken.
Je kan ook opgeven om op 0,20,40 minuten te werken, dus opeenvolgend met een komma tussen.
Controle
- Draait “cron”?
De cron deamon draait normaal gezien altijd op je Linux systeem, hij voert deze timer taken uit.
ps -A | grep cron
- Om te checken of je script wel uitgevoerd wordt, kan je er ergens een lijn in opnemen als:
touch /home/username/ItRuns.txt
Aan de datum + tijd eigenschap van dit bestand kan je het starten van het script vaststellen. - Je kan ook telkens een lijn laten toevoegen aan een logfile, maar denk eraan die logfile ook op tijd te wissen of in te korten!
echo `date` >> RunLog.txt
Cron jobs zijn uitermate geschikt om op geregeld tijdstip de logs uit te kuisen, en daarmee zijn we rond 🙂
(*) Mijn cronjobs: (upd 15/04/2015)
Cronjob van gebruiker
In een terminal uitgevoerd met de rechten van de gebruiker waarmee ik op dat ogenblik werk. Je hoeft de cronjobs dus niet als root in te stellen, de gewone gebruiker heeft ook recht op cronjobs!
Het gevolg is wel dat de “root” gebruiker – of jijzelf ingelogd als root – de cronjobs van de gebruiker niet ziet. Als root ga je dus die cronjob die je als gebruiker hebt ingesteld niet vinden!