Pagina 1 van 1

Crontab bewerken voor Linux, MacOS X, QNAP, etc.

Crontab bewerken voor Linux, MacOS X, QNAP, etc.
   2

In dit artikel probeer ik je te laten zien hoe je de taakplanner, welke taken automatisch uitvoert aan de hand van een planning, op een Linux/Unix gebaseerd systeem, zoals Ubuntu, QNAP NAS, MacOS X, etc., kunt bewerken.

Cron is de meest gebruikte “service” hiervoor en Cron gebruikt crontab als configuratie bestand.
In dat bestand kun je taken toevoegen, verwijderen of bewerken, welke je op bepaalde tijdstippen of intervallen automatisch wilt laten uitvoeren.

Natuurlijk gebeurt dit allemaal wel op eigen risico natuurlijk …




Cron versus Crontab

Cron, waarvan de naam is afgeleid van het Griekse woord voor tijd: chronos, is een dienst/service of program welke te vinden is op de meeste Linux/Unix-achtige systemen en zorgt ervoor dat geplande taken automatisch uitgevoerd worden volgens een opgegeven schema, waar tijd en/of interval is bepaald voor iedere taak.

Cron (het programma) gebruikt hiervoor een configuratie bestand: Crontab. Het formaat van crontab is niet alledaags maar zeker niet onmogelijk om te begrijpen.

Cron is dus het “programma” en de crontab is de “lijst van taken”.

Als je dus taken wilt verwijderen, toevoegen of bewerken, dan zul je dus het crontab bestand moeten openen en bewerken.

De Korte Versie

OK, dus voor wie ongeduldig is, de korte versie voor wie ongeduldig is of dit artikel al eens eerder gelezen heeft:

Bewerk crontab met crontab -e.

Of als je crontab handmatig wilt openen:

  1. Bewerk crontab met een eenvoudige tekst editor zoals “VI” of “nano” (globaal niveau: /etc/crontab  of /etc/config/crontab , of gebruikersniveau: ~/.crontab ).
  2. Laat cron weten dat er veranderingen zijn met crontab /etc/config/crontab,  crontab /etc/crontab of crontab ~/.crontab.

 

OK … nu verder met de echte details …

Geheel op Eigen Risico …! 

Het is eigenlijk niet nodig om het te zeggen, maar ik doe het toch: Denk na bij wat je doet – alles voor eigen verantwoording!

Merk Op:
– Het is aan te raden om met de crontab op gebruikers niveau te werken (~/crontab) maar dat is niet altijd een optie (NAS!).
– Maak altijd een backup van het crontab bestand voor je er in begint te prullen!

Locatie van het Crontab bestand

De locatie van het crontab bestand is voor de meeste systemen vergelijkbaar en zeker niet moeilijk te bepalen. Als je echter verder leest zul je ontdekken dat de locatie van het bestand niet echt belangrijk hoeft te zijn …

Linux gebaseerde systemen

Als eerste moet je bedenken dat Linux een multi-user systeem is en dus twee niveaus ziet: Globaal (voor het gehele systeem) en per Gebruiker (voor individuele gebruikers).

Globale cron taken zijn bijvoorbeeld rommel opruimen, klok bijstellen, etc.

Globaal/etc/crontab of /etc/config/crontab.

Op gebruikersniveau praten we over taken die een individuele gebruiker automatisch wilt laten uitvoeren, zoals email ophalen, of een taak die we liever snachts laten lopen omdat het te veel resource trekt …

Gebruiker specifiek~/.crontab

Network Attached Storage apparaten 

Bedenk dat de meeste betere NAS apparaten zoals van QNAP of Synology ook onder Linux draaien.

Voor deze apparaten werkt Cron natuurlijk ook, maar hier kijken we meestal naar globaal niveau, en je zult SSH moeten gebruiken om bij de shell te komen (bijvoorbeeld via “ssh admin@<NAS IP Address>” of een programma zoals PuTTY).

Op een QNAP vindt je crontab hier: /etc/config/crontab.

MacOS X

Ook MacOS X ondersteund cron – het is uiteindelijk ook gebaseerd op een Linux variant, of beter gezegd: FreeBSD variant.

Voor de Mac wordt echter een handmatig aangemaakte /etc/crontab,  mogelijk automatisch verwijderd na het herstarten van de computer, tenzij je sudo touch /etc/crontab  toepast.

Er wordt gezegd dat de gebruiker specifieke crontab (~/.crontab) werkt als verwacht.

Windows

Microsoft Windows gebruikt Cron NIET. De Windows Task Scheduler vervult en vergelijkbare taak maar is natuurlijk niet compatibel met Cron. Wil je echter Cron onder Windows gebruiken, kijk dan eens naar de gratis CronW (werkt misschien niet onder nieuwere Windows versies) of PyCron,.

