#!/bin/sh
# ctdb event script for Samba
-PATH=/bin:/usr/bin:$PATH
-
-service_name="samba"
-
. $CTDB_BASE/functions
-loadconfig ctdb
-loadconfig samba
detect_init_style
CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
CTDB_SERVICE_WINBIND=${CTDB_SERVICE_WINBIND:-winbind}
;;
- redhat)
- CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
- CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
- CTDB_SERVICE_WINBIND=${CTDB_SERVICE_WINBIND:-winbind}
- ;;
*)
# should not happen, but for now use redhat style as default:
CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
;;
esac
-cmd="$1"
-shift
+service_name="samba"
+service_start="start_samba"
+service_stop="stop_samba"
+
+loadconfig
[ "$CTDB_MANAGES_SAMBA" = "yes" ] || [ "$CTDB_MANAGES_WINBIND" = "yes" ] || exit 0
+start_samba() {
+ # create the state directory for samba
+ /bin/mkdir -p $CTDB_BASE/state/samba
+
+ # make sure samba is not already started
+ [ "$CTDB_MANAGES_SAMBA" = "yes" ] && {
+ service "$CTDB_SERVICE_SMB" stop > /dev/null 2>&1
+ service "$CTDB_SERVICE_NMB" stop > /dev/null 2>&1
+ killall -0 -q smbd && {
+ sleep 1
+ # make absolutely sure samba is dead
+ killall -q -9 smbd
+ }
+
+ killall -0 -q nmbd && {
+ sleep 1
+ # make absolutely sure samba is dead
+ killall -q -9 nmbd
+ }
+ }
+
+ # restart the winbind service
+ check_ctdb_manages_winbind
+ [ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
+ service "$CTDB_SERVICE_WINBIND" stop > /dev/null 2>&1
+ killall -0 -q winbindd && {
+ sleep 1
+ # make absolutely sure winbindd is dead
+ killall -q -9 winbindd
+ }
+ service "$CTDB_SERVICE_WINBIND" start
+ }
+
+ # start Samba service. Start it reniced, as under very heavy load
+ # the number of smbd processes will mean that it leaves few cycles for
+ # anything else
+ [ "$CTDB_MANAGES_SAMBA" = "yes" ] && {
+ nice_service "$CTDB_SERVICE_NMB" start
+ nice_service "$CTDB_SERVICE_SMB" start
+ }
+}
+
+stop_samba() {
+ # shutdown Samba when ctdb goes down
+ [ "$CTDB_MANAGES_SAMBA" = "yes" ] && {
+ service "$CTDB_SERVICE_SMB" stop
+ service "$CTDB_SERVICE_NMB" stop
+ }
+
+ # stop the winbind service
+ check_ctdb_manages_winbind
+ [ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
+ service "$CTDB_SERVICE_WINBIND" stop
+ }
+}
# set default samba cleanup period - in minutes
[ -z "$SAMBA_CLEANUP_PERIOD" ] && {
case $cmd in
startup)
- # create the state directory for samba
- /bin/mkdir -p $CTDB_BASE/state/samba
-
- # make sure samba is not already started
- [ "$CTDB_MANAGES_SAMBA" = "yes" ] && {
- service "$CTDB_SERVICE_SMB" stop > /dev/null 2>&1
- service "$CTDB_SERVICE_NMB" stop > /dev/null 2>&1
- killall -0 -q smbd && {
- sleep 1
- # make absolutely sure samba is dead
- killall -q -9 smbd
- }
-
- killall -0 -q nmbd && {
- sleep 1
- # make absolutely sure samba is dead
- killall -q -9 nmbd
- }
- }
-
- # restart the winbind service
- check_ctdb_manages_winbind
- [ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
- service "$CTDB_SERVICE_WINBIND" stop > /dev/null 2>&1
- killall -0 -q winbindd && {
- sleep 1
- # make absolutely sure winbindd is dead
- killall -q -9 winbindd
- }
- service "$CTDB_SERVICE_WINBIND" start
- }
-
- # start Samba service. Start it reniced, as under very heavy load
- # the number of smbd processes will mean that it leaves few cycles for
- # anything else
- [ "$CTDB_MANAGES_SAMBA" = "yes" ] && {
- nice_service "$CTDB_SERVICE_NMB" start
- nice_service "$CTDB_SERVICE_SMB" start
- }
+ ctdb_service_start
;;
- takeip)
- # nothing special for Samba
- ;;
-
- releaseip)
- # nothing special for Samba
- ;;
-
- recovered)
- # nothing special for Samba
- exit 0
- ;;
-
shutdown)
- # shutdown Samba when ctdb goes down
- [ "$CTDB_MANAGES_SAMBA" = "yes" ] && {
- service "$CTDB_SERVICE_SMB" stop
- service "$CTDB_SERVICE_NMB" stop
- }
-
- # stop the winbind service
- check_ctdb_manages_winbind
- [ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
- service "$CTDB_SERVICE_WINBIND" stop
- }
+ ctdb_service_stop
;;
monitor)
}
;;
+ status)
+ ctdb_checkstatus || exit $?
+ ;;
esac
# ignore unknown commands
ctdb_counter_init () {
_ctdb_counter_common
- echo -n > "$_counter_file"
+ >"$_counter_file"
}
ctdb_counter_incr () {
_ctdb_counter_common
ctdb_check_counter_limit () {
_ctdb_counter_common
+ _limit="${1:-${service_fail_limit}}"
+ _quiet="$2"
+
# unary counting!
_size=$(stat -c "%s" "$_counter_file" 2>/dev/null || echo 0)
- if [ $_size -ge $service_fail_limit ] ; then
- echo "ERROR: more than $service_fail_limit consecutive failures, marking cluster unhealthy"
+ if [ $_size -ge $_limit ] ; then
+ echo "ERROR: more than $_limit consecutive failures for $service_name, marking cluster unhealthy"
exit 1
- else
- echo "WARNING: less than $service_fail_limit consecutive failures, not unhealthy yet"
+ elif [ $_size -gt 0 -a -z "$_quiet" ] ; then
+ echo "WARNING: less than $_limit consecutive failures ($_size) for $service_name, not unhealthy yet"
fi
}
########################################################
ctdb_service_reconfigure ()
{
if [ -n "$service_reconfigure" ] ; then
- $service_reconfigure
+ eval $service_reconfigure
else
service "$service_name" restart
fi
ctdb_service_start ()
{
if [ -n "$service_start" ] ; then
- $service_start
+ eval $service_start
else
service "$service_name" start
fi
ctdb_service_stop ()
{
if [ -n "$service_stop" ] ; then
- $service_stop
+ eval $service_stop
else
service "$service_name" stop
fi
# A reasonable default is the basename of the eventscript.
service_name="${0##*/}" # basename
+service_fail_limit=1
ctdb_event="$1" ; shift
cmd="$ctdb_event"