• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Problem mit Befehl in crontab

Guten Tag!

Ich verwende das Netzwerkmonitoringprogramm nagios und würde mir gerne mit Hilfe des Plugins check_nagios und cron, automatisch E-Mails, bezüglich des Zustands des Prozesses nagios, zukommen lassen. Im nagios Forum hab ich leider noch keine Antwort erhalten, deshalb versuch ich es hier nochmal und hoffe, dass ihr mir helfen könnt.
Folgendes habe ich mir zusammengebastelt:
Code:
date > /home/nagios/test.mail | /usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios >> /home/nagios/test.mail | cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at

Wenn ich das in der Konsole ausführe, dann erhalte ich ein E-Mail mit zB. folgendem Inhalt:
Code:
Tue May 19 15:35:01 CEST 2009
NAGIOS OK: 4 processes, status log updated 0 seconds ago

Wenn ich diesen Befehl mit Hilfe von cron ausführen lasse, erhalte ich ein E-Mail mit folgendem Inhalt:
Code:
Tue May 19 15:35:01 CEST 2009

Wenn ich mir aber nach dem ausgeführten cronjob die Datei /home/nagios/test.mail ansehe, sieht sie wiederum so aus:
Code:
Tue May 19 15:35:01 CEST 2009
NAGIOS OK: 4 processes, status log updated 0 seconds ago

Hat jemand eine Erklärung dafür, warum ich im E-Mail, dass mit Hilfe des cronjobs automatisch versendet wird, die Ausgabe von check_nagios nicht sehe, obwohl der Inhalt der Datei /home/nagios/test.mail aktualisiert wird? Bzw. hat jemand eine elegantere Methode wie man das lösen kann?

Vielen Dank schon mal für eure Antworten!

Viele Grüße,

noms
 
A

Anonymous

Gast
noms schrieb:
Hat jemand eine Erklärung dafür, warum ich im E-Mail, dass mit Hilfe des cronjobs automatisch versendet wird, die Ausgabe von check_nagios nicht sehe, obwohl der Inhalt der Datei /home/nagios/test.mail aktualisiert wird? Bzw. hat jemand eine elegantere Methode wie man das lösen kann?

Code:
date > /home/nagios/test.mail | /usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios >> /home/nagios/test.mail | cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at

Das ganze Befehlskonstrukt ist falsch. Hier werden Befehle die keinerlei Ausgabe mehr machen über Pipe verknüpft.

Code:
date > Datei  ..... Hier kommt nicht was ich über Pipe verbinden könnte
Befehl >> Datei  ...... Hier kommt auch nichts mehr was ich pipen könnte.

Durch die falsche Verknüpfung der Befehlskette ist nicht sichergestellt, das bei dem anschließendem
Code:
..... | cat Datei | mailx ......
die Datei schon die Daten enthält die du gerne hineinschreiben würdest. Wenn du später nachschaust, dann sind sie da, denn wenn sich das mailx beendet, dann wird die Datei abgeschlossen und ist dann garantiert vollständig, aber nicht mit Sicherheit schon vor her.

Schau mal in die Manpage von Bash wie man zB Befehle richtig gruppieren oder verknüpft. zB ; , && , || , () , {} , oder auch Schleifenkonstrukte und vieles andere mehr ist möglich.

Als Anfänger ist es aber besser das Ganze erst einmal als kleines Script sauber zu schreiben.
Befehlsgruppe für Befehlsgruppe sauber auf getrennten Zeilen, und dann dieses Script über Cron starten. Da ist dann auch so viel Übersicht drin, das du in 4 Wochen auch noch erkennen kannst, was dort eigentlich passiert.

robi
 
Hi robi!

Vielen Dank erstmal für Deine Antwort! Ich würde mich gerne mit dem Thema Shellskripting auseinandersetzen, hab mich bisher aber erfolgreich davor gedrückt! :D

Kennst Du empfehlenswerte Lektüre zu diesem Thema? Im Netz oder auch in Form eines Buches?

Beste Grüße,

Christian
 
A

Anonymous

Gast
noms schrieb:
Ich würde mich gerne mit dem Thema Shellskripting auseinandersetzen,
Ein Script ist im einfachsten Fall nur eine Auflistung von Befehlen wie du sie in der Konsole zur Erledigung irgend einer Aufgabe eigeben würdest

