mirror of
https://github.com/samba-team/samba.git
synced 2025-02-05 21:57:51 +03:00
f36bae1cbf
Also remove some unnecessary absolute paths for commands, which were making the code slightly difficult to read. Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit 1b3f2dd62efb240f8486016fe0f8dfb73d6ccc66)
105 lines
2.8 KiB
Bash
Executable File
105 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
############################
|
|
# main event script for ctdb
|
|
#
|
|
# This script is called with one of the following sets of arguments
|
|
# startup : called when ctdb starts
|
|
# shutdown : called when ctdb shuts down
|
|
# takeip : called when an IP address is taken over
|
|
# releaseip : called when an IP address is released
|
|
# recovered : called when ctdb has finished a recovery event
|
|
|
|
. $CTDB_BASE/functions
|
|
loadconfig
|
|
|
|
ctdb_setup_service_state_dir "ctdb"
|
|
|
|
#
|
|
update_config_from_tdb() {
|
|
|
|
# Pull optional ctdb configuration data out of config.tdb
|
|
_key="public_addresses:node#$(ctdb -t 1 xpnn|sed -e 's/.*://')"
|
|
_t="$service_state_dir/public_addresses"
|
|
rm -f "$_t"
|
|
|
|
if ctdb pfetch config.tdb "$_key" "$_t" 2>/dev/null && \
|
|
[ -s "$_t" -a -n "$CTDB_PUBLIC_ADDRESSES"] && \
|
|
! cmp -s "$_t" "$CTDB_PUBLIC_ADDRESSES" ; then
|
|
|
|
echo "CTDB public address configuration has changed."
|
|
echo "Extracting new configuration from database."
|
|
diff "$_t" "$CTDB_PUBLIC_ADDRESSES"
|
|
cp "$_t" "$CTDB_PUBLIC_ADDRESSES"
|
|
echo "Restarting CTDB"
|
|
service ctdb restart &
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
init)
|
|
# make sure we have a blank state directory for the scripts to work with
|
|
rm -rf $CTDB_VARDIR/state
|
|
# Look at the pattern - this should not be -rf!!!
|
|
rm -f $ctdb_managed_dir/*
|
|
mkdir -p $CTDB_VARDIR/state || {
|
|
ret=$?
|
|
echo "mkdir -p $CTDB_VARDIR/state - failed - $ret"
|
|
exit $ret
|
|
}
|
|
;;
|
|
|
|
setup)
|
|
# set any tunables from the config file
|
|
set | grep ^CTDB_SET_ | cut -d_ -f3- |
|
|
while read v; do
|
|
varname=`echo $v | cut -d= -f1`
|
|
value=`echo $v | cut -d= -f2`
|
|
ctdb setvar $varname $value || exit 1
|
|
echo "Set $varname to $value"
|
|
done || exit 1
|
|
;;
|
|
|
|
startup)
|
|
update_config_from_tdb &
|
|
;;
|
|
monitor)
|
|
# We should never enter swap, so SwapTotal == SwapFree.
|
|
[ "$CTDB_CHECK_SWAP_IS_NOT_USED" = "yes" ] && {
|
|
if [ -n "`grep '^Swap\(Total\|Free\)' /proc/meminfo | uniq -s 10 -u`" ]; then
|
|
echo We are swapping:
|
|
cat /proc/meminfo
|
|
ps auxfww
|
|
fi
|
|
}
|
|
|
|
# warn when we get low on memory
|
|
[ -z "$CTDB_MONITOR_FREE_MEMORY_WARN" ] || {
|
|
FREE_MEM=`free -m | grep "buffers/cache" | while read A B C D ;do echo -n $D ; done`
|
|
[ `expr "$FREE_MEM" "<" "$CTDB_MONITOR_FREE_MEMORY_WARN"` != "0" ] && {
|
|
echo "Running low on memory. Free:$FREE_MEM while CTDB treshold is $CTDB_MONITOR_FREE_MEMORY_WARN"
|
|
}
|
|
}
|
|
|
|
# monitor that we are not running out of memory
|
|
[ -z "$CTDB_MONITOR_FREE_MEMORY" ] || {
|
|
FREE_MEM=`free -m | grep "buffers/cache" | while read A B C D ;do echo -n $D ; done`
|
|
[ `expr "$FREE_MEM" "<" "$CTDB_MONITOR_FREE_MEMORY"` != "0" ] && {
|
|
echo "OOM. Free:$FREE_MEM while CTDB treshold is $CTDB_MONITOR_FREE_MEMORY"
|
|
cat /proc/meminfo
|
|
ps auxfww
|
|
echo m > /proc/sysrq-trigger
|
|
ctdb disable
|
|
sleep 3
|
|
ctdb shutdown
|
|
}
|
|
}
|
|
;;
|
|
|
|
*)
|
|
ctdb_standard_event_handler "$@"
|
|
;;
|
|
esac
|
|
|
|
# all OK
|
|
exit 0
|