Freitag, 1. Mai 2009

Linux automatisieren

Linux automatisieren

Administrationsaufgaben wiederholen sich oft:

*
System-Backups
*
Temporärdateien löschen
*
Antiviruschecks, etc.

Automatisierung dieser Aufgaben mit cron. Einmaliges Ausführen zu einem Zeitpunkt mit at.
Automatisierung mit cron

Für jeden Benutzer wird eine Liste von Befehlen zusammen mit den Zeitpunkten ihrer Ausführung verwaltet, die Cron-Tabelle, kurz crontab.

Ein Daemon-Prozess (crond) überprüft diese Tabellen jede Minute und führt die Befehle aus.

Der crontab-Befehl

Um die crontab zu verwalten existiert ein gleichnamiger Befehl:

crontab [optionen]

-l listet Tabelle auf

-r löscht crontab

-u benutzer verwendet crontab von benutzer (nur für root)

-e crontab verändern verwendet vi oder VISUAL

Beispiele: # crontab –l –u edp

zeigt Cron-Tabelle von Benutzer edp

# crontab –e

Ändern der eigenen crontab
Die crontab-Datei

Pro Zeile ein cron-Job

Kommentarzeilen möglich (#)

Pro Zeile 6 Felder (Leerzeichen = Trenner)

Minute Stunde Monatstag Monat Wochentag Befehl

1 2 3 4 5 6

Crontab-Felder

Nr Feldname mögliche Werte

1 Minute 0-59

2 Stunde 0-23

3 Monatstag 1-31

4 Monat 1-12 oderjan, feb, mar,…,dec

5 Wochentag 0-6 oder sun,mon,…,sat

Beispiel

28 07 * * * meinprogramm

Führt das Programm meinprogramm um 07:28 aus.

Das * steht für alle erlaubten Werte dieses Felds. Listenangaben möglich; Bereiche möglich

Beispiel

*/8 * * * * meinprogramm

Führt das Programm meinprogramm alle 8 Minuten aus.

Beispiel

30 9,12,15 * * mon-fri meinprogramm Ausführung von Montags bis Freitags um 9.30h, 12.30h und 15.30h

crontab-Zugriff sperren

Benutzerzugriff sperren/erlauben:

/etc/cron.allow und /etc/cron.deny

Pro Zeile ein Benutzer.

cron.allow vorhanden

Nur dort eingetragene Benutzer dürfen Cron benutzen.

cron.deny vorhanden

Nur dort nicht eingetragene Benutzer dürfen Cron benutzen.

Keine von beiden vorhanden? Jeder Benutzer darf Crons anlegen.

Die Systemcrontab

System-Cron-Tabelle unter: /etc/crontab

Wird direkt editiert (kein crontab –e !)

Zusätzliches 7. Feld: Benutzerkennung (unter der der Befehl ausgeführt wird)

Beispiel:

00 12 01 04 * edp make_jokes

crontab-Tipp!

Erinnerungshilfe für das Format der Zeitangaben!

Folgende Kommentarzeile in die eigene crontab aufnehmen:

# 0-59 0-23 1-31 1-12 0=sun-6=sat Befehl

Der at-Befehl

Um einen Befehl genau einmal zu einem bestimmten Zeitpunkt auszuführen verwendet man das at-Kommando.

Aufruf:

at uhrzeit

at –f befehlsdatei uhrzeit

Führt Befehle zur angegebenen Uhrzeit aus. Die Befehle werden interaktiv eingegeben oder in die Befehlsdatei geschrieben.

Beispiele

# at 13:45

find / -iname „*.bak“
ls -al /tmp
(STRG-D)

# at –f befehle.sh 13:45

Mögliche Zeitangaben:

HH:MM z.B. 10:45

HH:MM TT.MM.JJ z.B. 12:00 11.04.2004

now

now + mm minutes

now + hh hours

now + dd days

now + ww weeks

Beispiele

# at 11:45 startet die eingegebenen Befehle am heutigen Tag um 11:45

# at 09:00 3.7.05 startet die Befehle um 9 Uhr am 3.7.2005

# at now + 10 minutes startet die Befehle in 10 Minuten

at-Job Verwaltung

at-Jobs auflisten (at-queue) atq

at-Jobs löschen (at-remove) atrm job-nummer

Die job-nummer erhält man vorher über das atq-Kommando.

at-Zugriff sperren

Benutzerzugriff sperren/erlauben:

/etc/at.allow und /etc/at.deny

Pro Zeile ein Benutzer.

at.allow vorhanden

1.
> Nur dort eingetragene Benutzer dürfen

at.deny vorhanden

1.
> Nur dort nicht eingetragene Benutzer dürfen

Keine vorhanden

1.
> Nur der Systemadministrator root darf

Wohin mit der Ausgabe?

Kommandos, die über cron/at gestartet werden haben kein Terminalfenster zur Ausgabe. → Die Ausgabe der Befehle wird per Email zugeschickt.

Probleme ergeben sich bei…

* langen Ausgaben

* häufiger Ausführung

Lösung: Ausgabe unterdrücken oder in Datei umlenken (Programmoption oder Shell-Umlenkung >)

Beispiel (crontab-Eintrag):

00 12 * * * find / -iname „*.tmp“ >/tmp/meineFindAusgabe.txt

Leitet die (lange) Ausgabe des find-Befehls in die angegebenen Datei um und sendet sie nicht als Email an den Benutzer.

Umgebungsvariablen

Programme sind oft auf Umgebungsvariablen angewiesen. Besonderer Fall PATH sorgt dafür, dass ein Programm gefunden wird.

Problem: Programmdatei in der cron-Tabelle muss gefunden werden

Lösung: PATH-Variable (bzw. andere Umgebungs-variable) explizit vorher setzen.

Beispiel

Eigenes Skript in /home/edp/skripte/backup_db

crontab-Eintrag 00 12 * * * backup_db

→ Fehler weil backup_db nicht im Suchpfad

Lösung:

crontab-Eintrag 00 12 * * * /home/edp/skripte/backup_db

oder

00 12 * * * PATH=/home/edp/skripte:$PATH;backup_db