Am besten in der ersten Zeile eine "kleine Überschrift" ;) ( hier erstmal nur die Bedeutung dieser ersten Zeile: die ist das der Rechner später weiß mit welchem Programm er das Script ausführen soll)
Code:
#!  /bin/bash
#Dann anschließend deine Befehle, genauso wie du sie in der Konsole eingeben würdest 
#für Cron am besten mit volle Dateipfade
#wenn du gerne einen Kommentar einfügen willst, damit du später auch noch erkennst für was das Script
#mal gedacht war, einfach vorne ein "#" dahinter ist dann alles Kommentar und wird beim Ausführen 
#ignoriert
date > /home/nagios/test.mail 
/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios >> /home/nagios/test.mail
cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at
Das ganze als eine Datei abspeichern, Namen könnte in deinem Fall zB sein /usr/local/bin/nagios-mail.sh
Jetzt nur noch die Auführungsrechte darauf, also zB so hier
Code:
chmod 744 /usr/local/bin/nagios-mail.sh

Schon ist das Script fertig. Wenn du diesen genau diesen Dateinamen in diesem Verzeichnis genommen hast wie
ich es oben vorgeschlagen habe, dann würde ein
Code:
nagios-mail.sh
als root ausgefuhrt zum Testen schon ausreichen, Ist das Script nicht in einem Verzeichnis der in deiner PATH-Variable ist
musst du es mit vollem Pfad aufrufen, oder erst ins Verzeichnis wechseln also dann so hier
Code:
cd /Ver/zeich/nis/
./nagios-mail.sh
Wenn es funktioniert dann einfach in der crontab eintragen zB
Code:
00 12 * * * /usr/local/bin/nagios-mail.sh

Fertig ist die ganze Scripterei, damit bist noch kein Profi, aber hast die erste Lektion schon erfolgreich abgeschlossen

Literatur :???: na blos nichts großes so was reicht für den Anfang http://www.pro-linux.de/work/shell/index.html ansonsten mal hier
etwas stäbern, http://www.linux-club.de/viewtopic.php?f=21&t=12705 (einige Links sind allerdings schon verweist.)

robi
 
Hi robi!

Vielen, lieben Dank für Deine Hilfsbereitschaft!

Ich habe mich nun, nach Deiner ersten Antwort, ein bisschen mit den man Pages von bash auseinander gesetzt und die Befehle neu verknüpft! Es funktioniert nun auch mit dem cronjob, ich habe aber nicht die geringste Ahnung ob das, was ich da gemacht habe richtig, oder eher ein Verbrechen bzw. Zufall ist, dass es nun funktioniert:
Code:
(date ; /usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios) > 
/home/nagios/test.mail && cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at

Kannst Du mir sagen, was ich da gemacht habe und ob das so korrekt wäre, oder ob das ein Blödsinn ist, was ich da gemacht habe? :???:

