Stash System V Init Script for RHEL

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

Accepted Answer
7 votes

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

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.

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

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

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

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

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
Community showcase
Published Aug 21, 2018 in Bitbucket

Branch Management with Bitbucket

As a project manager, I have discovered that different developers want to bring their previous branching method with them when they join the team. Some developers are used to performing individual wo...

2,377 views 9 12
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you