Shell Periodieke Taken

Uit Byte Docs

U kunt via de Shell periodieke taken uitvoeren door middel van Cron. Wanneer u een taak in wilt plannen plaatst u deze in uw crontab bestand.

Voor meer informatie zie de crontab man page

Note: Om PHP of perl scripts op uw website uit te voeren hoeft u dit niet via het internet adres te doen. U kunt bijvoorbeeld 'php /pad/naar/script.php' gebruiken in plaats van constructies met wget of iets dergelijks.

Inhoud

Taken toevoegen en wijzigen

Om uw crontab bestand te wijzigen gebruikt u het volgende commando 
crontab –e
U bent nu in een editor waar u taken kunt opgeven of wijzigen. Wanneer u nog nooit taken heeft toegevoegd ziet u de volgende regel 
# m h  dom mon dow   command
Deze regel geeft de indeling aan waar uw periodieke taak aan moet voldoen. De betekenis is als volgt 
m minuten na het hele uur (0-59)
h uur van de dag (0-23)
dom dag van de maand (1-31)
mon maand van het jaar (1-12)
dow dag van de week (mon,tue,wed,thu,fri,sat,sun)
command het uit te voeren commando


Voorbeelden

U wilt iedere nacht om 10 minuten over 5 uw php5 script genaamd dotasks.php uitvoeren.

Uw crontab bestand ziet er dan als volgt uit 
# m  h  dom mon dow   command
 10 5   *   *   *     php5 /home/users/uwshortname/uwdomein.nl/dotasks.php

U vindt het pad "/home/users/uwshortname" op het servicepanel onder domeininfo, of op de shell server met het pwd commando.

U wilt iedere maandag en woensdag om 10 uur en om 13 uur uw php5 script genaamd dotasks.php uitvoeren.

# m h     dom mon dow     command
  0 10,13 *   *   mon,tue php5 /home/users/uwshortname/uwdomein.nl/dotasks.php

U kunt uw wijzigingen opslaan door op uw toetsenbord op "CTRL-X" te drukken en vervolgens op "y", en "enter".

Als u nu de onderstaande regel te zien krijgt is uw taak succesvol opgeslagen.

crontab: installing new crontab

Taken tonen

Wanneer u snel wilt zien welke taken er gepland zijn kunt u het volgende commando gebruiken 
crontab –l

Alle taken wissen

Wanneer u alle taken wilt wissen gebruikt u het volgende commando 
crontab –r

Pas op, dit kan niet ongedaan gemaakt worden!

Output e-mailen

De output van scripts wordt automatisch naar het technisch beheerder e-mailadres van het domein verzonden.

U kunt ook zelf een e-mail adres opgeven. Hiervoor plaats u helemaal bovenin het crontab bestand de volgende regel 
MAILTO=email@adres.nl

Wilt u alleen bij foutmeldingen een email, voeg dan achter uw crontab regels

> /dev/null

toe. Dus bijvoorbeeld

 10 5  *   *   *     php5 /home/users/uwshortname/uwdomein.nl/dotasks.php > /dev/null

Cron tips en trucs

  • Elke zondag bestanden die ouder zijn dan 60 dagen weggooien:
0 2 * * sun find /pad/naar/map -type f -mtime +60 -print0 | xargs -0 rm

Lockrun bij performance issues

Mocht je een zware cronjob elke minuut of vaak willen laten draaien, dan wil je hier lockrun bij gebruiken. Op het moment dat geen lockrun toegepast is kunnen deze taken elkaar namelijk gaan overlappen. Bijvoorbeeld een cronjob die elke minuut loopt kan zichzelf inhalen op het moment dat hij gestart wordt terwijl het vorige proces (de zelfde cron een minuut eerder) nog niet afgesloten is. Op dat moment beginnen de cronjobs op te stapelen omdat het steeds langer duurt om ze uit te laten lopen, en er elke minuut een proces bij gestart wordt.

Het gevolg is dat cronjobs gekilled worden en dat kan potentieel gevolgen hebben voor de werking van het script (in verband met eventuele synchronisatiefouten, lockfiles etc.) hier biedt lockrun de redding. Met lockrun wordt gekeken of de cron die gestart gaat worden misschien al loopt, zo ja dan wordt deze job geen tweede keer gestart.

Bijvoorbeeld:

* * * * * echo test

Deze cronjob zegt elke minuut "test", niet een bijster zware klus maar laten we zeggen dat hij er twee minuten over doet, dat kan nooit goed gaan met een cron die elke minuut loopt.

Syntax

* * * * * lockrun -L .lockfile -- echo test

Dat gaat al een stuk beter, in dit geval start hij elke minuut het programma lockrun welke een lockfile met de naam .lockfile wegzet alvorens het commando (echo test) uit te voeren. Mocht de lockfile nog bestaan, omdat er nog een vorige cronjobs bezig is, zal lockrun dit melden en de cronjob niet nogmaals starten.

Gebruik bij meerdere cronjobs

Heeft u verschillende cronjobs waarbij u lockrun wilt gebruiken? Geef dan iedere cronjob een unieke lockfile naam. Bijvoorbeeld '.lock1' '.lock2' etc.

* * * * * lockrun -L .lock1 -- echo test
* * * * * lockrun -L .lock2 -- echo test2

Stille werking

Standaard geeft lockrun een melding als er al een cronjob loopt, welke u per e-mail ontvangt. Heeft u geen behoefte aan deze meldingen? Geef dan een -Q (--quiet) als argument mee.

* * * * * lockrun -Q -L .lockfile -- echo test


De huidige waardering is: 66/100 (10 stemmen)
 You need to enable JavaScript to vote
  • Deze pagina is het laatst bewerkt op 11 mei 2012 om 10:24.
  • Deze pagina is 1.900 keer bekeken.

We proberen de kwaliteit van onze kennisbank voortdurend te verbeteren.
Geef de informatie op deze pagina een waardering met de slider hierboven.