Page Menu
Home
ClusterLabs Projects
Search
Configure Global Search
Log In
Files
F3151639
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/heartbeat/pgagent b/heartbeat/pgagent
index 4c4a9670b..58054a7c3 100644
--- a/heartbeat/pgagent
+++ b/heartbeat/pgagent
@@ -1,154 +1,139 @@
#!/bin/sh
#
-# High-Availability pgagent OCF resource agent
+# High-Availability pgagent OCF resource agent
#
# Description: Starts/stops pgagent
-# This agent is for Debian systems only,
-# as it rely on start-stop-daemon.
# Author: Oleg Selin
# License: GNU General Public License (GPL)
#
# OCF parameters:
# OCF_RESKEY_connection_string
# OCF_RESKEY_user
# OCF_RESKEY_options
#
#######################################################################
# Initialization:
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
-OCF_RESKEY_executable_default="/usr/bin/pgagent"
+OCF_RESKEY_executable_default="`which pgagent`"
OCF_RESKEY_connection_string_default="user=postgres host=/var/run/postgresql"
OCF_RESKEY_user_default="postgres"
-OCF_RESKEY_options_default="-r 5"
+OCF_RESKEY_options_default="-r 1 -t 1"
: ${OCF_RESKEY_executable="${OCF_RESKEY_executable_default}"}
: ${OCF_RESKEY_connection_string="${OCF_RESKEY_connection_string_default}"}
: ${OCF_RESKEY_user="${OCF_RESKEY_user_default}"}
: ${OCF_RESKEY_options="${OCF_RESKEY_options_default}"}
pgagent_validate_all() {
check_binary pgagent
- check_binary start-stop-daemon
ocf_log debug "executable: '$OCF_RESKEY_executable'"
ocf_log debug "connection string: '$OCF_RESKEY_connection_string'"
ocf_log debug "user: '$OCF_RESKEY_user'"
ocf_log debug "options: '$OCF_RESKEY_options'"
if [ -z "$OCF_RESKEY_connection_string" ]; then
ocf_log err "Connection string is not configured!"
exit $OCF_ERR_CONFIGURED
fi
if [ -z "$OCF_RESKEY_user" ]; then
ocf_log err "User is not configured!"
exit $OCF_ERR_CONFIGURED
fi
getent passwd $OCF_RESKEY_user >/dev/null 2>&1
if [ ! $? -eq 0 ]; then
ocf_log err "User $OCF_RESKEY_user doesn't exist";
return $OCF_ERR_CONFIGURED;
fi
return $OCF_SUCCESS
}
pgagent_start() {
pgagent_validate_all
- start-stop-daemon --exec $OCF_RESKEY_executable --chuid $OCF_RESKEY_user --background --start -- $OCF_RESKEY_options $OCF_RESKEY_connection_string
- check_status
- if [ $? -eq 0 ]; then
- return $OCF_SUCCESS
- elif [ $? -eq 1 ]; then
- ocf_log info "pgagent already running"
+ nohup su - $OCF_RESKEY_user -c "'$OCF_RESKEY_executable' $OCF_RESKEY_options '$OCF_RESKEY_connection_string'" > /dev/null 2>&1 &
+ sleep 1
+ if [ -n pgagent_monitor ]; then
return $OCF_SUCCESS
fi
return $OCF_ERR_GENERIC
}
pgagent_stop() {
pgagent_validate_all
- start-stop-daemon --exec $OCF_RESKEY_executable --chuid $OCF_RESKEY_user --stop
- check_status
- if [ $? -eq 0 ]; then
- return $OCF_SUCCESS
- elif [ $? -eq 1 ]; then
- ocf_log info "pgagent is not running and the pid file exists!"
- return $OCF_SUCCESS
+ pid=`pgrep -f -x -U $OCF_RESKEY_user "$OCF_RESKEY_executable $OCF_RESKEY_options $OCF_RESKEY_connection_string"`
+ if [ -n "$pid" ]; then
+ ocf_run kill $pid || return $OCF_ERR_GENERIC
fi
- return $OCF_ERR_GENERIC
+ return $OCF_SUCCESS
}
pgagent_monitor() {
- check_status
- if [ $? -eq 0 ]; then
- return $OCF_SUCCESS
+ if [ -z "$OCF_RESKEY_executable" ]; then
+ return $OCF_ERR_INSTALLED
fi
- return $OCF_NOT_RUNNING
-}
-
-check_status() {
- start-stop-daemon --exec $OCF_RESKEY_executable --status
- return $?
+ ocf_run pgrep -f -x -U "$OCF_RESKEY_user" "$OCF_RESKEY_executable $OCF_RESKEY_options $OCF_RESKEY_connection_string" || return $OCF_NOT_RUNNING
+ return $OCF_SUCCESS
}
meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="pgagent" version="1.0">
<version>1.0</version>
<longdesc lang="en">This is a pgagent Resource Agent.</longdesc>
<shortdesc lang="en">Controls pgagent</shortdesc>
<parameters>
<parameter name="connection_string">
<longdesc lang="en">Connection string for pgagent.</longdesc>
<shortdesc lang="en">pgagent connection string</shortdesc>
<content type="string" default="$OCF_RESKEY_connection_string_default" />
</parameter>
<parameter name="user">
<longdesc lang="en">User to run pgagent as.</longdesc>
<shortdesc lang="en">User to run pgagent</shortdesc>
<content type="string" default="$OCF_RESKEY_user_default" />
</parameter>
<parameter name="options">
<longdesc lang="en">Options for pgagent.</longdesc>
<shortdesc lang="en">pgagent run options, see pgagent --help for details</shortdesc>
<content type="string" default="$OCF_RESKEY_options_default" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="5" />
<action name="stop" timeout="5" />
<action name="monitor" timeout="20" interval="10" depth="0" />
<action name="meta-data" timeout="5" />
<action name="validate-all" timeout="5" />
</actions>
</resource-agent>
END
}
pgagent_usage() {
cat <<END
usage: $0 {start|stop|monitor|meta-data|validate-all}
Expects to have a fully populated OCF RA-compliant environment set.
END
}
case $__OCF_ACTION in
start) pgagent_start;;
stop) pgagent_stop;;
monitor) pgagent_monitor;;
validate-all) pgagent_validate_all;;
usage|help) pgagent_usage
exit $OCF_SUCCESS
;;
meta-data) meta_data
exit $OCF_SUCCESS
;;
*) pgagent_usage
exit $OCF_ERR_UNIMPLEMENTED
;;
esac
rc=$?
ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc"
exit $rc
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Feb 24, 7:56 AM (1 d, 3 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1464056
Default Alt Text
(5 KB)
Attached To
Mode
rR Resource Agents
Attached
Detach File
Event Timeline
Log In to Comment