Een huishoudelijke taak met cron

Een systeem up to date houden is een dagdagelijkse taak, wat nog rap eens wordt uitgesteld. Een van die vervelende taken is het bijhouden van de log bestanden. Wist je dat jouw Linux systeem alle sporen bewaard van veel uitgevoerde taken, zowel van het systeem zelf als van de gebruikers ? Deze sporen worden opgeslagen in de overbekende log bestanden. Een logbestand is een tekstbestand waarin wordt geschreven door een applicatie. Nemen we nu eens een voorbeeld van zo'n log bestand. Bij het opstarten van een Linux systeem worden talrijke gegevens naar het scherm geprint, maar aangezien dat alles in een vlug tempo gebeurt, wie heeft er de kans om dat allemaal te lezen ? En wie heeft er nooit een angstgevoel gekend als hij ergens een regel zag voorbij gaan met het woordje failed in ? Wel, al deze berichten worden netjes opgeslagen in een log bestand, dat je achteraf op je gemak kunt nalezen.

Die logbestanden zijn van groot belang voor een unix systeem, want daarin kan men de goede werking van een systeem volgen.

Jouw Linux systeem is een unix systeem ( voor het geval je het nog niet moest weten ), en waarschijnlijk ben jij de enige gebruiker van je systeem en ben je dan ook automatisch administrator van jouw systeem.

Onderhoud : nu of nooit

Linux is een stabiel besturingssysteem, dat administrator taken op het eerste gezicht niet echt nodig blijken tezijn, voorl omdat Linux vaak wordt geinstalleerd op PC's die door slechts 1 persoon worden gebruikt, en wie heeft er nu behoefte aan om zichzelf te controleren ?

Eenmaal alles geinstalleerd en het systeem is up and running, kan men zich gewoon verder van niets aan trekken, maar die log bestanden waar we het over hadden, zullen steeds groter worden, aangezien er steeds maar informatie wordt bijgeschreven in die bestanden. Elke keer dat je je systeem opstart, wordt er in het opstart logbestand steeds maar gegevens bijgeschreven, na de gegevens die er al in stonden. Als je een gewone Linux installatie hebt gedaan ( workstation ), worden die bestanden bewaard in de root directory, die over het algemeen klein wordt gehouden. Aangezien die bestanden continue blijven groeien, bestaat de kans dus dat je root partitie vol raakt, wat nefast is voor het systeem en waarmee zelfs een ervaren gebruiker moeilijkheden zal hebben om het systeem weer in orde te stellen.

Een cron voor de veiligheid

We zullen nu verder zien hoe we de cron daemon kunnen gebruiken om die logbestanden in normale proporties te houden, zonder dat er belangrijke gegevens verloren gaan. We zullen dus cron periodiek opstarten en een shell script laten uitvoeren, die voor ons slechts de 200 laatste lijnen van een logbestand bewaard. Zo zal het dan mogelijk zijn om een log bestand te raadplegen, en zullen we ons geen zorgen moeten maken over het feit dat dit logbestand buitengewone afmetingen gaat aannemen en zodoende de root directory gaat verzadigen.

De meest courante log bestanden

Laten we eens zien welke log bestanden er op ons systeem aanwezig zijn die onze speciale aandacht verdienen.

/var/log/boot.log

Dit logbestand bezit informatie omtrent het opstarten van de computer. Dit is een bestand dat rap groter wordt, aangezien er bij iedere start van het systeem er ongeveer 40 regels worden bijgeschreven.

/var/log/messages

Dit logbestand bezit eveneens informatie over het opstarten van de computer en groeit evenveel als zijn voorganger.

/var/log/maillog

Dit logbestand bevat informatie over alle mail die intern wordt verstuurd. Op een stand-alone pc zal dit bestand niet al te snel groeien, maar eenmaal de pc op een netwerk aangesloten, kan dat rap veranderen, waarom dan niet als voorzorg dit bestand ook opnemen ?

/root/.bash_history

