summaryrefslogtreecommitdiff
blob: e24dd247be8d16daec6a8d762ec76ac6faa12146 (plain)
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/sbin/runscript 
# Zope rc-script for Gentoo Linux
# Copyright 2002-2003 by Jason Shoemaker
# Distributed under the terms of the GNU General Public License, v2 or later.
# $Header: /var/cvsroot/gentoo-x86/net-zope/zope/files/2.6.1/zope.initd,v 1.2 2003/11/15 11:22:15 lanius Exp $

python=

depend() 
{
    need net
}

# Since zope doesn't delete its .pid file when done, we have to determine its 
# status. Zope can be shutdown from a browser...this bypasses init.d. 

# Need to export these conf.d variables so that (env) can use them

setup_exports()
{
local EXPORT_LST="INSTANCE_HOME SOFTWARE_HOME ZOPE_HOME FORCE_PRODUCT_LOAD \
PROFILE_PUBLISHER SUPPRESS_ACCESSRULE SUPPRESS_SITEROOT CLIENT_HOME \
ZEO_CLIENT EVENT_LOG_FORMAT EVENT_LOG_FILE EVENT_LOG_SEVERITY ZSYSLOG \
ZSYSLOG_FACILITY ZSYSLOG_SERVER ZSYSLOG_ACCESS ZSYSLOG_ACCESS_FACILITY \
ZSYSLOG_ACCESS_SERVER Z_DEBUG_MODE Z_REALM NO_SECURITY ZOPE_SECURITY_POLICY \
ZSP_OWNEROUS_SKIP ZSP_AUTHENTICATED_SKIP DISALLOW_LOCAL_PRODUCTS \
ZOPE_DATABASE_QUOTA ZOPE_READ_ONLY ZSESSION_ADD_NOTIFY ZSESSION_DEL_NOTIFY \
ZSESSION_TIMEOUT_MINS ZSESSION_OBJECT_LIMIT WEBDAV_SOURCE_PORT_CLIENTS \
STX_DEFAULT_LEVEL ZOPE_DTML_REQUEST_AUTOQUOTE Z_MAX_STACK_SIZE \
FORCE_PRODUCT_RELOAD"

for N in $EXPORT_LST ; do
    if [ -n "${N}" ] ; then export ${N} ; fi
done
}

# Check if the file exist. then send file to stdout.
# Parameters:
#    $1 = /path/to/pid.file
# Outputs:

read_pid()
{
    if [ -f "${1}" ] ; then
	cat ${1}
    fi
}

# Check if we have a living PID, if not delete the PID FILE
# Parameters:
#    $1 = /path/to/pid.file
# Returns:
#    0 if alive pid file remains
#    1 if dead pid file removed
#    2 if no pid file found

check_pid_status()
{
    local RESULT=2   # assume no pid file will be found
    local PID=$(read_pid ${1})

    if [ -n "${PID}" ] ; then
	ps --no-headers ${PID} > /dev/null 2>&1
	if [ "${?}" -eq 0 ] ; then
	    RESULT=0
	else
	    rm -f ${1} 
	    RESULT=1
	fi
    fi

    return ${RESULT}
}

# Parameters: 
#    None
# Returns:
#    0 true 
#    1 false and echos /pathname/to/pid/file

is_zope_dead()
{
    local RESULT=

    if [ -n "${INSTANCE_HOME}" ] ; then
	loc=${INSTANCE_HOME}
    else
	loc=${ZOPE_HOME}
    fi

    check_pid_status ${loc}/var/Z2.pid
    RESULT=${?}
    if [ "${RESULT}" -eq 0 ] ; then 
	echo "${loc}"
	RESULT=10
	break    # found a live pid
    fi

    if [ "${RESULT}" -eq 10 ] ; then
	RESULT=1
    else
	RESULT=0
    fi

    return ${RESULT}
}

status()
{ 

    if is_zope_dead ; then
	eerror "--> Zope is dead."
    else
	einfo "--> Zope is alive."
    fi

    return ${?}
}

# If Zope is dead, remove PID file and start zope.
# The idea with 'env' is that a environment snapshot
# (current vars + /etc/conf.d/zope?) is created for zope to use.

start_zope()
{
    local RESULT=

    is_zope_dead >/dev/null
    RESULT=${?}
    if [ "${RESULT}" -eq 0 ] ; then
	setup_exports
	umask 077    # Recommended by Zope
	env /usr/bin/${python} ${ZOPE_HOME}z2.py ${ZOPE_OPTS} &         
	RESULT=${?}
    else
	echo 'Zope is running independant of RC management.'
	echo 'We are going to try and  kill it.'
	stop_zope
	if [ "${?}" -eq 0 ] ; then
	    echo 'Successfully killed zope. Try to start zope again'
	fi
    fi

    return ${RESULT}
}

# If Zope is alive, kill it.

stop_zope()
{
    local PID=$(is_zope_dead)

    if [ -n "${PID}" ] ; then
	kill $(cat ${PID}/var/Z2.pid)    # Not sure if kill always succeeds, so not removeing .pid file.
    fi
    return $?
}

# 

start()
{
    ebegin "Starting zope"
    start_zope
    eend $? "Failed to start zope"
}

#

stop()
{
    ebegin "Stopping zope"
    stop_zope
    eend $? "Failed to stop zope"
}