Daraufhin habe ich diesen Befehl noch erweitert, aber das funktioniert nun wieder nicht:
Code:
(date ; 
/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios ; /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 ;
/usr/local/nagios/libexec/check_users -w 20 -c 50 ;
/usr/local/nagios/libexec/check_http -H localhost ;
/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5 ;
/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p / ;
/usr/local/nagios/libexec/check_ssh -H localhost -p 2323;
/usr/local/nagios/libexec/check_swap -w 20 -c 10 ;
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > 
/home/nagios/test.mail && cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at

Ich wusste nicht, dass man das mit einem Skript so einfach lösen kann! Die Skripte, die ich bis jetzt gesehen habe ähnelten mehr einer Programmiersprache mit Schleifen und was es da so gibt! :schockiert: Ich finde es klasse, dass man auf diese Art und Weise auch Befehle nacheinander ausführen kann!

Das hier versteh ich leider noch nicht ganz:
Ist das Script nicht in einem Verzeichnis der in deiner PATH-Variable ist
musst du es mit vollem Pfad aufrufen, oder erst ins Verzeichnis wechseln also dann so hier

Vielen Dank für Deine Hilfe! Ich werde mir das alles noch genauer zu Gemüte führen und mal Deine geposteten Links durchstöbern!

Beste Grüße,

noms
 
A

Anonymous

Gast
noms schrieb:
Das hier versteh ich leider noch nicht ganz:
Ist das Script nicht in einem Verzeichnis der in deiner PATH-Variable ist
musst du es mit vollem Pfad aufrufen, oder erst ins Verzeichnis wechseln also dann so hier
Es gibt wenn du als User angemeldet bist in deiner Bash-Umgebung eine Variable die nennt sich "PATH" in ihr befinden sich Verzeichnissnamen mit ":" getrennt. Wenn du einen Befehl eingibst, dann sucht die BASH all die Verzeichnisse ab, ob es dort eine solche ausführbare Datei mit diesem Namen gibt, wenn ja, wird sie gestartet, wenn nein dann kommt der Fehler
Code:
-bash: BEFEHL: command not found
den Inhalt dieser Variable kannst du dir auch anschauen mit dem Kommando
Code:
 echo $PATH

bei Cronjobs gibt es zwar diese Variable auch, aber da ist der Inhalt entweder leer oder es sind nur die aller Wichtigsten Verzeichnisse darin enthalten, das ist auch der Grund warum man in cron-Jobs die Befehle mit vollem Pfad angeben muss. Die Alternative währe dort die PATH Variabel entsprechend deinen Erfordernissen zu setzen.


noms schrieb:
Daraufhin habe ich diesen Befehl noch erweitert, aber das funktioniert nun wieder nicht:
Code:
(date ;
.......
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) >
/home/nagios/test.mail && cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at
hinter dem Umleitungszeichen ">" muss zwingend ein Dateiname kommen sonst gibts Fehler, bei dir kommt dahinter ein Zeilenumbruch.
probier mal
Code:
(date ;
.......
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > /home/nagios/test.mail &&  cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at

Das sollte aber innerhalb der Crontab nicht gehen, da du dort den Befehl in einer Zeile mit dem Zeitschlüssel haben musst.

wenn dir so eine Zeile einmal zu lang wird, dann kannst du auch eine Zeile in mehrere Zeilen schreiben, in dem du die Zeilenumbrüche mit einem "\" einfach "ungültig" machst. (entwertest ist vielleicht der bessere Ausdruck) allerdings muss das "\" wirklich das letzte Zeichen in der Zeile sein, das es auch wirklich den Zeilenumbruch und nicht etwa ein noch folgendes " " ungültig macht.
Code:
(date ;
.......
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > /home/nagios/test.mail && \
cat /home/nagios/test.mail | \
/usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at


robi
 
Dieses:
Code:
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > /home/nagios/test.mail && \
cat /home/nagios/test.mail | \
/usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at
würde ich so schreiben:
Code:
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT | tee  /home/nagios/test.mail | \
/usr/bin/mailx -a 'From: "Nagiosrechner" <nagios@yahoo.de>' -s "** Infomail **" noreply@gmx.at
tee dupliziert den Stream in die Datei. Mit "-a" würde an die Datei angehängt.
Ist übrigens auch sehr praktisch zum "debuggen" in langen pipe-Ketten.
Haveaniceday.
 
Hi robi!

Ich lerne wirklich viele, essentielle Dinge hier bei Dir, in diesem Thread! Danke nochmal für Deine Hilfe!

Ich habe nun mal folgenden Crontab eingerichtet (alles in einer Zeile, ohne Zeilenumbrüche):
Code:
26 21 * * * (date ; /usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios ; /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 ; /usr/local/nagios/libexec/check_users -w 20 -c 50 ; /usr/local/nagios/libexec/check_http -H localhost ; /usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5 ; /usr/local/nagios/libexec/check_disk -w 20 -c 10 -p / ; /usr/local/nagios/libexec/check_ssh -H localhost -p 2323 ; /usr/local/nagios/libexec/check_swap -w 20 -c 10 ; /usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > /home/nagios/test.mail && cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagios" <nagios@yahoo.de>' -s "*** Prozessstatus Nagios ***" noreply@gmx.at

Leider klappt das nicht! Nachdem der cronjob ausgeführt wird, bekomme ich folgende Mail zugestellt:
Code:
Subject: Cron <nagios@nagios> (date ; /usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios ; /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 ; /usr/local/nagios/libexec/check_users -w 20 -c 50 ; /usr/local/nagios/libexec/check_http -H localhost ; /usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80
Content-Type: text/plain; charset=UTF-8
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/nagios>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=nagios>
Message-Id: <20090521192601.807161755A2@nagios>
Date: Thu, 21 May 2009 21:26:01 +0200 (CEST)
Status: RO

/bin/sh: Syntax error: end of file unexpected (expecting ")")

Wenn ich einen crontab mit den entwerteten Zeilenumbrüchen eingebe:
Code:
35 21 * * * (date ; \
/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios ; \
/usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 ; \
/usr/local/nagios/libexec/check_users -w 20 -c 50 ; \
/usr/local/nagios/libexec/check_http -H localhost ; \
/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5 ; \
/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p / ; \
/usr/local/nagios/libexec/check_ssh -H localhost -p 2323 ; \
/usr/local/nagios/libexec/check_swap -w 20 -c 10 ; \
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > /home/nagios/test.mail && cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagios" <nagios@yahoo.de>' -s "*** Prozessstatus Nagios ***" noreply@gmx.at

erhalte ich folgende Fehlermeldung:
Code:
crontab: installing new crontab
"/tmp/crontab.uxZG6O/crontab":3: bad month
errors in crontab file, can't install.
Do you want to retry the same edit?

Hat das was mit dem "date" Befehl und dem entwerteten Zeilenumbruch zu tun? :???:

Viele Grüße,

noms
 
A

Anonymous

Gast
noms schrieb:
Hat das was mit dem "date" Befehl und dem entwerteten Zeilenumbruch zu tun? :???:
robi schrieb:
Das sollte aber innerhalb der Crontab nicht gehen, da du dort den Befehl in einer Zeile mit dem Zeitschlüssel haben musst.
Die crontab ist eine Konfigurationsdatei. dort wird Zeilenweise gesucht und da geht das über mehrere Zeilen nicht ob nun mit oder ohne \

noms schrieb:
Ich habe nun mal folgenden Crontab eingerichtet (alles in einer Zeile, ohne Zeilenumbrüche):
Code:
26 21 * * * (date ; /usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios ; /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 ; /usr/local/nagios/libexec/check_users -w 20 -c 50 ; /usr/local/nagios/libexec/check_http -H localhost ; /usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5 ; /usr/local/nagios/libexec/check_disk -w 20 -c 10 -p / ; /usr/local/nagios/libexec/check_ssh -H localhost -p 2323 ; /usr/local/nagios/libexec/check_swap -w 20 -c 10 ; /usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT) > /home/nagios/test.mail && cat /home/nagios/test.mail | /usr/bin/mailx -a 'From: "Nagios" <nagios@yahoo.de>' -s "*** Prozessstatus Nagios ***" noreply@gmx.at


:schockiert: :schockiert: :schockiert: :schockiert: Hilfe wer macht denn sowas :???:
wer soll sich denn da noch auskennen :roll:
Schreib ein Script wie ich es oben gezeigt habe und wenn das auf der Konsole funktioniert dann probierst du es über cron zu starten.

Nur mal so was mir in dieser Zeile sofort aufgefallen ist )
Code:
 > /home/nagios/test.mail && cat /home/nagios/test.mail |
ist vollkommen überflüssig da reicht eine einfache Pipe dafür vollkommen aus.
Code:
......) | /usr/bin/mailx
allerdings hast du dann auch die Datei nicht, dafür brauchst du sie dann aber auch nicht zu löschen wenn du sich nicht mehr haben willst ;)

Aber zu deiner Fehlermeldung, das ist nicht die Mail die du schreiben wolltest, sondern die Mail die cron schreibt weil es eine Ausgabe des Befehles durch einen Fehler gab. Ich würde mal vermuten das die Befehlszeile hier für cron zu lang ist, die Länge ist irgendwo limitiert, aber frag mich nicht wo 256? 360? 512? keine Ahnung.

robi
 
Hallo!

Mal kurz zwei ganz andere Fragen... Du möchtest die Emails von Nagios einer anderen Kiste auf einer weiteren Zentralen Kiste lesen? Oder möchtest du einfach nur dass dir Nagios überhaupt Emails zukommen lässt und versuchst die Nagios eigene Funktion dafür zu umgehen?

Entschuldigt, falls ich da jetzt auf dem Holzweg bin.

Eventuell währe es viel sinnvoller, ggf. die contacts.cfg und contactgroups.cfg anzusehen.

In Nagios gibt es "notify-by-email". Wenn also ein Plugin von Nagios ausgeführt wird, so kann man einem Kontakt der beispielsweise einer Kontaktgruppe für einen bestimmten Host angehört. Auch diese Bestimmten Emails zukommen lassen an eine Bestimmte Emailadresse. Anstelle der Emailadresse kann man hier aber auch einen Pager oder was anderes benachrichtigen.

Du brauchst Cron dafür meine ich nicht. Außerdem müsstest du ja ständig schauen, ob sich in der riesen Email irgendwas geändert hat. Und diese bekämest du auch andauernd. Ich mein so ein Host der von Nagios überwacht wird, der läuft gewünscht auch mal einfach fehlerfrei. :) Warum also unnötige Emails lesen müssen, wenn Nagios nur im Fehlerfall oder mit Warnung sofort benachrichtigt bzw wenn ein Problem wieder beseitigt wurde (recovery).

Hier Doku diesbezüglich:
http://nagios.sourceforge.net/docs/3_0/notifications.html

Gruß,

R
 
Hi alle zusammen!

Tut mir leid, dass ich mich nicht schon früher gemeldet habe!

@haveaniceday: Vielen Dank für den Hinweis mit dem Befehl "tee" Ich habe ihn erst selten verwendet und gar nicht daran gedacht!

@revealed:
Hi!

Wie es scheint, kennst Du Dich mit nagios aus! Die normalen Notification Mails von Nagios funktionieren bereits! Ich würde gerne von dem Nagiosrechner jeden Tag sagen wir mal ein E-Mail bekommen, in dem Statusinformationen des Nagiosrechners enthalten sind und was am wichtigsten ist, ich überprüfe mit check_nagios, den Nagios Prozess, damit ich weiß, ob damit noch alles in Ordnung ist!

@robi:
Ich habe nun auf Deine Empfehlung und mit Deiner Hilfe "mein erstes Script" geschrieben und es funktioniert einwandfrei! Noch dazu sieht die crontab Datei nun wieder übersichtlicher aus..... :D
Es sieht so aus:
Code:
#! /bin/bash
# Mit diesem Script kann man ein E-Mail mit den Statusinformationen
# des Nagiosrechners versenden.

(date ;
/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios ;
/usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0 ;
/usr/local/nagios/libexec/check_users -w 20 -c 50 ;
/usr/local/nagios/libexec/check_http -H localhost ;
/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5 ;
/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p / ;
/usr/local/nagios/libexec/check_ssh -H localhost -p 2323 ;
/usr/local/nagios/libexec/check_swap -w 20 -c 10 ;
/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT ;) | /usr/bin/mailx -a 'From: "Nagios" <test.nagios@yahoo.de>' -s "*** Prozessstatus Nagios ***" test.nagios@gmx.at

Und versendet ein E-Mail mit folgendem Inhalt:
Code:
Sun May 24 07:11:01 CEST 2009
NAGIOS OK: 1 process, status log updated 68 seconds ago
OK - load average: 0.62, 0.15, 0.04|load1=0.620;5.000;10.000;0; load5=0.150;4.000;6.000;0; load15=0.040;3.000;4.000;0; 
USERS OK - 0 users currently logged in |users=0;20;50;0
HTTP OK HTTP/1.1 200 OK - 360 bytes in 0.003 seconds |time=0.002924s;;;0.000000 size=360B;;;0
PING OK - Packet loss = 0%, RTA = 0.12 ms|rta=0.120000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0
DISK OK - free space: / 32157 MB (91% inode=94%);| /=3152MB;37180;37190;0;37200
SSH OK - OpenSSH_5.1p1 Debian-3ubuntu1 (protocol 2.0)
SWAP OK - 100% free (1466 MB out of 1466 MB) |swap=1466MB;0;0;0;1466
PROCS OK: 31 processes with STATE = RSZDT

Was mich gleich zur nächsten Frage bringt, ich würde nämlich gern diesen Text formatieren, sodass er beispielsweise so aussieht:
Code:
Serverleistungsbericht vom: Sun May 24 07:11:01 CEST 2009

**********************************************************************************************

Informationen zum Nagios-Prozess:

NAGIOS OK: 1 process
 status log updated 68 seconds ago

*********************************************************************************************

Allgemeine Informationen:

OK - load average: 0.62, 0.15, 0.04|
load1=0.620;5.000;10.000;0; load5=0.150;4.000;6.000;0; load15=0.040;3.000;4.000;0; 

USERS OK - 0 users currently logged in |
users=0;20;50;0

HTTP OK HTTP/1.1 200 OK - 360 bytes in 0.003 seconds |
time=0.002924s;;;0.000000 size=360B;;;0

PING OK - Packet loss = 0%, RTA = 0.12 ms|
rta=0.120000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0

DISK OK - free space: / 32157 MB (91% inode=94%);|
/=3152MB;37180;37190;0;37200

SSH OK - OpenSSH_5.1p1 Debian-3ubuntu1 (protocol 2.0)

SWAP OK - 100% free (1466 MB out of 1466 MB) |
swap=1466MB;0;0;0;1466

PROCS OK: 31 processes with STATE = RSZDT

Ich habe gesehen, dass nagios das Programm printf verwendet, um die notification Mails zu formatieren! Wäre das auch das richtige Programm für mich? Ich hab auch schon was von den Streameditoren sed und awk gelesen und weiß jetzt nicht so recht, welcher dieser der für mich am geeigneteste wäre!? Muss ich dann eigentlich den Inhalt wieder in eine Datei schreiben, wie ich es am Anfang schon gemacht habe, damit ich ihn mit Hilfe eines Programms bearbeiten kann?

Ich danke euch allen recht herzlich für eure Hilfe und Unterstützung!

Viele Grüße,

Christian
 
Ok!

Aber auch dass liesse sich meiner Meinung nach anders lösen. Allerdings, wenn du das so möchtest, kein Problem :) Ich verstehe auch in etwa warum du das so haben willst. Also nichts für Ungut.

Gruß,

R
 
Hi revealed!

Ich bin noch blutiger Anfänger auf dem Gebiet Linux und nagios, deshalb hast Du mich neugierig gemacht, was man wie anders lösen könnte!?

Ich freue mich über jeden Ratschlag und jede Möglichkeit die mir zeigt, wie und mit welchen verschiedenen Arten man was lösen kann!

Interessant wäre es auch, dass dieses Script ausgeführt wird, wenn zB. mit dem nagios Prozess etwas nicht stimmt, also er beendet wird oder hängt! Des weiteren wäre es noch interessant, bei jedem Herunterfahren des Rechners eine Info-Mail wegzuschicken! Ist sowas denn möglich?

Vielen Dank schon mal!

Beste Grüße,

noms
 
Hallo!

Du könntest dir einen Report generieren lassen. Dafür gibt es schon scripte wie seccheck. Den bekommst du normal eh schon, sofern konfiguriert. Ich weiss nicht ob du den jetzt zwingend von Nagios haben möchtest. Eventuell ist ein seccheck report oder ein logdigest sogar sinnvoller wegend er verbosity?

Dann bezüglich Nagios gibt es sogar scheints Projekte die sich damit beschäftigen:
http://www.monitoringexchange.org/cgi-bin/page.cgi?g=Detailed%2F2154.html;d=1

Bei dem script könnte man das so lösen:
Erstmal runterladen -> Editieren -> Durchlesen.

Dann die Emailadressen Absender Empfänger usw eintragen (ist im Script kommentiert);

Das script kann man dann so ausführen:
Code:
perl /nagios-reporter.v12.pl --type= (#overnight #daily #weekly #or #monthly );

Oder einen als Cronjob planen :) So erhältst du immer die Zusammenfassung über den gewünschten Zeitraum.
In deinem Fall vermutlich daily oder weekly und diesen dann entweder per Cron einmal am Tag oder Einmal die Woche usw. ?

Ansonsten würde ich aber wie gesagt auch verstehen, wenn du dir deinen eigenen erstellst.

Bitte nichts für Ungut.

Also den Perlscript habe ich mal grade probiert - auch mit der Overnight Option -> Der funktioniert echt gut!

Da bekommt man eine schön vorformatierte Email.

Dann würde ich dir gerne noch einen Tipp geben wollen... es gibt schöne Tools mit denen man Nagios grafisch konfigurieren kann.

Beispielsweise nagiosql:
http://www.nagiosql.org/
Das läuft dann über eine MySQL Datenbank und ist ein Webinterface für diesen Zweck. Selber bin ich nur zu faul umzustellen, weil ich meine config schon von Hand so weit hingestellt hab. Und das alles umzustellen ... hm wie soll ich sagen. Die Konfiguration ist sehr statisch da ändert sich selten etwas.

Das bekommt man mit ein bisschen investierter Zeit sehr schön mit den SuSE rpms ans Laufen.

Interessant wäre es auch, dass dieses Script ausgeführt wird, wenn zB. mit dem nagios Prozess etwas nicht stimmt, also er beendet wird oder hängt! Des weiteren wäre es noch interessant, bei jedem Herunterfahren des Rechners eine Info-Mail wegzuschicken! Ist sowas denn möglich?
Also jemand der jetzt total auf Nagios schwört, der würde dir sagen er überwacht seine Nagios mit Nagios, vermutlich oder eine ähnlichen Lösung. :)

