We proberen de kwaliteit van onze kennisbank voortdurend te verbeteren.
Geef de informatie op deze pagina een waardering met de slider hierboven.
Shell Periodieke Taken
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
- Deze pagina is het laatst bewerkt op 11 mei 2012 om 10:24.
- Deze pagina is 1.900 keer bekeken.