~ubuntu-branches/debian/stretch/resource-agents/stretch

« back to all changes in this revision

Viewing changes to heartbeat/tomcat

  • Committer: Bazaar Package Importer
  • Author(s): Andres Rodriguez
  • Date: 2011-06-10 16:26:35 UTC
  • Revision ID: james.westby@ubuntu.com-20110610162635-yiy0vfopqw4trzgx
Tags: upstream-3.9.0
ImportĀ upstreamĀ versionĀ 3.9.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
#
 
3
# Description:  Manages a Tomcat Server as an OCF High-Availability
 
4
#               resource under Heartbeat/LinuxHA control
 
5
#
 
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.
 
10
 
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.
 
15
 
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  
 
19
# 02110-1301, USA.
 
20
#
 
21
# Copyright (c) 2007 NIPPON TELEGRAPH AND TELEPHONE CORPORATION
 
22
#
 
23
#######################################################################
 
24
# OCF parameters:
 
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
###############################################################################
 
41
 
 
42
 
 
43
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
 
44
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
 
45
 
 
46
############################################################################
 
47
# Usage
 
48
usage() 
 
49
{
 
50
        cat <<-!
 
51
usage: $0 action
 
52
 
 
53
action:
 
54
        start   start Tomcat
 
55
 
 
56
        stop    stop Tomcat
 
57
 
 
58
        status  return the status of Tomcat, up or down
 
59
 
 
60
        monitor  return TRUE if Tomcat appears to be working.
 
61
                 You have to have installed $WGETNAME for this to work.
 
62
 
 
63
        meta-data       show meta data message
 
64
 
 
65
        validate-all    validate the instance parameters
 
66
!
 
67
}
 
68
 
 
69
############################################################################
 
70
# Check tomcat service availability
 
71
isrunning_tomcat()
 
72
{
 
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
 
77
        fi
 
78
        $WGET -O /dev/null $RESOURCE_STATUSURL >/dev/null 2>&1
 
79
}
 
80
 
 
81
############################################################################
 
82
 
83
isalive_tomcat()
 
84
{
 
85
        pgrep -f "${SEARCH_STR}" > /dev/null 
 
86
}
 
87
############################################################################
 
88
# Check tomcat process and service availability
 
89
monitor_tomcat()
 
90
{
 
91
        isalive_tomcat ||
 
92
                return $OCF_NOT_RUNNING
 
93
        isrunning_tomcat ||
 
94
                return $OCF_NOT_RUNNING
 
95
        return $OCF_SUCCESS
 
96
}
 
97
 
 
98
############################################################################
 
99
# Execute catalina.out log rotation
 
100
rotate_catalina_out()
 
101
{
 
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
 
107
        else
 
108
                ocf_log warn "rotatelogs command not found."
 
109
                return 1
 
110
        fi
 
111
 
 
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
 
116
 
 
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 &
 
121
}
 
122
 
 
123
############################################################################
 
124
# Start Tomcat
 
125
start_tomcat()
 
126
{
 
127
        cd "$CATALINA_HOME/bin"
 
128
 
 
129
        monitor_tomcat
 
130
        if [ $? = $OCF_SUCCESS ]; then
 
131
                return $OCF_SUCCESS
 
132
        fi
 
133
 
 
134
        #ocf_log debug "catalina.out rotation FLG = ${CATALINA_ROTATE_LOG}"
 
135
        if [ ${CATALINA_ROTATE_LOG} = "YES" ]; then
 
136
                rotate_catalina_out
 
137
                if [ $? = 0 ]; then
 
138
                        ocf_log debug "Rotate catalina.out succeeded."
 
139
                else
 
140
                        ocf_log warn "Rotate catalina.out failed. Starting tomcat without catalina.out rotation."
 
141
                fi
 
142
        fi
 
143
        
 
144
        echo "`date "+%Y/%m/%d %T"`: start ===========================" >> "$TOMCAT_CONSOLE"
 
145
 
 
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 &
 
150
        else
 
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}
 
159
END_TOMCAT_START
 
160
        fi
 
161
 
 
162
        while true; do
 
163
                monitor_tomcat
 
164
                if [ $? = $OCF_SUCCESS ]; then
 
165
                        break
 
166
                fi
 
167
                ocf_log debug "start_tomcat[$TOMCAT_NAME]: retry monitor_tomcat"
 
168
                sleep 3
 
169
        done
 
170
 
 
171
        return $OCF_SUCCESS
 
172
}
 
173
 
 
174
############################################################################
 
175
# Stop Tomcat
 
176
stop_tomcat()
 