Ja das ist möglich. Dabei kann dir sicherlich wieder jemand anderes helfen, weil ich mir nicht sicher wäre wo man das idealerweise platziert. Ob man dafür eventuell einen Shutdownscript verwendet. Andererseits wenn jemand einfach den Stecker ziehen würde dann bekämst du auch keine Email. Dafür würde wiederum in Nagios alles rot aufleuchten Und du bekämst die Email.

Vermutlich würde ich zentral eine Kiste aufstellen, die die anderen überwacht. Auch sollte man sich bewusst sein, dass eine Überwachung auch zu lasten der Performance geht - gehen kann. Je nach Art der Überprüfung.

Gruß,

R

PS.: Da ich jetzt auch nicht so der Überchecker bin, was Nagios anbelangt sondern eher noch ambitioniert am Lernen, würde ich mich Freuen ... Falls du über die Möglichkeit stolpern solltest, wie man sich in Linux (evtl mit Firefox o.ä) die 3-D Status Map anschauen kann (hab ich seit ewig keine Lösung gefunden). Dann sage bitte bescheid :)

PPS.: Um aufs Scripten zurückzukommen eine nette Idee könnte auch sein, eine einfache Abfrage zu schreiben, die man mit Cron plant. Die sagen wir mal stündlich Prüft ob: nagios nrpe und nsca laufen. Wenn ja ok. Falls nein, schreibe Email mit "Nagios ist abgestürzt!" und starte Nagios neu. Falls er sich erholt gut falls nicht muss man eingreifen? Falls nagios wirklich instabil laufen sollte -> Was ich persönlich nicht sagen kann, da muss dan schon was sein mit der Version die man hat. Dann sind die Prozedere zur Wiederbelebung eh immer die selben. (Restliche Prozesse killen und neustarten.)
 
