[Gluster-devel] Init script

Chris AtLee chris at atlee.ca
Tue Aug 28 18:53:17 UTC 2007


Weird, which version of RHEL?  My RHEL4/5 machines have it (the
redhat-lsb package).

Maybe we need separate scripts per distribution anyway?  Many debian
scripts of this sort have a corresponding file in /etc/default that
would indicate if the program was configured and allow you to specify
non-default command line arguments without editing the init.d script.
shorewall for example uses a variable in /etc/default/shorewall to
prevent it from starting up with the default configuration.

RedHat seems to prefer files in /etc/sysconfig for this sort of thing?

On 8/28/07, Christopher Hawkins <chawkins at bplinux.com> wrote:
> Hm. <scratching head> RHEL / Centos doesn't have /lib/lsb/init-functions...
> It has /etc/init.d/functions, but the functions are all different anyway.
>
> Could modify the original script to test for /etc/debian_version file and if
> found, use the "logger" command instead of initlog. Or I suppose the dev
> team (does the installation routine already already test to figure out what
> distro is running?) could just have the install script install one or the
> other based on distro, but then you have two scripts to maintain. What do
> you think? Also, what issues do you have with the way kill is implemented? I
> ask because I would like to fix that too, if possible, so I can use this
> script on all my boxes.
>
> Chris
>
> -----Original Message-----
> From: chris.atlee at gmail.com [mailto:chris.atlee at gmail.com] On Behalf Of
> Chris AtLee
> Sent: Tuesday, August 28, 2007 2:08 PM
> To: Anand Avati
> Cc: Christopher Hawkins; gluster-devel at nongnu.org
> Subject: Re: [Gluster-devel] Init script
>
> On my (debian) system, the 'initlog' command doesn't exist, so this
> script prints out a lot of errors, and there are some issues with how
> 'kill' works.
>
> init.d scripts are pretty hard to get working across multiple
> distributions.  The best way I know of is to only rely on commands in
> /lib/lsb/init-functions.
>
> The attached script runs cleanly on my system.
>
> On 8/7/07, Anand Avati <avati at zresearch.com> wrote:
> > committed the script under extras/init.d/glusterfsd. Thanks a bunch!
> >
> > avati
> >
> > 2007/8/3, Christopher Hawkins <chawkins at veracitynetworks.com>:
> > >
> > > > 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
> > >
> > >
> > >
> > > _______________________________________________
> > > Gluster-devel mailing list
> > > Gluster-devel at nongnu.org
> > > http://lists.nongnu.org/mailman/listinfo/gluster-devel
> > >
> >
> >
> >
> > --
> > It always takes longer than you expect, even when you take into account
> > Hofstadter's Law.
> >
> > -- Hofstadter's Law
> > _______________________________________________
> > Gluster-devel mailing list
> > Gluster-devel at nongnu.org
> > http://lists.nongnu.org/mailman/listinfo/gluster-devel
> >
>
>





More information about the Gluster-devel mailing list