[Other doc versions]
[Doc downloads]
For production use on a Linux server, Stash should be configured to run as a Linux service, that is, as a daemon process. This has the following advantages:
This page describes the following approaches to running Stash as a service on Linux:
init.d
script to start Stash at boot time - this doesn't restart Stash if it stops for some reason.systemctl
script to start Stash at boot time - this doesn't restart Stash if it stops for some reason.Note that Stash assumes that the external database is available when it starts; these approaches do not support service dependencies, and the startup scripts will not wait for the external database to become available.
On this page:
Related pages:
Stash can be run as a service on Linux using the Java Service Wrapper. The Service Wrapper is known to work with Debian, Ubuntu, and Red Hat.
The Service Wrapper provides the following benefits:
Please see http://wrapper.tanukisoftware.com/doc/english/launch-nix.html for wrapper installation and configuration instructions.
The service wrapper supports the standard commands for SysV init scripts, so it should work if you just create a symlink to it from /etc/init.d
.
The usual way on Linux to ensure that a process restarts at system restart is to use an init.d script. This approach does not restart Stash if it stops by itself.
Create a stash user, set the permissions to that user, create a home directory for Stash and create a symlink to make upgrades easier:
$> curl -OL http://downloads.atlassian.com/software/stash/downloads/atlassian-stash-2.0.1.tar.gz $> tar xz -C /opt -f atlassian-stash-2.0.1.tar.gz $> ln -s /opt/atlassian-stash-2.0.1 /opt/atlassian-stash-latest # Create a home directory $> mkdir /opt/stash-home # ! Update permissions and ownership accordingly
Create the startup script in /etc/init.d/stash
with the following contents (Ensure the script is executable by running chmod 755 stash
):
#! /bin/sh ### BEGIN INIT INFO # Provides: stash # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $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 # Adapt the following lines to your configuration # RUNUSER: The user to run Stash as. RUNUSER=vagrant # STASH_INSTALLDIR: The path to the Stash installation directory STASH_INSTALLDIR="/opt/atlassian-stash-2.0.1" # STASH_HOME: Path to the Stash home directory STASH_HOME="/opt/stash-home" # ================================================================================== # ================================================================================== # ================================================================================== # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Atlassian Stash" NAME=stash PIDFILE=$STASH_INSTALLDIR/work/catalina.pid SCRIPTNAME=/etc/init.d/$NAME # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions run_with_home() { if [ "$RUNUSER" != "$USER" ]; then su - "$RUNUSER" -c "export STASH_HOME=${STASH_HOME};${STASH_INSTALLDIR}/bin/$1" else export STASH_HOME=${STASH_HOME};${STASH_INSTALLDIR}/bin/$1 fi } # # Function that starts the daemon/service # do_start() { run_with_home start-stash.sh } # # Function that stops the daemon/service # do_stop() { if [ -e $PIDFILE ]; then run_with_home stop-stash.sh else log_failure_msg "$NAME is not running." fi } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) if [ ! -e $PIDFILE ]; then log_failure_msg "$NAME is not running." return 1 fi status_of_proc -p $PIDFILE "" $NAME && exit 0 || exit $? ;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac
To start on system boot, add the script to the start up process.
For Ubuntu (and other Debian derivatives) use:
update-rc.d stash defaults
For RHEL (and derivates) use:
chkconfig --add stash --level 0356
Note: You may have to install the redhat-lsb
package on RHEL (or derivatives) to provide the LSB functions used in the script.
Verify that the Stash service comes back up after restarting the machine.
Thanks to Patrick Nelson for calling out this approach, which he set up for a Fedora system. This approach does not restart Stash if it stops by itself.
Create a stash.service
file in your /usr/lib/systemd/system/
directory with the following lines:
[Unit] Description=Atlassian Stash Service After=syslog.target network.target [Service] Type=forking ExecStart=/opt/atlassian-stash-2.5.0/bin/start-stash.sh ExecStop=/opt/atlassian-stash-2.5.0/bin/stop-stash.sh [Install] WantedBy=multi-user.target
The values for ExecStart
and ExecStop
should be adjusted to match the path to your <Stash installation directory>
.
Enable the service to start at boot time by running the following in a terminal:
systemctl enable stash.service
systemctl disable stash.service
if [ -f /etc/systemd/system/*.wants/stash.service ]; then echo "On"; else echo "Off";fi
systemctl start stash systemctl stop stash
systemctl status stash