Hi revealed!

Du hast ja wirklich einen ganzen Roman geschrieben! Danke für Deine Mühe!

Ich danke Dir für den Hinweis mit dem Script nagios-reporter! Nachdem es bei mir nicht auf Anhieb funktioniert hat, weil anscheinend ein perl Modul nachinstalliert werden müsste und ich schon an meinem eigenen "Script" gebastelt habe, habe ich mich entschieden, auch bei meinem eigenen zu bleiben, weil es Spaß macht, sich damit zu beschäftigen! ;)

Das es diese grafischen Tools zum Konfigurieren von nagios gibt, habe ich bereits irgendwo gelesen, aber die Konfiguration von nagios hat mir bis jetzt noch keine gröberen Schwierigkeiten bereitet, welche nicht mit Hilfe des Nagios-Forums zu lösen gewesen wären, darum sehe ich keinen Grund diese zu nutzen! Trotzdem finde ich es sehr nett, dass Du mich darauf aufmerksam gemacht hast!

Einen redundanten nagios Rechner bekomme ich leider nicht zur Verfügung gestellt, weshalb die Methode nagios mit nagios zu monitoren flach fällt!

Bei dem Problem mit der 3D Status Map kann ich Dir leider nicht behilflich sein, ich weiß selbst nicht, wie das funktioniert!