Crontab Bewerken

Verschillen in Cron Implementaties 

Er is werkelijk een enorme hoeveelheid aan Cron variaties en natuurlijk werken ze niet allemaal exact hetzelfde..
Door de verschillende implementaties zijn er natuurlijk bepaalde niet echt “standaard” (voor zover er überhaupt een standaard is), zoals het gebruik van het vraagteken of de optie om het jaar als veld toe te voegen.

In dit artikel laten we de exotische opties buiten beeld. Mocht je meer willen weten, raadpleeg dan de website van de ontwikkelaar of kijk in handleiding op de computer d.m.v. het man commando:

man cron
man crontab

Crontab Openen

Crontab is een standaard platte tekst bestand, di je kunt bewerken met een simpele tekst editor zoals bijvoorbeeld “VI” of “nano“, beiden zijn op Linux gebaseerde systemen te vinden.

Je kunt dus de crontab handmatig openen met: nano /etc/crontab
Of, wat veel beter is, je kunt het bestand openen via Crontab zelf: crontab -e

De tweede optie, crontab zelf crontab laten openen, is veel beter en bespaard je de zoektocht naar het juiste crontab bestand.

“crontab -e” … Kies jouw eigen editor … 

Het statement “crontab -e” gebruikt vaak standaard het programma “VI“, maar waarom zouden we “VI” gebruiken als de gewenste editor via de omgevingsvariable EDITOR kunnen opgeven? Ik gebruik zelf veel liever een programma zoals “nano“.

Het e.e.a. hangt wel een beetje van de shell die je beruikt …
Merk op dat Bash de meeste gebruikte shell is voor system die Linux, Unic, of FreeBSD gebaseerd zijn – inclusief de Mac.

Bashexport EDITOR=nano

C-Shellsetenv EDITOR nano

Voor bepaalde Cron versies, bijvoorbeeld voor BusyBox gebruikers, moeten we de omgevingsvariabele VISUAL gebruiken. Zie regel 319 in de BusyBox code als voorbeeld. Bedenk ook dat Busybox een van de meest gebruikte tools is, je vindt het in: NAS apparaten (zoals QNAP), Routers, Modems, Mobiele toestellen zoals telefoons en tablets, satelliet ontvanges en kabel TV boxen, etc.

Busyboxexport VISUAL=nano

Tip : Als je niet precies weet wat gaat werken voor jouw computer of apparaat, probeer ze gewoon 1-voor-1 en kijk welke editor geopend wordt als je crontab -e  uitvoert.

Crontab Regels

Elke regel in crontab representeert een geplande taak, welke elk opgebouwd zijn uit 6 of 7 parameters die met spatie gescheiden zijn.

De optionele waarde, de gebruikersnaam, kan geplaatst worden tussen de “DagVanDeWeek” en “Commando” parameter die er voor zorgt dat een taak onder de naam van een gebruiker wordt uitgevoerd. Ik heb het zelf nooit (direct) gebruikt …

De eerste 5 parameters hebben betrekking op de timing, gevold door de optionele gebruikersnaam en natuurlijk het verplichte commando, commando’s of script wat uitgevoerd moet gaan worden.

Tip : Er is een behoorlijk aantal zogenaamde “cron generators” online beschikbaar, maar ik moet eerlijk zeggen dat ze allemaal met hun gebreken komen. Het geeft je echter een goede start als je iets wilt uitproberen. Een van de beter generators is die van EasyCron.

Algemeen formaat:

Minuten   Uren   DagVanDeMaand   Maand   DagVanDeWeek   Gebruikersnaam   Commando

Toegstane waarden
Parameter Waarden Alternatief Opmerkingen
Minuten 0 – 59
Uren 0 – 23 Gebruik 24-uur notatie!
DagVanDeMaand 0 – 31
Maand 0 – 12 JAN – DEC
DagVanDeWeek 0 – 6 SUN – SAT 0 = Zondag, 6 = Zaterdah
Gebruikersnaam Optioneel – Naam van de uitvoerende gebruiker
Commando Correct shell commando

Als een voorbeeld kijk eens naar de volgende crontab regel welke een backup script (/bin/backup.sh ) iedere nacht om 0:30 in de ochtend uit laat voeren:


30 0 * * * /bin/backup.sh

Speciale Tekens

In het voorbeeld zag je al een eerste speciale teken welke we kunnen gebruiken om de parameters extra aan te kunnen passen.
De volgende speciale tekens kunnen gebruikt worden voor de tijd gerelateerde parameters:

Speciale Tekens
Teken Lees als
* Sterretje Elke (allemaal)
/ Schuine Streep Stap grootte (elke)
, Komma En (lijst)
Min-teken Tot (range)
• Sterretje – Elke (allemaal)

