Running Bitbucket Server as a Linux service

  • The Bitbucket Server installer for Linux installs Bitbucket Server as a service – see  Getting started . The information on this page only applies if you are manually installing or upgrading Bitbucket Server.
  • 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, Bitbucket Server should be configured to run as a Linux service, that is, as a daemon process. This has the following advantages:

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

This page describes the following approaches to running Bitbucket Server as a service on Linux:

  • Use the Java Service Wrapper, which allows a Java application to be run as a UNIX daemon.
  • Use an  init.d script to start Bitbucket Server at boot time - this doesn't restart Bitbucket Server if it stops for some reason.
  • Use a systemd unit file to start Bitbucket Server at boot time - this doesn't restart Bitbucket Server if it stops for some reason.

Note that Bitbucket Server 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

Bitbucket Server 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 Bitbucket Server, 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 Bitbucket Server.
  • The ability to run Bitbucket Server in the background as a service, for improved convenience, system performance and security.
  • Bitbucket Server 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 Bitbucket Server unless they are an administrator.
  • Can provide advanced failover, error recovery, and analysis features to make sure that Bitbucket Server 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 Bitbucket Server if it stops by itself.

  1. Stop Bitbucket Server .
  2. Create a bitbucket user, set the permissions to that user, create a home directory for Bitbucket Server and create a symlink to make upgrades easier:

    $> curl -OL http://downloads.atlassian.com/software/bitbucket/downloads/atlassian-bitbucket-X.Y.Z.tar.gz
    $> tar xz -C /opt -f atlassian-bitbucket-X.Y.Z.tar.gz
    $> ln -s /opt/atlassian-bitbucket-X.Y.Z /opt/atlassian-bitbucket-latest
     
    # Create a home directory
    $> mkdir /opt/bitbucket-home
     
    # ! Update permissions and ownership accordingly

    (Be sure to replace X.Y.Z in the above commands with the version number of Bitbucket Server.)

  3. Create the startup script in /etc/init.d/bitbucket with the following contents (Ensure the script is executable by running chmod 755 bitbucket):

    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          bitbucket
    # 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 Bitbucket Server
    # Description:  Automatically start Atlassian Bitbucket Server when the system starts up.
    #               Provide commands for manually starting and stopping Bitbucket Server.
    ### END INIT INFO
    
    # Adapt the following lines to your configuration
    # RUNUSER: The user to run Bitbucket Server as.
    RUNUSER=vagrant
    
    # BITBUCKET_INSTALLDIR: The path to the Bitbucket Server installation directory
    BITBUCKET_INSTALLDIR="/opt/atlassian-bitbucket-X.Y.Z"
    
    # BITBUCKET_HOME: Path to the Bitbucket home directory
    BITBUCKET_HOME="/opt/bitbucket-home"
    
    # ==================================================================================
    # ==================================================================================
    # ==================================================================================
    
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Atlassian Bitbucket Server"
    NAME=bitbucket
    PIDFILE=$BITBUCKET_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 BITBUCKET_HOME=${BITBUCKET_HOME};${BITBUCKET_INSTALLDIR}/bin/$1"
        else
            export BITBUCKET_HOME=${BITBUCKET_HOME};${BITBUCKET_INSTALLDIR}/bin/$1
        fi
    }
    
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
        run_with_home start-bitbucket.sh
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
        if [ -e $PIDFILE ]; then
          run_with_home stop-bitbucket.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

Running on system boot

  1. To start on system boot, add the script to the start up process.
    For Ubuntu (and other Debian derivatives) use:

    update-rc.d bitbucket defaults


    For RHEL (and derivates) use:

    chkconfig --add bitbucket --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.

  2. Verify that the Bitbucket Server service comes back up after restarting the machine.

 

Using a systemd unit file

Thanks to Patrick Nelson for calling out this approach, which he set up for a Fedora system. It also works on other distributions that use systemd as the init system. This approach does not restart Bitbucket Server if it stops by itself.

  1. Create a bitbucket.service file in your /etc/systemd/system/ directory with the following lines:

    [Unit]
    Description=Atlassian Bitbucket Server Service
    After=syslog.target network.target
     
    [Service]
    Type=forking
    User=atlbitbucket
    ExecStart=/opt/atlassian-bitbucket-X.Y.Z/bin/start-bitbucket.sh
    ExecStop=/opt/atlassian-bitbucket-X.Y.Z/bin/stop-bitbucket.sh
     
    [Install]
    WantedBy=multi-user.target


    The value for User should be adjusted to match the user that Bitbucket Server runs as. ExecStart and ExecStop should be adjusted to match the path to your <Bitbucket Server installation directory>.

  2. Enable the service to start at boot time by running the following in a terminal:

    systemctl enable bitbucket.service
  3. Stop Bitbucket Server, then restart the system, to check that Bitbucket Server starts as expected.
  4. Use the following commands to manage the service:
    Disable the service:
    systemctl disable bitbucket.service
    Check that the service is set to start at boot time:
    if [ -f /etc/systemd/system/*.wants/bitbucket.service ]; then echo "On"; else echo "Off"; fi
    Manually start and stop the service: 
    systemctl start bitbucket
    systemctl stop bitbucket
    Check the status of Bitbucket Server:
    systemctl status bitbucket
Last modified on Sep 17, 2015

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.