Um zu meinem aktuellen Problem zurückzukommen... Ich habe nun das Script wie folgt geändert:
Code:
#! /bin/bash
# Mit diesem Script kann man ein E-Mail mit den Statusinformationen
# des Nagiosrechners versenden.

DATE=$(date)
NAGIOSPROC=$(/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios)
LOAD=$(/usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0)
USERS=$(/usr/local/nagios/libexec/check_users -w 20 -c 50)
HTTP=$(/usr/local/nagios/libexec/check_http -H localhost)
PING=$(/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5)
DISK=$(/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /)
SSH=$(/usr/local/nagios/libexec/check_ssh -H localhost -p 2222)
SWAP=$(/usr/local/nagios/libexec/check_swap -w 20 -c 10)
PROCS=$(/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT)


/usr/bin/printf "################################################################\n\
#%62s#\n#%3sServerleistungsbericht vom $DATE%3s#\n#%62s#\n################################################################\n\n\n\
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\
%3s*** Statusinformation des Nagiosprozesses ***\n\n\
%3sNAGIOS-INFO:
%3s$NAGIOSPROC\n\n\
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n\
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n\
%3s*** Allgemeine Informationen ***\n\n\
%3sLOAD:\n%3sLOAD $LOAD\n\n\
%3sUSERS:\n%3s$USERS\n\n\
%3sHTTP:\n%3s$HTTP\n\n\
%3sSSH:\n%3s$SSH\n\n\
%3sSWAP:\n%3s$SWAP\n\n\
%3sPROCS:\n%3s$PROCS" | /usr/bin/mailx -a 'From: "Nagios" <nagios-test@yahoo.de>' -s "*** Prozessstatus Nagios ***" nagios-test@gmx.de

