PDA

Bekijk Volledige Versie : Shell Script



wbakker-letsgoonline
27/06/06, 11:05
Ik zoek eigenlijk een aantal voorbeelden voor het volgende:

Uitleg:
Ik zoek een voorbeeld script waarin staat hoe ik de status van apache kan checken, dus is hij online (1) of is hij offline (0). Waarop wanneer apache offline is ik een command moet kunnen uitvoeren + dat het script mij een email stuurd hierover.

/Uitleg

Weet iemand een website waar ik dit op kan vinden, dit omdat ik zelf niet veel van shell scripting afweet en onze technische man op dit moment al aardig druk is.

Kenneth
27/06/06, 11:10
$result = shell_exec("service apache status");

if(!preg_match("/is running/", $result))
{
shell_exec("service apache start");
mail("henk@devries.nl", "Apache is beetje dood (onderwerp)", "Uhm ja apache is dood (bericht)", "From: jeserver@server.nl");
}

bedoel je zoiets of via sockets van buiten af checke?

ju5t
27/06/06, 11:13
Met Zabbix kun je remote checken en commando's afvuren.

wbakker-letsgoonline
27/06/06, 11:44
$result = shell_exec("service apache status");

if(!preg_match("/is running/", $result))
{
shell_exec("service apache start");
mail("henk@devries.nl", "Apache is beetje dood (onderwerp)", "Uhm ja apache is dood (bericht)", "From: jeserver@server.nl");
}

bedoel je zoiets of via sockets van buiten af checke?

Ik neem aan dat dit ook werkt op een FreeBSD systeem, dit dat ik wel weet dat het op een Redhat systeem werkt.

HostPerfect
27/06/06, 11:47
Tevens lijkt het me niet verstandig.. Het is niet voor niets gecrashed?

ju5t
27/06/06, 11:50
Ik neem aan dat dit ook werkt op een FreeBSD systeem, dit dat ik wel weet dat het op een Redhat systeem werkt.

Nee, op FreeBSD start Apache anders.

# /usr/local/sbin/apachectl start

royen99
27/06/06, 12:00
Voorbeeldje van een shell script (checked evt. meer als 1 process).



#!/bin/bash

EMAIL="bla@bla.net"
LIST="
/usr/sbin/httpd
/usr/libexec/mysqld
"


check()
{
PROC=`ps -ef | grep "$SERVICE" | grep -v grep|wc -l`
if [ ${PROC} = 0 ]
then
STATUS=1
fi
}

for SERVICE in $LIST
do
check $SERVICE
case $STATUS in
1)
echo "
WARNING: Last check of $SERVICE has found that there are no
processes running. " | mail -s "WARNING for $SERVICE" $EMAIL
;;
esac

done

crazycoder
27/06/06, 12:02
Tevens lijkt het me niet verstandig.. Het is niet voor niets gecrashed?
Doe het zelf ook.. als Apache ergens over struikelt dan wordt het opnieuw gestart.

Als het een tijdelijk probleem betreft is het niet zo'n probleem.. is het geen tijdelijk probleem dan moet je er zelf alsnog naar kijken :)

HostPerfect
27/06/06, 12:11
Doe het zelf ook.. als Apache ergens over struikelt dan wordt het opnieuw gestart.

Als het een tijdelijk probleem betreft is het niet zo'n probleem.. is het geen tijdelijk probleem dan moet je er zelf alsnog naar kijken :)

True, maar met dit soort scriptjes wordt je snel lui en denk je laat maar, komt nog wel.. Werkt toch al weer..

crazycoder
27/06/06, 12:29
True, maar met dit soort scriptjes wordt je snel lui en denk je laat maar, komt nog wel.. Werkt toch al weer..
HAHA... behalve als je iedere 5 minuten een mailtje krijg :)

wbakker-letsgoonline
27/06/06, 12:40
Tevens lijkt het me niet verstandig.. Het is niet voor niets gecrashed?

Wij onderzoeken altijd waar apache crashed, maar het gaat erom dat de downtime voor onze klanten zo min mogelijk is. Daarom dit script.

Kenneth
27/06/06, 13:18
je zou ook bijv als apache crashed de laatste paar lines van log kunnen mee mailen via /usr/bin/tail

/usr/bin/tail -n 10 <file> voor laatste 10 regels

wbakker-letsgoonline
27/06/06, 13:19
Is ook een idee ja, nou goed ik ga in iedergeval even stoeien en uit vogelen hoe het shell scripten nu werkt, weet iemand of er een goed boek is die de basis van shell scripting kan uitleggen ?