177
{
 
178
        STOP_TIMEOUT=$((OCF_RESKEY_CRM_meta_timeout/1000-1))
 
179
 
 
180
        cd "$CATALINA_HOME/bin"
 
181
 
 
182
        echo "`date "+%Y/%m/%d %T"`: stop  ###########################" >> "$TOMCAT_CONSOLE"
 
183
 
 
184
        if [ "$RESOURCE_TOMCAT_USER" = RUNASIS ]; then
 
185
                "$CATALINA_HOME/bin/catalina.sh" stop $STOP_TIMEOUT -force \
 
186
                        >> "$TOMCAT_CONSOLE" 2>&1
 
187
        else
 
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
 
195
END_TOMCAT_STOP
 
196
        fi
 
197
 
 
198
        lapse_sec=0
 
199
        while isalive_tomcat; do
 
200
                sleep 1
 
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}"
 
204
        done
 
205
 
 
206
        if [ ${CATALINA_ROTATE_LOG} = "YES" ]; then
 
207
                rm -f "$CATALINA_PID" "${CATALINA_HOME}/logs/catalina.out"
 
208
        else
 
209
                rm -f "$CATALINA_PID"
 
210
        fi
 
211
        return $OCF_SUCCESS
 
212
}
 
213
 
 
214
status_tomcat()
 
215
{
 
216
        return $OCF_SUCCESS
 
217
}
 
218
 
 
219
 
 
220
metadata_tomcat()
 
221
{
 
222
    cat <<END
 
223
<?xml version="1.0"?>
 
224
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
 
225
<resource-agent name="tomcat">
 
226
<version>1.0</version>
 
227
 
 
228
<longdesc lang="en">
 
229
Resource script for Tomcat. It manages a Tomcat instance as a cluster resource.
 
230
</longdesc>
 
231
<shortdesc lang="en">Manages a Tomcat servlet environment instance</shortdesc>
 
232
 
 
233
<parameters>
 
234
 
 
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.
 
240
]]></longdesc>
 
241
<shortdesc>The name of the resource</shortdesc>
 
242
<content type="string" default="" />
 
243
</parameter>
 
244
 
 
245
<parameter name="script_log" unique="1">
 
246
<longdesc lang="en">
 
247
Log file, used during start and stop operations.
 
248
</longdesc>
 
249
<shortdesc>Log file</shortdesc>
 
250
<content type="string" default="" />
 
251
</parameter>
 
252
 
 
253
<parameter name="tomcat_stop_timeout" unique="0">
 
254
<longdesc lang="en">
 
255
Time-out for stop operation. DEPRECATED
 
256
</longdesc>
 
257
<shortdesc>Time-out for the stop operation. DEPRECATED</shortdesc>
 
258
<content type="integer" default="" />
 
259
</parameter>
 
260
 
 
261
<parameter name="tomcat_suspend_trialcount" unique="0">
 
262
<longdesc lang="en">
 
263
Maximum number of times to retry stop operation before suspending
 
264
and killing Tomcat. DEPRECATED. Does not retry.
 
265
</longdesc>
 
266
<shortdesc>Max retry count for stop operation. DEPRECATED</shortdesc>
 
267
<content type="integer" default="" />
 
268
</parameter>
 
269
 
 
270
<parameter name="tomcat_user" unique="0">
 
271
<longdesc lang="en">
 
272
The user who starts Tomcat.
 
273
</longdesc>
 
274
<shortdesc>The user who starts Tomcat</shortdesc>
 
275
<content type="string" default="" />
 
276
</parameter>
 
277
 
 
278
<parameter name="statusurl" unique="0">
 
279
<longdesc lang="en">
 
280
URL for state confirmation.
 
281
</longdesc>
 
282
<shortdesc>URL for state confirmation</shortdesc>
 
283
<content type="string" default="" />
 
284
</parameter>
 
285
 
 
286
<parameter name="java_home" unique="0" required="1">
 
287
<longdesc lang="en">
 
288
Home directory of Java.
 
289
</longdesc>
 
290
<shortdesc>Home directory of Java</shortdesc>
 
291
<content type="string" default="" />
 
292
</parameter>
 
293
 
 
294
<parameter name="java_opts" unique="0">
 
295
<longdesc lang="en">
 
296
Java JVM options used on start and stop.
 
297
</longdesc>
 
298
<shortdesc>Java options parsed to JVM, used on start and stop.</shortdesc>
 
299
<content type="string" default="" />
 
300
</parameter>
 
301
 
 
302
<parameter name="catalina_home" unique="1" required="1">
 
303
<longdesc lang="en">
 
304
Home directory of Tomcat.
 
305
</longdesc>
 
306
<shortdesc>Home directory of Tomcat</shortdesc>
 
307
<content type="string" default="" />
 