We kunnen de “*” bijvoorbeeld gebruiken in de Month parameter, waar het dan “elke maand” betekend.

Tip : Een veel voorkomende fout met de “*” is dat men het sterretje alleenstaand gebruikt in de Minuten parameter – hierdoor wordt er misschien ongewenst iedere minuut een taak gestart, wat dus ongewenste systeem belasting kan veroorzaken.

• Schuine Streep – Stap Grootte (elke)

De “/” is vooral handig voor patronen.

Bijvoorbeeld: */2 in de DagVanDeMaan parameter wil zeggen dat we “elke tweede dag“.
Zo ook met */5 in de Minuten parameter, wat wil zeggen: “elke 5 Minuten“.

• Komma – En (Lijst)

Met de komma kunnen we een lijst opgeven …

Bijvoorbeeld 1,10,20 voor DagVanDeMaand wil zeggen dat we het commando willen laten uitvoeren op de “1ste, 10de, en de 20ste dag van de maand“.

• Min-teken – Tot (Range)

Het maken van een lijst van opvolgende nummers moet natuurlijk makkelijker kunnen en dat is precies waar we het min-teken kunnen gebruiken.

Als we 1-5 voor DagVanDeWeek opgeven, dan wordt het commando op “Dag 1 tot en met 5 van iedere week” uitgevoerd, in andere woorden “Maandag (1), Dinsdag (2), Woensdag (3), Donderdag (4) en Vrijdag (5) van ieder week“.

Extra speciale tekens (niet voor alle parameters)

Voor een aantal parameters zijn er nog een aantal extra speciale tekens die we kunnen gebruiken …

• Laatste

Voor zowel DagVanDeMaan als DagVanDeWeek kunnen we “L” gebruiken als indicatie voor “Laatste“.

Voorbeeld:
3L voor DagVanDeWeek wil zeggen “Laatste Woensdag van de maand“,
L voor DadVanDeMaand wil zeggen “laatste dag van de maand“.

• Dichtstbijzijnde Werk Dag

DagVanDeMaand gevolgd door een “W” geeft de “dichtsbijzijnde Werk dag” aan.

Voorbeeld:
10W voor DayOfMonth wil zeggen “dichtsbijzijnde week dag van de 10de dag in de maand“.
Als dus de 10de een Zondag is, dan wordt de taak gestart op Maandag de 11de, als de 10de echter een Zaterdag is, dan wordt de taak op Vrijdag de 9de af gedraaid.

• Xde Weekdag van de Maand

DagVanDeWeek heeft de optie om met een “#” (hekje, hash of pound) de “Xde weekdag van de maand“.
Het hekje na een weekdag nummer, moet gevolgd worden door een een nummer, 0 – 5, welke aangeeft de hoeveelste keer deze weekdag in de maand voorkwam.

Voorbeeld:
6#3 wil zeggen “de 3de Vrijdag (6 = Vrijdag) van de maand“.

• Nieuwe Regel of Carriage return

In de Commando parameter, wordt een “%” als een “nieuwe regel” (of een carriage return) karakter (tenzij er een schuine streep voor geplaatst wordt).

Een veel voorkomende fout is dat men nij commando’s die op zichzelf al een procent teken hebben, men vergeet een schuin streepje te zeggen (escapen) voor het procent teken zoals hier aangegeven: “\%“.
Ieder procent symbool wordt vervander door een nieuwe regel als er geen schuine streep voor staat!

Voorbeelden

Zoals je uit de voorgaande voorbeelden misschien hebt kunnen zien: legio combinaties zijn mogelijk voor het instellen van een tijdstip of interval.

Hieronder een paar voorbeelden:

Crontab Voorbeelden
Crontab line What it does
0 */2 * * * /bin/backup.sh Run backup.sh elke dag op elk even uur
Hier worden all uren (* = 1 tot 24) gebruikt, dus hebben we even uren.
0 1-23/2 * * * /bin/backup.sh Run backup.sh elke dag op elk oneven uur
We hebben hier de uren beperkt tot 1 tot 23 waardoor we oneven krijgen.
*/15 * * * * /bin/backup.sh Run backup.sh elke 15 minuten
0 */6 * * * /bin/backup.sh Run backup.sh elke 6 uur
0 0 * * 2 /bin/backup.sh Run backup.sh om middernacht op elke Dinsdag (2)
0 12 1-15,17,20-25 * * /bin/backup.sh Run backup.sh om 12 uur ’s middags, op de 1st t/m de 15de, de 17de, en de 20st t/m de 25ste van elke maand
* 12 10-16/2 * * /bin/backup.sh Run backup.sh om 12 uur ’s middags, op de 10de, 12de, 14de en 16de van elke maand
* 12 10,12,14,16 * * /bin/backup.sh Dit is hetzelfde als de voorgaande: Run backup.sh om 12 uur ’s middags, op de 10de, 12de, 14de en 16de van elke maand
0 0 * * 0,6 /bin/backup.sh Run backup.sh elke middernacht in elke weekend (Zondag = 0 en Zaterdag = 6)
30 12 * * 1-5 /bin/backup.sh Run backup.sh elke werkdag om half 1 ’s middags (12:30, Maandag =1, Vrijdag = 5)
0 5 1 */3 * /bin/backup.sh Run backup.sh elke eerste dag van het kwartaal (3 maanden) om 5 uur ’s morgens (5:00)
0 0 22 10 * /bin/happybirthday.sh Run happybirthday.sh elke 22st Oktober van het jaar om middernacht.