Digiover
27/06/06, 19:51
... weet iemand of er een goed boek is die de basis van shell scripting kan uitleggen ? Logischerwijs ligt dat volledig aan welke shell je gebruikt. sh != csh, you know.
Typ eens
man sh in op de shell, als (ba)sh je shell is, of
man csh voor csh.

Verder zal je moeten bepalen of je iets wilt scripten in:
* C
* Perl
* Bash
* Perl
* Python
* ...

Bepaal dat eerst, ga dan op zoek naar een boek.

liber!
27/06/06, 19:53
Is ook een idee ja, nou goed ik ga in iedergeval even stoeien en uit vogelen hoe het shell scripten nu werkt, weet iemand of er een goed boek is die de basis van shell scripting kan uitleggen ?
Voor Bash: http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

Je zou het ook in php kunnen maken of een andere taal.

wbakker-letsgoonline
27/06/06, 21:57
Ik ga me eigen maar eens inlezen :)

Dillard
28/06/06, 00:42
Als je een script zoekt die een bepaalde output controleert (bv. een php-output icm mysql zodat je zeker weet dat je apache en je database nog in de lucht is), kun je hier eens naar kijken (even gegraven in het archief):

FreeBSD:



#!/bin/sh

# Auteur : Dillard Blom (dillard@odon.nl)
# Doel : Uptime van systemen monitoren en signaleren wanneer
# er problemen zijn.
#
# Gebruik : Pas dit script aan voor eigen gebruik en plaats in /etc/crontab
#
# Commando: monitor [server] [waarschuwingsadres]
# Dus bv : monitor www.nu.nl webmaster@nu.nl
#
# LET OP : In deze versie van het script ga ik uit dat online.txt in de
# root dir staat en alleen de naam van de webserver bevat
# dus bij voorbeeld 'www.odon.nl' (zonder quotes) !!
#
# Logfile wordt aangemaakt in /var/log/buddycheck/[server].log
#
# Gemaakt : 07-07-2002
# Gewijz. : 12-04-2004 ; Aangepast voor monitoren apache op localhost
# 04-07-2004 ; Generiek gemaakt voor monitoring server plus logging alleen indien herstart heeft plaatgevonden
# 30-03-2005 ; toevoeging op MySQL
#
#

SERVER=$1
ALERT=$2
CONTROLEWOORD="oudklasgenoten.be"
LOGFILE=/var/log/monitor.log

## Logfile locatie in orde maken..
if test ! -e $LOGFILE ; then
touch $LOGFILE
fi


if test "$SERVER" = "" -o "$ALERT" = "" ; then
echo
echo "Gebruik: " $0 " [server] [waarschuwingsadres]"
echo
echo "Dus bv : " $0 " www.odon.nl webmaster@odon.nl"
echo
exit 1
else

RESULT=`/usr/local/bin/lynx -dump -reload -connect_timeout=60 $SERVER/controle.txt|grep $CONTROLEWOORD`

if [ $? -eq 0 ] ; then
# echo `date` "Server " $SERVER " is in orde" >> $LOGFILE
exit 0
else
## Webserver heeft niet juist gereageerd, apache herstarten
/usr/local/sbin/apachectl restart
if [ $? -ne 0 ] ; then
## herstart niet gelukt
/usr/local/sbin/apachectl stop
sleep 10
/usr/local/sbin/apachectl startssl
if [ $? -ne 0 ] ; then
echo `date` "PANIC: Apache laat zich niet herstarten! " >> $LOGFILE
echo "Apache op server: " $SERVER " is DOWN!!" \
| mail -s APACHE_STORING!! $ALERT
exit 1
else
echo `date` "Apache kwam terug, opnieuw controleren..." >> $LOGFILE
echo "Apache op server: " $SERVER " is herstart, nieuwe controle geinitieerd" \
| mail -s APACHE_HERSTART! $ALERT
## Opnieuw script uitvoeren (just to be sure ;-)
sleep 20
exec $0 $1 $2
fi
fi
## Klant informeren over herstart...
echo `date` "Apache is herstart" >> $LOGFILE
echo "Apache op server: " $SERVER " is herstart!!" \
| mail -s APACHE_HERSTART! $ALERT
exit 0
fi
fi

## Nog toevoegen, test met MySQL

wbakker-letsgoonline
02/07/06, 23:16
@ Dillard, bedankt ! hier kan ik wel wat mee !!

Zonet even aangepast naar mijn wensen en het werkt perfect !

WH-Tim
02/07/06, 23:20
Verder zal je moeten bepalen of je iets wilt scripten in:
* C
* Perl
* Bash
* Perl
* Python


:p

...

Dillard
03/07/06, 02:44
@ Dillard, bedankt ! hier kan ik wel wat mee !!

Zonet even aangepast naar mijn wensen en het werkt perfect !

Graag gedaan!