Dit logbestand bevat informatie over alle commando's die je intypt in een terminal venster als superuser. Het is dat bestand dat je toelaat om de pijltjestoetsen te gebruiken om voorafgaande commando's terug op te roepen.

/home/user/.bash_history

Idem als hierboven, maar dan op user niveau.

/var/log/cron

Dit is het logbestand van de cron daemon. Op een systeem waar de cron daemon aktief is, zal dit bestand gestadig groeien. En aangezien wij cron ook zullen gebruiken, zal het logbestand met 1 regel groter worden, telkens als hij onze cron opdracht zal uitvoeren.

We gaan nu een configuratie script schrijven. Open een teksteditor en voeg toe

/var/log/boot.log

/var/log/cron

/var/log/maillog

/var/log/messages

/root/.bash_history

/home/naam_user/.bash_history

Sla dit bestand vervolgens op in de dir /etc als cleantab

Kijk nu even als je geen fout hebt gemaakt. Ga naar de dir /etc en geef het commando #:

cat /etc/cleantab.

Als je nu de regeltjes ziet verschijnen dat je zonet hebt ingetikt is alles goed, zoniet heb je de file waarschijnlijk in een verkeerde dir of met een verkeerde naam gesaved.

Nu schrijven we het schell script dat verantwoordelijk zal zijn voor de schoonmaak. Open terug een teksteditor en we tikken :

#!/bin/bash
# 
# Eerst even checken of het bestand cleantab wel aanwezig is op het systeem

if [ ! -e /etc/cleantab ]; then echo "Je moet eerst het bestand /etc/cleantab aanmaken" exit 0 fi # Een tijdelijk bestand aanmaken om de gegevens van het logbestand in op te slaan tijdelijk=$(mktemp /tmp/cleantemp.XXXXXX) # Elke entry in het bestand /etc/cleantab lezen # en slechts te laatste 200 lijnen bewaren van elk bestand for file in $(awk '{ print $0 }' /etc/cleantab) do tail -lines=200 $file > $tijdelijk cat <$tijdelijk >$file done # het tijdelijk bestand verwijderen rm -f $tijdelijk exit 0

Sla dit bestand nu op als cleaner. Dit bestand zal worden uitgevoerd door cron met root rechten. Maak het script uitvoerbaar met het commando :

root #: chmod 744 cleaner

root#: chown root.wheel cleaner

Kopieer vervolgens het script naar de locatie /sbin.

Een taak plannen

Open nu een xterm ( of onder console ) en geef als root het commando :

root # : crontab -e

Typ dan het volgende om te beginnen :

SHELL=/bin/sh

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$HOME/bin

HOME=/var/log

Willen we nu bijvoorbeeld elke dag de cleaner opstarten om 12.30 dan wordt de syntax

30 12 * * * cleaner

Op een bepaalde dag van de week ( de dagen worden genummerd van 0 tot 6 en zondag=0 )

30 12 * * 0 cleaner ( zal de cleaner elke zondag opstarten 12.30 uur )

Op een bepaalde dag van de maand

30 12 1 ** cleaner ( zal de cleaner elke eerste dag van de maand opstarten om 12.30 uur )

Als je nu je editor afsluit zal de cronjob aangemaakt worden.

Van nu af aan zal jouw systeem automatisch de logbestanden binnen de perken houden. Voor de nieuwe Linuxgebruikers zal dit allemaal wel ingewikkeld lijken en zullen ze op de proppen komen met een reden als, onder windows moet ik dat allemaal niet doen.

Men moet dan wel de syntax even aanpassen, onder windows kan ik dat niet doen. Dit is het geval met het register van windows. Microsoft raadt aan daar niet aan te komen, het gevolg is dat het register steeds maar blijft groeien tot de saturatie drempel is bereikt, en dan beginnen de problemen waar er zogezegd geen waren. Remedie, windows herinstalleren. Linux daarentegen is in staat zichzelf te onderhouden en kan proper blijven gedurende lang intensief gebruik.




made with bluefish