Create linux service script example

Linux

The autostart variable is set to yes if the first parameter passed to the script was -a. This variable was defined at the start of the script, with a simplistic alternative to getopt. This is achieved by checking if $1 is -a, and if

it is, then service=$2 instead of service=$1, and autostart get set as appropriate. Using $2 for autostart would be easier for the script, but the syntax would be less natural and consistent with other Unix/Linux scripts.

#!/bin/bash

 

# service is the name of the init script

# as well as the name of the application.
if [ "$1" == "-a" ]; then

autostart=yes service=$2

else
autostart=no
service=$1

fi;

distro=unknown

init_dir=unknown

rc_dir=/etc/rc.d

# Step 1: Determine the Distribution

if [ -f /etc/redhat-release ]; then

# Also true for variants of Fedora or RHEL

distro=redhat

elif [ -f /etc/debian_version ]; then

# Also true for Ubuntu etc

distro=debian
elif [ -f /etc/SuSE-brand ] || [ -f /etc/SuSE-release ]; then

distro=suse

elif [ -f /etc/slackware-version ]; then

distro=slackware

else

distro=unknown

fi

# Step 2: Install into the appropriate init directory

case $distro in

redhat|debian|suse)

# /etc/rc.d/ is a link to /etc/init.d

# SuSE and RedHat don't need rc_dir. init_dir=/etc/init.d

rc_dir=/etc

;;

slackware)

init_dir=/etc/rc.d rc_dir=/etc/rc.d

;;

*)

echo -n "Unknown distribution; guessing init directory... "

for init_dir in /etc/rc.d/init.d /etc/init.d unknown
do

[ -d ${init_dir} ] && break

done

if [ "$init_dir" == "unknown" ]; then

echo "Failed"

else

echo "Found ${init_dir}."

rc_dir=$init_dir
fi

esac

 

if [ $init_dir != unknown ]; then

cp $service ${init_dir}

else

echo "Error: Can not determine init.d directory."
echo "Initialization script has not been copied."

exit 1

fi

 

# Step 3: Register the service case $distro in

suse|redhat)

chkconfig --add $service

;;

*)

ln -sf ${init_dir}/$service ${rc_dir}/rc2.d/S90$service

ln -sf ${init_dir}/$service ${rc_dir}/rc3.d/S90$service

ln -sf ${init_dir}/$service ${rc_dir}/rc0.d/K10$service

ln -sf ${init_dir}/$service ${rc_dir}/rc6.d/K10$service

;;

esac

 

# Step 4: Start the Service

[ $autostart == yes ] && case $distro in suse|redhat)

chkconfig $service on

;;

unknown)

echo "Unknown distribution; attempting to start up..."

${init_dir}/$service start

;;

*)

# Debian, Slackware

${init_dir}/$service start

;;

esac

# ./installservice.sh -a myapp.sh
/etc/init.d/myapp called with start; starting the application!
# ls -l /etc/init.d/myapp.sh
-rwxr-xr-x 1 root root 429 Apr 11 12:56 /etc/init.d/myapp.sh
# ls -l /etc/rc3.d/S90myapp.sh
-rwxr-xr-x 1 root root 429 Apr 11 12:56 /etc/rc3.d/S90myapp.sh
#

In case of any ©Copyright or missing credits issue please check CopyRights page for faster resolutions.

Leave a Reply