Running Bitbucket Server as a Linux service
This page describes how to run Bitbucket Server as a Linux service, and only applies if you are manually installing or upgrading Bitbucket Server from an archive file. See the page Install Bitbucket Server from an archive file for more details.
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.
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.
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.
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.
- Stop Bitbucket Server.
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 https://www.atlassian.com/software/stash/downloads/binary/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.)
Create the startup script in
/etc/init.d/bitbucket
with the following contents (Ensure the script is executable by runningchmod 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_HOME/log/bitbucket.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
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.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.
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 forUser
should be adjusted to match the user that Bitbucket Server runs as.ExecStart
andExecStop
should be adjusted to match the path to your<Bitbucket Server installation directory>
.Enable the service to start at boot time by running the following in a terminal:
systemctl enable bitbucket.service
- Stop Bitbucket Server, then restart the system, to check that Bitbucket Server starts as expected.
- 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