Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get this init.d script to start at server restart?

I'm following the directions on installing Redis on a production machine (CentOS using chkconfig).

The example script I was given requires the argument start to actually start it, which it seems init.d does not do (pass arguments).

The real command that must be run is /etc/init.d/redis_6379 start, but what its actually calling is /etc/inti.d/redis_6379, which simply says use start or stop as an argument

Therefor, when my server reboots it doesnt actually start redis. What should I do here?

Here is the initial config

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# 
# chkconfig:   - 85 15
# description:  Redis is a persistent key-value database
# processname: redis_6379

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
like image 812
st0rk Avatar asked Sep 08 '13 05:09

st0rk


3 Answers

Make sure your script is added for service management by chkconfig. Use chkconfig --list to see the list and use chkconfig --add scriptname if it's not there. After that configure the runlevels you want it to be called into. I would guess it's 3, 4 and 5 so: chkconfig --level 345 scriptname on.

like image 86
konsolebox Avatar answered Nov 20 '22 03:11

konsolebox


You should tell us how exactly you are running the script from init.d

But here is a dirty workaround:

Change the line

start)

to

start|'')

This will make it start if there are no parameters passed.

like image 1
Aleks-Daniel Jakimenko-A. Avatar answered Nov 20 '22 03:11

Aleks-Daniel Jakimenko-A.


If you want to start a service through command line you can just add in /etc/rc.d/rc.local too for the same instead of creating a service file in init.d.

like image 1
linux_fanatic Avatar answered Nov 20 '22 04:11

linux_fanatic