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?
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.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 acatalina.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"
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 runcatalina.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.
Was this helpful?