mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
8da0e15a07
Simulate "nice service" on systems that do not have "service" (This used to be ctdb commit d0e6dcbadaf41745d423640e5ff5bafd9f68eb88)
128 lines
2.8 KiB
Bash
Executable File
128 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# ctdb event script for Samba
|
|
|
|
PATH=/bin:/usr/bin:$PATH
|
|
|
|
. $CTDB_BASE/functions
|
|
loadconfig ctdb
|
|
|
|
cmd="$1"
|
|
shift
|
|
|
|
[ "$CTDB_MANAGES_SAMBA" = "yes" ] || exit 0
|
|
|
|
# set default samba cleanup period - in minutes
|
|
[ -z "$SAMBA_CLEANUP_PERIOD" ] && {
|
|
SAMBA_CLEANUP_PERIOD=10
|
|
}
|
|
|
|
|
|
# autodetect use of winbind if not set in config file
|
|
[ -z "$CTDB_MANAGES_WINBIND" ] && {
|
|
secmode=`testparm -s --parameter-name=security 2> /dev/null`
|
|
case $secmode in
|
|
ADS|DOMAIN)
|
|
CTDB_MANAGES_WINBIND="yes";
|
|
;;
|
|
*)
|
|
CTDB_MANAGES_WINBIND="no";
|
|
;;
|
|
esac
|
|
}
|
|
|
|
###########################
|
|
# periodic cleanup function
|
|
periodic_cleanup() {
|
|
# running smbstatus scrubs any dead entries from the connections
|
|
# and sessionid database
|
|
echo "Running periodic cleanup of samba databases"
|
|
smbstatus -n > /dev/null 2>&1 &
|
|
}
|
|
|
|
case $cmd in
|
|
startup)
|
|
# create the state directory for samba
|
|
/bin/mkdir -p $CTDB_BASE/state/samba
|
|
|
|
# make sure samba is not already started
|
|
service smb stop > /dev/null 2>&1
|
|
killall -0 -q smbd && {
|
|
sleep 1
|
|
# make absolutely sure samba is dead
|
|
killall -q -9 smbd
|
|
}
|
|
|
|
# restart the winbind service
|
|
[ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
|
|
service winbind stop > /dev/null 2>&1
|
|
killall -0 -q winbindd && {
|
|
sleep 1
|
|
# make absolutely sure winbindd is dead
|
|
killall -q -9 winbindd
|
|
}
|
|
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
|
|
nice_service smb 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
|
|
service smb stop
|
|
|
|
# stop the winbind service
|
|
[ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
|
|
service winbind stop
|
|
}
|
|
;;
|
|
|
|
monitor)
|
|
# Create a dummy file to track when we need to do periodic cleanup
|
|
# of samba databases
|
|
[ -f $CTDB_BASE/state/samba/periodic_cleanup ] || {
|
|
touch $CTDB_BASE/state/samba/periodic_cleanup
|
|
}
|
|
[ `/usr/bin/find $CTDB_BASE/state/samba/periodic_cleanup -mmin +$SAMBA_CLEANUP_PERIOD | wc -l` -eq 1 ] && {
|
|
# Cleanup the databases
|
|
periodic_cleanup
|
|
touch $CTDB_BASE/state/samba/periodic_cleanup
|
|
}
|
|
|
|
testparm -s 2>&1 | egrep '^WARNING|^ERROR|^Unknown' && {
|
|
echo "ERROR: testparm shows smb.conf is not clean"
|
|
exit 1
|
|
}
|
|
|
|
smb_dirs=`testparm -s 2> /dev/null | egrep '^[[:space:]]*path = ' | cut -d= -f2`
|
|
ctdb_check_directories "Samba" $smb_dirs
|
|
|
|
smb_ports=`testparm -s --parameter-name="smb ports" 2> /dev/null`
|
|
ctdb_check_tcp_ports "Samba" $smb_ports
|
|
|
|
# check winbind is OK
|
|
[ "$CTDB_MANAGES_WINBIND" = "yes" ] && {
|
|
ctdb_check_command "winbind" "wbinfo -p"
|
|
}
|
|
;;
|
|
|
|
esac
|
|
|
|
# ignore unknown commands
|
|
exit 0
|