Jira server does not terminate after executing shutdown script

Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Symptoms

After stopping a JIRA application on Linux, Unix, or OS X via shutdown.sh or stop-jira.sh or catalina.sh stop, the java process never terminates.

Diagnosis

To assess whether the service is still running, run ps -A | grep jira.

Resolution

To kill the java process and stop JIRA,

Pass the -force parameter to catalina.sh as:

1 catalina.sh stop -force

Still not shutting down properly?

  1. If the above results in an error, such as:

    1 Kill failed: $CATALINA_PID not set

    Add the following line of code to the top of your <JIRA-Installation-Directory>/bin/setenv.sh file (Standalone instance):

    1 2 CATALINA_PID="<Change this to your preferred location>/id.pid" export CATALINA_PID

    Tomcat will automatically write its process id to id.pid in your specified path and kill its process with the -force parameter.

  2. In addition to the above, you can try a custom script that runs shutdown.sh first before forcing Tomcat to shutdown. This script will sleep 60 seconds then look inside ./id.pid to check if Tomcat is still running. If Tomcat is still running, it will issue a catalina.sh stop -force.

    jiraForceShutdownScript1.sh

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/sh blah="" temp=`ps aux|grep jira|grep -v grep|awk '{print $2}'` if [ "$temp" == "$blah" ] then echo 'JIRA is not running' exit 0 fi echo 'Shutting down JIRA' ./shutdown.sh echo 'sleeping 60 seconds' sleep 60 num=`cat id.pid|awk '{print $1}'` echo 'Tomcat Process id is: ' "$num" echo 'Now checking if JIRA is still running...' if [ "$num" == "$temp" ] then echo 'Force killing Tomcat now...' ./catalina.sh stop -force $num echo 'Killed' else echo 'Tomcat is already shutdown' fi echo echo "...done"

  3. Also, there is this script which forces the application to shutdown and deletes the lock file in the application home directory. It will look inside ./id.pid for the process ID and run catalina.sh stop -force for that process.

    jiraForceShutdownScript2.sh

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/sh JIRA_HOME="../data/" pid=`cat id.pid` if [ -z $pid ]; then echo "JIRA is not running!" else echo 'Force killing JIRA now...' ./catalina.sh stop -force $pid rm $JIRA_HOME.jira-home.lock rm id.pid echo echo "...done!" fi

    ℹ️ Both scripts need to be saved in <JIRA install>/bin and assume id.pid is located in the same location.

Updated on April 17, 2025

Still need help?

The Atlassian Community is here for you.