user4943236
user4943236

Reputation: 6344

bash script: to check if Apache server is up and running

I am new to bash scripting and trying to figure out why the below script is outputting that Apache server is not running whereas it is running properly.

ps cax | grep httpd
if [ $? -eq 0 ]; then
 echo "Process is running."
else
 echo "Process is not running."
fi

I'm running it on Ubuntu 14.04.2 LTS

Also, how do I make changes to the script that this can test apache server installed on another machine. Kindly help

Upvotes: 4

Views: 25230

Answers (8)

RASP Weather
RASP Weather

Reputation: 11

I put this together based on the above and made so can use other services.

Hope this helps.

#!/bin/bash
# Must be running as root or via sudo permissions to be able to restart
# Put your process name restart command line in
PROCESS_NAME=httpd
if ! pidof $PROCESS_NAME > /dev/null
then
    # web server down, restart the server
    echo "Server $PROCESS_NAME down"
    /usr/sbin/apachectl restart > /dev/null
    echo "Tried restart of $PROCESS_NAME. Waiting 10 seconds to settle."
    # wait ten
    sleep 10

    #checking if process restarted or not
    if pidof $PROCESS_NAME  > /dev/null
    then
        echo "$PROCESS_NAME was down but is now up."
    else
        echo "$PROCESS_NAME is still down. Please take some action."
    fi
else
    echo "Server $PROCESS_NAME up."
fi

Upvotes: 1

JuliSmz
JuliSmz

Reputation: 1156

This work perfect in an old Debian. Remember to run with bash and not with sh.

In Centos replace with httpd.

#!/bin/bash
if [ $(/etc/init.d/apache2 status | grep -v grep | grep 'apache2 is running' | wc -l) > 0 ]
then
 echo "Process is running."
else
  echo "Process is not running."
fi

Upvotes: 1

Johny English
Johny English

Reputation: 176

Try and see - simply simplest, most didactic here and well working on Ubuntu 20.04:

  1. catching output of status to bash variable
  2. "if" status includes substring (from "Active:" statement) - do job you wanted
  3. "else" - do another job you defined
#!/bin/bash
servstat=$(service apache2 status)

if [[ $servstat == *"active (running)"* ]]; then
  echo "process is running"
else echo "process is not running"
fi

Upvotes: 2

Shrey Shekhar
Shrey Shekhar

Reputation: 1

This is menu driven one stop shell script in which you can check the firewall,apache or any other webservices ,you can start or stop the services just by choosing the option in below script

echo "welcome please select your options"
read choice
firewall=`sudo systemctl status firewalld`
apache=`sudo systemctl status apache2`
firewall1=`sudo systemctl stop firewalld`
apache1=`sudo systemctl stop apache2`
startrfirewall=`sudo systemctl start firewalld`
startapache=`sudo systemctl start apache2`

case $choice in
         1) status of the firewall is $firewall
                          ;;
         2) status of apache is $apache
                          ;;
         3) echo stop firewall by $firewall1
                          ;;
         4) echo stop apache by $apache1
                          ;;
         5) echo start firewall by $startrfirewall
                          ;;
         6) echo start apache by $startapache
                          ;;
         *) echo exit
esac

Upvotes: 0

JuliSmz
JuliSmz

Reputation: 1156

This is a working sample of bash script which check the apache status, restart it automatically if down, and alert by telegram bot within unicode emoji.

#!/bin/bash
telegram=(xxxxx, yyyyyy)

if ! pidof apache2 > /dev/null
then
    # web server down, restart the server
    echo "Server down"
    /etc/init.d/apache2 restart > /dev/null
    sleep 10

    #checking if apache restarted or not
    if pidof apache2 > /dev/null
    then
        for i in "${telegram[@]}"
        do
        curl -s -X POST https://api.telegram.org/botxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyy/sendMessage -d chat_id="$i" -d text="`echo -e '\U0001F525'` Apache stoped on Molib Stage. Automatically restarted succesfully."
        done
    else
        for i in "${telegram[@]}"
        do
        curl -s -X POST https://api.telegram.org/botxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyyyy/sendMessage -d chat_id="$i" -d text="`echo -e '\U0001F525'` Apache stoped on Molib Stage. Automatically restart failed. Please check manually."
        done
    fi
fi

Upvotes: 9

shrikrishna sharma
shrikrishna sharma

Reputation: 1

## Plz run this script .. its working 
------------------------------------------------
ps cax | grep httpd
if [ $? -eq 1 ]
 then
 echo "Process is running."
else if [ $? -eq 0 ]
 echo "Process is not running."
fi
fi
----------------------------------------------

Upvotes: 0

Use this:

service apache2 status

Or this:

service --status-all | grep apache2

Upvotes: 5

nix
nix

Reputation: 814

Instead of httpd try to grep "apache2". To be sure try to check services with the next command and decide the registered name of the apache webserver: service --status-all

Upvotes: 1

Related Questions