2016-04-18 6 views
-1

Ich versuche, mit den folgenden Schritten Bash-Skript zu erreichen:Bash-Skript: Apache Server läuft oder nicht

1) Überprüfen Sie den Status von Apache Server.

2) Wenn es läuft, nichts tun. Wenn dies nicht der Fall, gehen Sie dann 3.

3) zum Schritt Server nicht läuft, dann einen Fehler E-Mail zuerst und starten Sie den Server

4) Nach dem Neustart überprüfen, um den Status und sendet eine Bestätigungsemail

Hier ist mein Code:

#checking if Apache is running or not 
ps auxw | grep apache2 | grep -v grep > /dev/null 

if [ $? != 0 ] 
then 
mailx -s "Apache web server is down, Trying auto-restart" -$ 

# web server down, restart the server 
sudo /etc/init.d/apache2 restart > /dev/null 
sleep 10 

#checking if apache restarted or not -- This is not working 
ps auxw | grep apache2 | grep -v grep > /dev/null 
if [ $? = 0 ] 
then 
    mailx -s "Apache restarted succesfully" -r "$SENDEREMAIL" "$NOTIFYEMAIL"  < /$ 
else 
    mailx -s "Restart Failed, try restarting manually" -r "$SENDEREMAIL" "$NOTIFYEMAIL" <$ 
fi 
fi 

der Code funktioniert einwandfrei, bis Schritt 3, und andernfalls/nicht auf Schritt 4 dh Skript arbeitet, ist nicht in der Lage, den Status des Servers nach dem Neustart zu überprüfen und Senden eine Bestätigungs-E-Mail Kann mir bitte jemand sagen, wo ich falsch liege?

+0

fügen Sie "set -x" an den Anfang, führen Sie es erneut aus und fügen Sie diese Ausgabe hinzu – Dave

+1

Gibt es einen besonderen Grund, warum Sie nicht den 'apachectl status' verwenden? – tripleee

+0

kann ich wissen, warum runtergestimmt? Die Frage folgt jeder Regel von SO – user4943236

Antwort

2

Versuchen Sie folgendes:

#checking if Apache is running or not 

if ! pidof apache2 > /dev/null 
then 
    mailx -s "Apache web server is down, Trying auto-restart" 

    # web server down, restart the server 
    sudo /etc/init.d/apache2 restart > /dev/null 
    sleep 10 

    #checking if apache restarted or not 
    if pidof apache2 > /dev/null 
    then 
     message="Apache restarted successfully" 
    else 
     message="Restart Failed, try restarting manually" 
    fi 
    mailx -s "$message" -r "$SENDEREMAIL" "$NOTIFYEMAIL" 
fi 

Hinweis: Jeder mailx Linie hatte eine Hinter -$, < /$ oder <$ - das sah aus wie Tippfehler und gelöscht wurden.

+0

Das 'Grep -V Grep' ist ein gemeinsames Antipattern. Du willst 'ps auxw | grep -q '[a] pache2'' oder besser noch 'pidof apache2' – tripleee

+0

Vielleicht entfernen Sie das" dies funktioniert nicht "Kommentar (: – tripleee

+0

Ich hatte' pidof' vorher, glaube es oder nicht, aber wurde verwirrt beim Lesen das Handbuch, wenn es irgendwelche Genehmigungsbedingungen auf dem System des OP gab, die es scheitern lassen könnten. Ich hatte davon [Heilung] nicht gehört (http://stackoverflow.com/questions/9375711/more-elegant-ps-aux-grep -v-grep) für 'grep -v grep' vorher, nachgeschaut, tolle Sachen, Tnx! Vorgeschlagene Codeänderungen ausstehend ... – agc

Verwandte Themen