Stash is now known as Bitbucket Server.
See the

Unknown macro: {spacejump}

of this page, or visit the Bitbucket Server documentation home page.

System administration tasks are not supported by Atlassian. These instructions are only provided as a guide and may not be up to date with the latest version of your operating system.

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:

  • Stash can be automatically restarted when the operating system restarts.
  • Stash can be automatically restarted if it stops for some reason.
  • Stash is less likely to be accidentally shut down, as can happen if the terminal Stash was manually started in is closed.
  • Logs from the Stash JVM can be properly managed by the service.

There are different approaches to running Stash as a service on Linux:

  • Use the Java Service Wrapper which a Java Application to be run as a UNIX Daemon.
  • Use an init.d 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:

Using the Java Service Wrapper

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:

  • Allows Stash, which is a Java application, to be run as a service.
  • No need for a user to be logged on to the system at all times, or for a command prompt to be open and running on the desktop to be able to run Stash.
  • The ability to run Stash in the background as a service, for improved convenience, system performance and security.
  • Stash is launched automatically on system startup and does not require that a user be logged in. 
  • Users are not able to stop, start, or otherwise tamper with Stash unless they are an administrator.
  • Can provide advanced failover, error recovery, and analysis features to make sure that Stash has the maximum possible uptime.

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.

Using an init.d script

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.

  1. Stop Stash .
  2. 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
  3. 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=stash
    # STASH_INSTALLDIR: The path to the Stash installation directory
    STASH_INSTALLDIR="/opt/atlassian-stash-latest"
    # 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
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
    # 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
    
  4. 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
  5. Verify that the Stash service comes back up after restarting the machine.
  • No labels