Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

07.05.2008, 16:45

Dienst status prüfen funzt nicht (newbie)

Hallo zusammen,

ich habe mir mal vorgenommen ein kleines Script zu schreiben, der mir einen Dienst überprüfen soll.

Ich habe mich mal ein wenig über "cut" schlau gemacht. Der Befehl in der Console funzt auch aber wenn ich das Ganze dann in meinem Script einsetzte, erhalte ich eine Fehlermeldung. Ich glaube ich bin zu blöd :) Ich hab keinen Plan, ob man da noch was quoten muss oder in Klammern setzen muss, damit das Ganze läuft.

Vielleicht kann mir ja jemand weiterhelfen.

Vielen Dank schon mal vorab.


Hier das mal mein Ansatz für das Script:

Quellcode

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
service="nagios"
stat= rc-status | grep $service | cut -d [  -f 4 | cut -c 7-13
if [ $status == "stopped" ]; then
	echo "Service $service is NOT running"
	echo "$stat"
else
	echo "Service $service is still running"
	echo "$stat"
fi 


Und hier die Fehlermeldung:

Quellcode

1
2
3
4
intranet scripts # ./scan_nagios_service
started
./scan_nagios_service: line 11: [: ==: unary operator expected
Service nagios is still running

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Der_Gnom« (07.05.2008, 17:36)


2

07.05.2008, 17:17

Quellcode

1
stat= rc-status | grep $service | cut -d [ -f 4 | cut -c 7-13

Muss auch eher so heißen...

Quellcode

1
stat=$(rc-status | grep ${service} | cut -d\[ -f 2 | tr -c -d [:alnum:]

Deine Fehler waren:
Leerzeichen nach dem =
Befehlzeile muss in "`...`" bzw "$(...)" stehen
"-d [" muss "-d\[" heißen

Aber um mal auf das Skript einzugehen, was ist gegen folgendes einzuwenden

Quellcode

1
/etc/init.d/nagios status
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

3

07.05.2008, 17:24

Lösung ohne cut, sollte aber auch gehen:

Quellcode

1
2
3
4
5
6
7
8
service="nagios"
if [ -z "$(rc-status -s | grep " $service " | grep started)" ]; then    
   echo "Service $service is NOT running"
   echo "stopped"
else
   echo "Service $service is still running"
   echo "started"
fi

Beachte die Leerzeichen bei grep " $service "; sonst überschneiden sich z.B. local und localmount.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

4

07.05.2008, 17:34

Nichtsdestotrotz ist wohl am einfachsten die oben genannte Prüfung zu verwenden

Quellcode

1
/etc/init.d/${service} status
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

5

07.05.2008, 17:36

8o :thumbsup:

Boah, geilo.

Danke für die schnelle Antwort. Und vielen Dank, dass die Erklärungen gleich mit dabei stehen. Das vereinfacht gleich das weiter rumprobieren :)

@maggu2810

Zitat

Aber um mal auf das Skript einzugehen, was ist gegen folgendes einzuwenden
Quellcode
1

/etc/init.d/nagios status

Vielleicht denke ich ja auch zu kompliziert. Aber wenn mein Nagios-Dienst wegstürzt, kann er sich ja selber schlecht fragen, ob er noch läuft. So hab ich mir gedacht, dass ich dieses Script per Cron alle X Stunden laufen lasse und mir dann noch eine Mail schicken lasse, wenn der Dienst nicht läuft. Das da was auf der Console ausgegeben wird, war nur zum Überprüfen.

Aber nochmal ein fettes DANKE an euch beide.

tschö
Der_Gnom

6

07.05.2008, 17:43

/etc/init.d/nagios status und rc-status greifen auf die selbe Datenbank zu. Damit wirst Du also auch nicht prüfen können ob nagios noch läuft, sondern nur, ob der Dienst gestartet wurde.
Eventuell legt Nagios eine pid-Datei unter /var/run ab. Dannach kannst Du "ps -ax" greppen, um sicherzugehen, ob der Prozess noch da ist. Eine andere Möglichkeit wäre z.B. ein wget auf das Webinterface.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

7

07.05.2008, 17:50

Wie der Pfad beim alten Layout hieß weiß ich nicht mehr.
Aber man soll ja auch baselayout-2 mit openrc verwenden. =)
Bei dem status Dingens wird nur /lib/rc/init.d/ (+Unterordner) überprüft, kannst also immer machen.
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.