3
# Description: Manages a Tomcat Server as an OCF High-Availability
4
# resource under Heartbeat/LinuxHA control
6
# This program is free software; you can redistribute it and/or
7
# modify it under the terms of the GNU General Public License
8
# as published by the Free Software Foundation; either version 2
9
# of the License, or (at your option) any later version.
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
# Copyright (c) 2007 NIPPON TELEGRAPH AND TELEPHONE CORPORATION
23
#######################################################################
25
# OCF_RESKEY_tomcat_name - The name of the resource. Default is tomcat
26
# OCF_RESKEY_script_log - A destination of the log of this script. Default /var/log/OCF_RESKEY_tomcat_name.log
27
# OCF_RESKEY_tomcat_stop_timeout - Time-out at the time of the stop. Default is 5. DEPRECATED
28
# OCF_RESKEY_tomcat_suspend_trialcount - The re-try number of times awaiting a stop. Default is 10. DEPRECATED
29
# OCF_RESKEY_tomcat_user - A user name to start a resource. Default is root
30
# OCF_RESKEY_statusurl - URL for state confirmation. Default is http://127.0.0.1:8080
31
# OCF_RESKEY_java_home - Home directory of Java. Default is none
32
# OCF_RESKEY_java_opts - Options to pass to Java JVM for start and stop. Default is none
33
# OCF_RESKEY_catalina_home - Home directory of Tomcat. Default is none
34
# OCF_RESKEY_catalina_base - Base directory of Tomcat. Default is OCF_RESKEY_catalina_home
35
# OCF_RESKEY_catalina_pid - A PID file name of Tomcat. Default is OCF_RESKEY_catalina_home/logs/catalina.pid
36
# OCF_RESKEY_tomcat_start_opts - Start options of Tomcat. Default is none.
37
# OCF_RESKEY_catalina_opts - CATALINA_OPTS environment variable. Default is none.
38
# OCF_RESKEY_catalina_rotate_log - Control catalina.out logrotation flag. Default is NO.
39
# OCF_RESKEY_catalina_rotatetime - catalina.out logrotation time span(seconds). Default is 86400.
40
###############################################################################
43
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
44
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
46
############################################################################
58
status return the status of Tomcat, up or down
60
monitor return TRUE if Tomcat appears to be working.
61
You have to have installed $WGETNAME for this to work.
63
meta-data show meta data message
65
validate-all validate the instance parameters
69
############################################################################
70
# Check tomcat service availability
73
if ! have_binary $WGET; then
74
ocf_log err "Monitoring not supported by $OCF_RESOURCE_INSTANCE"
75
ocf_log info "Please make sure that wget is available"
76
return $OCF_ERR_CONFIGURED
78
$WGET -O /dev/null $RESOURCE_STATUSURL >/dev/null 2>&1
81
############################################################################
85
pgrep -f "${SEARCH_STR}" > /dev/null
87
############################################################################
88
# Check tomcat process and service availability
92
return $OCF_NOT_RUNNING
94
return $OCF_NOT_RUNNING
98
############################################################################
99
# Execute catalina.out log rotation
100
rotate_catalina_out()
102
# Look for rotatelogs/rotatelogs2
103
if [ -x /usr/sbin/rotatelogs ]; then
104
ROTATELOGS=/usr/sbin/rotatelogs
105
elif [ -x /usr/sbin/rotatelogs2 ]; then
106
ROTATELOGS=/usr/sbin/rotatelogs2
108
ocf_log warn "rotatelogs command not found."
112
# Clean up and set permissions on required files
113
rm -rf "$CATALINA_HOME"/temp/* "$CATALINA_HOME/logs/catalina.out"
114
mkfifo -m700 "$CATALINA_HOME/logs/catalina.out"
115
chown --dereference "$RESOURCE_TOMCAT_USER" "$CATALINA_HOME/logs/catalina.out" || true
117
# -s is required because tomcat5.5's login shell is /bin/false
118
su - -s /bin/sh $RESOURCE_TOMCAT_USER \
119
-c "$ROTATELOGS -l \"$CATALINA_HOME/logs/catalina_%F.log\" $CATALINA_ROTATETIME" \
120
< "$CATALINA_HOME/logs/catalina.out" > /dev/null 2>&1 &
123
############################################################################
127
cd "$CATALINA_HOME/bin"
130
if [ $? = $OCF_SUCCESS ]; then
134
#ocf_log debug "catalina.out rotation FLG = ${CATALINA_ROTATE_LOG}"
135
if [ ${CATALINA_ROTATE_LOG} = "YES" ]; then
138
ocf_log debug "Rotate catalina.out succeeded."
140
ocf_log warn "Rotate catalina.out failed. Starting tomcat without catalina.out rotation."
144
echo "`date "+%Y/%m/%d %T"`: start ===========================" >> "$TOMCAT_CONSOLE"
146
ocf_log debug "CATALINA_OPTS value = ${CATALINA_OPTS}"
147
if [ "$RESOURCE_TOMCAT_USER" = RUNASIS ]; then
148
"$CATALINA_HOME/bin/catalina.sh" start $TOMCAT_START_OPTS \
149
>> "$TOMCAT_CONSOLE" 2>&1 &
151
cat<<-END_TOMCAT_START | su - -s /bin/sh "$RESOURCE_TOMCAT_USER" >> "$TOMCAT_CONSOLE" 2>&1 &
152
export JAVA_HOME=${JAVA_HOME}
153
export JAVA_OPTS="${JAVA_OPTS}"
154
export CATALINA_HOME=${CATALINA_HOME}
155
export CATALINA_BASE=${CATALINA_BASE}
156
export CATALINA_PID=${CATALINA_PID}
157
export CATALINA_OPTS="${CATALINA_OPTS}"
158
$CATALINA_HOME/bin/catalina.sh start ${TOMCAT_START_OPTS}
164
if [ $? = $OCF_SUCCESS ]; then
167
ocf_log debug "start_tomcat[$TOMCAT_NAME]: retry monitor_tomcat"
174
############################################################################
178
STOP_TIMEOUT=$((OCF_RESKEY_CRM_meta_timeout/1000-1))
180
cd "$CATALINA_HOME/bin"
182
echo "`date "+%Y/%m/%d %T"`: stop ###########################" >> "$TOMCAT_CONSOLE"
184
if [ "$RESOURCE_TOMCAT_USER" = RUNASIS ]; then
185
"$CATALINA_HOME/bin/catalina.sh" stop $STOP_TIMEOUT -force \
186
>> "$TOMCAT_CONSOLE" 2>&1
188
cat<<-END_TOMCAT_STOP | su - -s /bin/sh "$RESOURCE_TOMCAT_USER" >> "$TOMCAT_CONSOLE" 2>&1
189
export JAVA_HOME=${JAVA_HOME}
190
export JAVA_OPTS="${JAVA_OPTS}"
191
export CATALINA_HOME=${CATALINA_HOME}
192
export CATALINA_BASE=${CATALINA_BASE}
193
export CATALINA_PID=${CATALINA_PID}
194
$CATALINA_HOME/bin/catalina.sh stop $STOP_TIMEOUT -force
199
while isalive_tomcat; do
201
lapse_sec=`expr $lapse_sec + 1`
202
ocf_log debug "stop_tomcat[$TOMCAT_NAME]: stop failed, killing with SIGKILL ($lapse_sec)"
203
pkill -KILL -f "${SEARCH_STR}"
206
if [ ${CATALINA_ROTATE_LOG} = "YES" ]; then
207
rm -f "$CATALINA_PID" "${CATALINA_HOME}/logs/catalina.out"
209
rm -f "$CATALINA_PID"
223
<?xml version="1.0"?>
224
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
225
<resource-agent name="tomcat">
226
<version>1.0</version>
229
Resource script for Tomcat. It manages a Tomcat instance as a cluster resource.
231
<shortdesc lang="en">Manages a Tomcat servlet environment instance</shortdesc>
235
<parameter name="tomcat_name" unique="1" >
236
<longdesc lang="en"><![CDATA[
237
The name of the resource, added as a Java parameter in JAVA_OPTS:
238
-Dname=<tomcat_name> to Tomcat process on start. Used to ensure
239
process is still running and must be unique.
241
<shortdesc>The name of the resource</shortdesc>
242
<content type="string" default="" />
245
<parameter name="script_log" unique="1">
247
Log file, used during start and stop operations.
249
<shortdesc>Log file</shortdesc>
250
<content type="string" default="" />
253
<parameter name="tomcat_stop_timeout" unique="0">
255
Time-out for stop operation. DEPRECATED
257
<shortdesc>Time-out for the stop operation. DEPRECATED</shortdesc>
258
<content type="integer" default="" />
261
<parameter name="tomcat_suspend_trialcount" unique="0">
263
Maximum number of times to retry stop operation before suspending
264
and killing Tomcat. DEPRECATED. Does not retry.
266
<shortdesc>Max retry count for stop operation. DEPRECATED</shortdesc>
267
<content type="integer" default="" />
270
<parameter name="tomcat_user" unique="0">
272
The user who starts Tomcat.
274
<shortdesc>The user who starts Tomcat</shortdesc>
275
<content type="string" default="" />
278
<parameter name="statusurl" unique="0">
280
URL for state confirmation.
282
<shortdesc>URL for state confirmation</shortdesc>
283
<content type="string" default="" />
286
<parameter name="java_home" unique="0" required="1">
288
Home directory of Java.
290
<shortdesc>Home directory of Java</shortdesc>
291
<content type="string" default="" />
294
<parameter name="java_opts" unique="0">
296
Java JVM options used on start and stop.
298
<shortdesc>Java options parsed to JVM, used on start and stop.</shortdesc>
299
<content type="string" default="" />
302
<parameter name="catalina_home" unique="1" required="1">
304
Home directory of Tomcat.
306
<shortdesc>Home directory of Tomcat</shortdesc>
307
<content type="string" default="" />
310
<parameter name="catalina_base" unique="1">
312
Instance directory of Tomcat
314
<shortdesc>Instance directory of Tomcat, defaults to catalina_home</shortdesc>
315
<content type="string" default="" />
318
<parameter name="catalina_pid" unique="1">
320
A PID file name for Tomcat.
322
<shortdesc>A PID file name for Tomcat</shortdesc>
323
<content type="string" default="" />
326
<parameter name="tomcat_start_opts" unique="0">
328
Tomcat start options.
330
<shortdesc>Tomcat start options</shortdesc>
331
<content type="string" default="" />
334
<parameter name="catalina_opts" unique="0">
336
Catalina options, for the start operation only.
338
<shortdesc>Catalina options</shortdesc>
339
<content type="string" default="" />
342
<parameter name="catalina_rotate_log" unique="0">
344
Rotate catalina.out flag.
346
<shortdesc>Rotate catalina.out flag</shortdesc>
347
<content type="string" default="" />
350
<parameter name="catalina_rotatetime" unique="0">
352
catalina.out rotation interval (seconds).
354
<shortdesc>catalina.out rotation interval (seconds)</shortdesc>
355
<content type="integer" default="" />
361
<action name="start" timeout="60s" />
362
<action name="stop" timeout="120s" />
363
<action name="status" timeout="60" />
364
<action name="monitor" depth="0" timeout="30s" interval="10s" />
365
<action name="meta-data" timeout="5s" />
366
<action name="validate-all" timeout="5"/>
373
validate_all_tomcat()
375
ocf_log info "validate_all_tomcat[$TOMCAT_NAME]"
380
### tomcat RA environment variables
383
TOMCAT_NAME="${OCF_RESKEY_tomcat_name-tomcat}"
384
TOMCAT_CONSOLE="${OCF_RESKEY_script_log-/var/log/$TOMCAT_NAME.log}"
385
RESOURCE_TOMCAT_USER="${OCF_RESKEY_tomcat_user-RUNASIS}"
386
RESOURCE_STATUSURL="${OCF_RESKEY_statusurl-http://127.0.0.1:8080}"
388
JAVA_HOME="${OCF_RESKEY_java_home}"
389
JAVA_OPTS="${OCF_RESKEY_java_opts}"
390
CATALINA_HOME="${OCF_RESKEY_catalina_home}"
391
CATALINA_BASE="${OCF_RESKEY_catalina_base-${OCF_RESKEY_catalina_home}}"
392
CATALINA_PID="${OCF_RESKEY_catalina_pid-$CATALINA_HOME/logs/catalina.pid}"
394
TOMCAT_START_OPTS="${OCF_RESKEY_tomcat_start_opts}"
395
CATALINA_OPTS="-Dname=$TOMCAT_NAME ${OCF_RESKEY_catalina_opts}"
396
CATALINA_ROTATE_LOG="${OCF_RESKEY_catalina_rotate_log-NO}"
397
CATALINA_ROTATETIME="${OCF_RESKEY_catalina_rotatetime-86400}"
398
SEARCH_STR="\\""${CATALINA_OPTS}"
400
export JAVA_HOME JAVA_OPTS CATALINA_HOME CATALINA_BASE CATALINA_PID CATALINA_OPTS
402
JAVA=${JAVA_HOME}/bin/java
414
ocf_log debug "[$TOMCAT_NAME] Enter tomcat start"
417
ocf_log debug "[$TOMCAT_NAME] Leave tomcat start $func_status"
421
ocf_log debug "[$TOMCAT_NAME] Enter tomcat stop"
424
ocf_log debug "[$TOMCAT_NAME] Leave tomcat stop $func_status"
432
#ocf_log debug "[$TOMCAT_NAME] Enter tomcat monitor"
435
#ocf_log debug "[$TOMCAT_NAME] Leave tomcat monitor $func_status"
452
exit $OCF_ERR_UNIMPLEMENTED