Dieses schickt mir ein E-Mail mit folgendem Inhalt:
Code:
################################################################
#                                                              #
#   Serverleistungsbericht vom Die Mai 26 22:17:16 CEST 2009   #
#                                                              #
################################################################


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

   *** Statusinformation des Nagiosprozesses ***

   NAGIOS-INFO:
   NAGIOS OK: 2 processes, status log updated 142 seconds ago

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

   *** Allgemeine Informationen ***

   LOAD:
   LOAD OK - load average: 0.01, 0.03, 0.00|load1=0.010;5.000;10.000;0; load5=0.030;4.000;6.000;0; load15=0.000;3.000;4.000;0; 

   USERS:
   USERS OK - 2 users currently logged in |users=2;20;50;0

   HTTP:
   HTTP OK HTTP/1.1 200 OK - 360 bytes in 0,003 seconds |time=0,002875s;;;0,000000 size=360B;;;0

   SSH:
   SSH OK - OpenSSH_5.1p1 Debian-3ubuntu1 (protocol 2.0)

   SWAP:
   SWAP OK - 100 0,000000ree (1462 MB out of 1466 MB) |swap=1462MB;0;0;0;1466

   PROCS:
   PROCS OK: 30 processes with STATE = RSZDT

Nun würde ich aber gerne auch die Variablen PING und DISK:
Code:
PING=$(/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5)
DISK=$(/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /)

