Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Stash System V Init Script for RHEL

Sidnie Anderson October 3, 2013

There is an init.d script posted at https://confluence.atlassian.com/display/STASH/Running+Stash+as+a+Linux+service#RunningStashasaLinuxservice-Usinganinit.dscript , but it is geared more toward Debian-based systems than RHEL-based systems. As is, the script has issues with chkconfig. Is there an init.d script available for us who use the RHEL-based systems?

This is a self-answer question. I'm posting a script below.

4 answers

1 accepted

7 votes
Answer accepted
Sidnie Anderson October 3, 2013

Personal solution:

#!/bin/sh
#
# stash     Startup script for stash.
#
# chkconfig: 2345 85 28
# description: Initscript for Atlassian Stash

### BEGIN INIT INFO
# Provides: $stash
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $syslog
# Should-Start: $syslog
# Should-Stop: $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Initscript for Atlassian Stash
# Description: Automatically start Atlassian Stash when the system starts up.
#              Provide commands for manually starting and stopping Stash.
### END INIT INFO
#
# Author: Billy Wilson
#         <billybob.wilson AT gmail.com>.

# Source function library
. /etc/rc.d/init.d/functions

# RUNUSER: The user to run stash as
RUNUSER=stash

# STASH_INSTALLDIR: The path to the Stash installation directory
STASH_INSTALLDIR="/usr/local/src/atlassian-stash-latest"

# STASH_BINDIR: The path to the Stash installation binaries
STASH_BINDIR="$STASH_INSTALLDIR/bin"

# STASH_HOME: The path to the Stash home directory
STASH_HOME="/var/lib/stash"

# STASH_PID: The path to the Stash PID file
STASH_PID="$STASH_INSTALLDIR/work/catalina.pid"

# For SELinux we need to use 'runuser' instead of 'su'
if [ -x /sbin/runuser ]
then
    SU=runuser
else
    SU=su
fi

# Set defaults for Stash name and description
NAME=stash
DESC="Atlassian Stash"

# Read configuration variable file if present
[ -r /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME


# Function to run commands as $RUNUSER with $STASH_HOME exported
run_with_home() {
    if [ "$RUNUSER" != "$USER" ]
    then
        $SU - "$RUNUSER" -c "export STASH_HOME=$STASH_HOME; $STASH_BINDIR/$1"
    else
        export STASH_HOME=$STASH_HOME; $STASH_BINDIR/$1
    fi
}

script_result=0

start(){
    [ -x "$STASH_BINDIR/start-stash.sh" ] || exit 5

    STASH_START=$"Starting $NAME service: "

    if [ -e $STASH_PID ]
    then
        echo $"$NAME is already running as PID `cat $STASH_PID` (or the PID file is dead)."
        echo_failure
        echo
        exit 1
    else
        echo -n "$STASH_START"
        run_with_home start-stash.sh > /dev/null
        sleep 2
        pid=`head -n 1 "$STASH_PID" 2>/dev/null`
        if [ "x$pid" != x ]
        then
            success "$STASH_START"
            echo
        else
            failure "$STASH_START"
            echo
            script_result=1
        fi
    fi
}

stop(){
    [ -x "$STASH_BINDIR/stop-stash.sh" ] || exit 5

    echo -n $"Stopping $NAME service: "
    if [ -e "$STASH_HOME/.lock" ]; then
        run_with_home stop-stash.sh > /dev/null
        ret=$?
        if [ $ret -eq 0 ]
        then
            echo_success
        else
            echo_failure
            script_result=1
        fi
    else
        # not running; per LSB standards this is "ok"
        echo_success
    fi
    echo
}


restart(){
    stop
    start
}

condrestart(){
    [ -e "$STASH_HOME/.lock" ] && restart || :
}


case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status -p "$STASH_PID" stash
    script_result=$?
    ;;
  restart)
    restart
    ;;
  condrestart|try-restart)
    condrestart
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}" >&2
    exit 2
esac

exit $script_result

2 votes
Tommy McNeely May 21, 2014

I realise this is an old thread, but I wanted to say thanks. Also I would offer that a "standard" RHEL/CentOS init script usually sources /etc/sysconfig/stash as opposed to /etc/default/stash if it exists to allow for "configuration" such as directories, users, etc. without customizing the script itself.

Sidnie Anderson May 21, 2014

Thanks, I didn't know this. Script updated.

Tommy McNeely May 22, 2014

Thanks again! I was glad to find this and it works great (I made the same change).

1 vote
Florian Asche March 20, 2015

Hi,

 

i have some trouble with the init script. The Start is working perfectly but shutdown dont get run on system reboot.

RedHat checks for a lock file for your script in /var/lock/subsys/<scriptname> or it won't run your K* scripts.

You need to add an touch in the start routine and a rm -f in the stop routine.

 

Regards,

Florian

0 votes
CelsoA
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
October 3, 2013

Hi Billy,

There is a script for FishEye that I think that can help you:

https://confluence.atlassian.com/display/FISHKB/Starting+FishEye+automatically+without+logging+on+the+server

Could you please try it just editing the paths to Stash installation and tell me how it goes for you?

Regards,

Celso Yoshioka

Sidnie Anderson October 4, 2013

Thanks for your response. I edited the paths and ran it, but the functionality of that script doesn't align well with what I would expect from an init.d script in RHEL. For example, `service stash status` tails a log file, but I would expect it to report if the service is running, along with a PID if available.

Also, it doesn't use the sourced functions in /etc/rc.d/init.d/functions, such as `success`, `failure`, `echo_success`, `echo_failure`, and `status`. Using these functions standardizes the format of `service stash` output with with the rest of my services.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events