[Gluster-devel] Init script

Christopher Hawkins chawkins at veracitynetworks.com
Fri Aug 3 11:57:08 UTC 2007


> Subject: Re: [Gluster-devel] Updated debian patch
> 
> 
> > Chris,
> >  any patches you would want us to apply to the codebase (init.d 
> > script?) which might make your life easier?
> 
> Absolutly. A well maintained init.d script in the code base 
> would be fantastic, and then usable on any system, not just debian.
> 
> 
> 
> Thanx Matt.

Hi guys, 

Here's an init script I put together that should work on any system, though
I have only tried it so far on Centos. It's self contained... doesn't use
any init functions in the hope that it will portable across distro's. So far
it's been good to me and I was going to post it anyway, so I guess now is
the time! It's not fancy, doesn't check mounts or anything like that, but it
seems to work well and reliably.

PS - I am not a developer by any stretch of the imagination, so in the event
that my scripting is ugly in the eyes of a real coder, have a laugh at my
expense but please fix it and re-post.  ;-)  And thanks from all of us to
the gluster team for all the great work. This is a fantastic project! 

#!/bin/bash
#
# chkconfig: 35 90 12
# description: Glusterfsd server
#

# Get function from functions library
# . /etc/rc.d/init.d/functions

BASE=glusterfsd
GSERVER="/sbin/$BASE -f /etc/glusterfs/glusterfs-server.vol"

# A function to stop gluster
killgluster()
{
        killlevel="-9"
        # Find pid.
        pid=
        if [ -f /var/run/$BASE.pid ]; then
                local line p
                read line < /var/run/$BASE.pid
                for p in $line ; do
                        [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid
$p"
                done
        fi
        if [ -z "$pid" ]; then
                pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || \
                        pidof -o $$ -o $PPID -o %PPID -x $BASE`
        fi
        # Kill it.
        kill $killlevel $pid
        if [ "$?" = 0 ] 
  	  then 
	     echo "Gluster process $pid has been killed"
	     initlog -n "Kill gluster" -e 1
          else
             echo "Failed: Gluster process $pid has not been killed"
             initlog -n "Kill gluster" -e 2
        fi

        # Remove pid and lock file if any.
         if [ -f /var/run/$BASE.pid ]
            then 
	      rm -f /var/run/$BASE.pid && initlog -n "Remove $BASE.pid:" -e
1
	    else echo "$BASE.pid not found" && initlog -n "Remove
$BASE.pid:" -e 2
         fi
  	 
	 if [ -f /var/lock/subsys/$BASE ]
            then
              rm -f /var/lock/subsys/$BASE && initlog -n "Remove $BASE lock
file:" -e 1
            else echo "$BASE lock file not found" && initlog -n "Remove
$BASE lock file:" -e 2
	 fi
}

# Start the service $BASE
start()
{
        initlog -c "echo -n Starting $BASE:" 
        $GSERVER
	if [ $? = 0 ]
         then 
           touch /var/lock/subsys/$BASE
           initlog -n "Starting $BASE" -e 1
	   echo "  [OK]"
         else 
	   echo "$BASE start failed."
	   initlog -n "$BASE start" -e 2
        fi
}

# Stop the service $BASE
stop()
{
        echo "Stopping $BASE:"
        killgluster
}
status()
{
	if test "`lsof |grep -c /sbin/$BASE`" = "0"
	  then echo "$BASE is stopped."
	  else echo "$BASE is running..."
	fi
}

### service arguments ###
case $1 in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $.Usage: $0 {start|stop|restart|reload|status}.
        exit 1
esac

exit 0






More information about the Gluster-devel mailing list