mit printf formatieren, was mir aber Probleme bereitet, vermutlich auf Grund der Prozentzeichen und des /, denn das Skript bricht mit dieser Fehlermeldung ab:
Code:
/usr/bin/printf: %,: ungültige Umwandlungsangabe

Ich habe bereits gelesen, dass man Prozentzeichen mit %% kodieren kann, aber dieses Prozentzeichen steht in der Variable PING und ich weiß nicht, wie ich es dort verändern kann. Zu dem / hab ich leider nichts gefunden!

Hat jemand eine Idee dazu? Zu Verbesserungsvorschlägen im Script wäre ich auch sehr dankbar!

Vielen Dank schon im Voraus!

Beste Grüße,

noms
 
Dachte mir das schon fast :)

Du meinst soetwas:
Code:
printf "%3s %5s %20s \n" "Saving" "MySQL.tgz" "[done]";
?
Vielleicht kannst du die Nagios kommandos als funktion schreiben und diese dann problemlos ausgeben?
Also:
Code:
disk(){ nagioscommando zu disk; };
unten führst du mit "disk" die funktion aus?

Könnte das so helfen?

Gruß,

R
 
Hi revealed!

Genau sowas meinte ich! Super!

Nur wie kann ich den Inhalt meiner Variable verändern?
Code:
DISK=$(/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /)

Wenn ich Dich richtig verstehe, müsste ich den Inhalt der Variable DISK:
Code:
echo $DISK
DISK OK - free space: / 32171 MB (91% inode=94%);| /=3138MB;37180;37190;0;37200

so ändern:
Code:
DISK OK - free space: / 32171 MB (91"%" inode=94"%");| /=3138MB;37180;37190;0;37200

Oder hab ich das noch immer nicht richtig verstanden? Wenn doch, wie mache ich das?

Vielen Dank für Deine Hilfe und viele Grüße,

noms
 
So in der art vermute ich könnte das funktionieren ich bin nicht so der Profi:

Code:
#! /bin/sh
# ( Pfad bei mir anders: ! ) - Funktion:
disktest(){ /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; };

# Funktion ausführen:
disktest
sh test.sh
DISK OK - free space: / 20190 MB (63% inode=81%);| /=11521MB;33388;33398;0;33408

Wenn ich das dann so schreibe:
Code:
#! /bin/sh
AUSGABE="$( /usr/bin/printf "%3s %5s %20s" disktest )"
# ( Pfad bei mir anders: ! ) - Funktion:
disktest(){ /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; };

# Funktion ausführen:
$AUSGABE
Funktioniert es zwar aber er formatiert nicht wirklich die Ausgabe?
sh test.sh
DISK OK - free space: / 20190 MB (63% inode=81%);| /=11521MB;33388;33398;0;33408

Oder meintest du die Ausgabe anzuordnen etwa so:
Code:
#! /bin/sh
# ( Pfad bei mir anders: ! ):
disktest="$( /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; )";
diskt2="$( /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; )";
diskt3="$( /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; )";

# hm?
/usr/bin/printf "%3s %5s \n \n" "*" "$disktest";
/usr/bin/printf "%10s %10s \n \n" "*" "$diskt2";
/usr/bin/printf "%20s %20s \n \n" "*" "$diskt3";

Code:
disk@wild-thing:~> sh test.sh
  * DISK OK - free space: / 20190 MB (63% inode=81%);| /=11521MB;33388;33398;0;33408

         * DISK OK - free space: / 20190 MB (63% inode=81%);| /=11521MB;33388;33398;0;33408

                   * DISK OK - free space: / 20190 MB (63% inode=81%);| /=11521MB;33388;33398;0;33408

Sorry ich glaube passen zu müssen!

Gruß,

R
 
Hi!

Da das eigentliche Thema dieses Threads bereits gelöst wurde und es jetzt um eine anderes Problem geht, werde ich diesen als [SOLVED] markieren und einen neuen Thread, der das neue Problem betrifft, eröffnen: http://www.linux-club.de/viewtopic.php?f=21&t=103582

Vielen Dank allen für eure Hilfe!

Beste Grüße,

noms
 
Oben