308
</parameter>
 
309
 
 
310
<parameter name="catalina_base" unique="1">
 
311
<longdesc lang="en">
 
312
Instance directory of Tomcat
 
313
</longdesc>
 
314
<shortdesc>Instance directory of Tomcat, defaults to catalina_home</shortdesc>
 
315
<content type="string" default="" />
 
316
</parameter>
 
317
 
 
318
<parameter name="catalina_pid" unique="1">
 
319
<longdesc lang="en">
 
320
A PID file name for Tomcat.
 
321
</longdesc>
 
322
<shortdesc>A PID file name for Tomcat</shortdesc>
 
323
<content type="string" default="" />
 
324
</parameter>
 
325
 
 
326
<parameter name="tomcat_start_opts" unique="0">
 
327
<longdesc lang="en">
 
328
Tomcat start options.
 
329
</longdesc>
 
330
<shortdesc>Tomcat start options</shortdesc>
 
331
<content type="string" default="" />
 
332
</parameter>
 
333
 
 
334
<parameter name="catalina_opts" unique="0">
 
335
<longdesc lang="en">
 
336
Catalina options, for the start operation only.
 
337
</longdesc>
 
338
<shortdesc>Catalina options</shortdesc>
 
339
<content type="string" default="" />
 
340
</parameter>
 
341
 
 
342
<parameter name="catalina_rotate_log" unique="0">
 
343
<longdesc lang="en">
 
344
Rotate catalina.out flag.
 
345
</longdesc>
 
346
<shortdesc>Rotate catalina.out flag</shortdesc>
 
347
<content type="string" default="" />
 
348
</parameter>
 
349
 
 
350
<parameter name="catalina_rotatetime" unique="0">
 
351
<longdesc lang="en">
 
352
catalina.out rotation interval (seconds).
 
353
</longdesc>
 
354
<shortdesc>catalina.out rotation interval (seconds)</shortdesc>
 
355
<content type="integer" default="" />
 
356
</parameter>
 
357
 
 
358
</parameters>
 
359
 
 
360
<actions>
 
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"/>
 
367
</actions>
 
368
</resource-agent>
 
369
END
 
370
        return $OCF_SUCCESS
 
371
}
 
372
 
 
373
validate_all_tomcat()
 
374
{
 
375
        ocf_log info "validate_all_tomcat[$TOMCAT_NAME]"
 
376
        return $OCF_SUCCESS
 
377
}
 
378
 
 
379
#
 
380
### tomcat RA environment variables
 
381
#
 
382
 
 
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}"
 
387
 
 
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}"
 
393
 
 
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}"
 
399
 
 
400
export JAVA_HOME JAVA_OPTS CATALINA_HOME CATALINA_BASE CATALINA_PID CATALINA_OPTS
 
401
 
 
402
JAVA=${JAVA_HOME}/bin/java
 
403
 
 
404
#
 
405
# ------------------
 
406
# the main script
 
407
# ------------------
 
408
 
409
 
 
410
COMMAND=$1
 
411
 
 
412
case "$COMMAND" in
 
413
        start)
 
414
                ocf_log debug  "[$TOMCAT_NAME] Enter tomcat start"
 
415
                start_tomcat
 
416
                func_status=$?
 
417
                ocf_log debug  "[$TOMCAT_NAME] Leave tomcat start $func_status"
 
418
                exit $func_status
 
419
                ;;
 
420
        stop)
 
421
                ocf_log debug  "[$TOMCAT_NAME] Enter tomcat stop"
 
422
                stop_tomcat
 
423
                func_status=$?
 
424
                ocf_log debug  "[$TOMCAT_NAME] Leave tomcat stop $func_status"
 
425
                exit $func_status
 
426
                ;;
 
427
        status)
 
428
                status_tomcat
 
429
                exit $?
 
430
                ;;
 
431
        monitor)
 
432
                #ocf_log debug  "[$TOMCAT_NAME] Enter tomcat monitor"
 
433
                monitor_tomcat
 
434
                func_status=$?
 
435
                #ocf_log debug  "[$TOMCAT_NAME] Leave tomcat monitor $func_status"
 
436
                exit $func_status
 
437
                ;;
 
438
        meta-data)
 
439
                metadata_tomcat
 
440
                exit $?
 
441
                ;;
 
442
        validate-all)
 
443
                validate_all_tomcat
 
444
                exit $?
 
445
                ;;
 
446
        usage|help)
 
447
                usage
 
448
                exit $OCF_SUCCESS
 
449
                ;;
 
450
        *)
 
451
                usage
 
452
                exit $OCF_ERR_UNIMPLEMENTED
 
453
                ;;
 
454
esac
 
455