Voorgedefinieerde @ Afkortingen

Cron kent ook een aantal handige afkortingen:

Cron afkortingen
 Afkorting Toepassing
@reboot Commando uitvoeren als de computer or Cron herstart
@daily  Commando uitvoeren dagelijks om middernacht
@midnight  Hetzelfde als @daily – Commando dagelijks uitvoeren om middernacht
@weekly  Uitvoeren op elke Zondag om middernacht
@monthly Uitvoeren om middernacht op elke 1st dag van de maand
@yearly Uitvoeren om middernacht op elke 1st dag van het jaat (1 Januari)
@annually Hetzelfde als @yearly

Een voorbeel dat /bin/backup.sh elke dag om middernacht uitvoert:


@daily /bin/backup.sh 

Omgevingsvariabelen

In Cron kunnen we een aantal omgevingsvariabelen definiëren. Ik gebruik ze zelf zelden (om verwarring te voorkomen).

Deze variabelen moeten als eerste in crontab gedefinieerd worden zodat Cron ze kan zien voor het uitvoeren van commando’s.

Cron Variabelen
Variable Voorbeeld Doel
SHELL SHELL=/bin/bash Instellen welke Shell Cron moet gebruiken
PATH PATH=/usr/bin:/bin:/usr/sbin Instellen van het zoekpad voor Cron
HOME HOME=/ Instellen van de “thuis” directory van Cron
MAILTO MAILTO=root Instellen wie de output als email gaat ontvangen

eMail me de resultaten

Zoals je hierboven zag: we kunnen Cron een email laten sturen met de output resultaten.

We kunnen dit op twee manieren doen.
Als eerste door direct naar een gebruiker te sturen:


MAILTO=root

Of (afhankelijk van de Cron implementatie en systeem configuratie) naar een email adres:


MAILTO="me@home.com"

Output – Naar een file of gewoon weggooien …

Output van individuele commando’s kunnen naar een specifiek bestand gestuurd worden.
In onderstaand voorbeeld wordt /bin/test.sh  elke dag om middernacht uitgevoerd en de output wordt in het bestand /etc/test.txt gedumpt.


0 0 * * * /bin/test.sh > /etc/test.txt

Output kan ook gedempt worden, of in andere woorden, simpel weg gegooid worden.


0 0 * * * /bin/test.sh >/dev/null 2>&1

Aanvullende Informatie

http://www.unixgeeks.org

https://help.ubuntu.com

http://www.markus-gattol.name

http://www.easycron.com

http://en.wikipedia.org/wiki/Cron

http://wiki.gentoo.org/wiki/Cron

Donatie Opties


Donaties worden zeer gewaardeerd, maar zijn zeker niet vereist. Donaties worden gebruikt voor het dekken van kosten voor web-hosting en project materialen, en eventueel voor een drankje of een snack. Voor wie al gedoneerd heeft: Hartelijk dank! Het is werkelijk geweldig om te zien dat men onze artikelen en applicaties waardeert.

Reacties


Er zijn 2 reacties welke je hieronder kunt lezen.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een opmerking plaatsen door op de "Reageer" knop te klikken.

  • 4 okt 2015 - 18:32 Reactie Link
    PingBack: www.tweaking4all.nl

    […] deze functie willen draaien zodra een pagina geladen wordt (meer geavanceerde gebruikers kunnen een Cron job […]

  • 14 mrt 2016 - 14:43 Reactie Link
    PingBack: www.tweaking4all.nl

    […] deze functie willen draaien zodra een pagina geladen wordt (meer geavanceerde gebruikers kunnen een Cron job […]



Jouw Reactie ...

Vriendelijk verzoek om hier geen lange teksten te plaatsen (zoals source codes, log files of config files). Gebruik daarvoor het Forum.

Deel met anderen:
*
*
Houd me op de hoogte van nieuwe reacties (email).
       Gebruik jouw RSS reader om reacties te volgen.


Tweaking4All uses the free Gravatar service for Avatar display.
Tweaking4All zal nooit jouw email adres met anderen delen.