2 # ctdb event script for Samba
4 [ -n "$CTDB_BASE" ] || \
5 export CTDB_BASE
=$
(cd -P $
(dirname "$0") ; dirname "$PWD")
11 case $CTDB_INIT_STYLE in
13 CTDB_SERVICE_SMB
=${CTDB_SERVICE_SMB:-smb}
14 CTDB_SERVICE_NMB
=${CTDB_SERVICE_NMB:-nmb}
17 CTDB_SERVICE_SMB
=${CTDB_SERVICE_SMB:-samba}
18 CTDB_SERVICE_NMB
=${CTDB_SERVICE_NMB:-""}
21 # Use redhat style as default:
22 CTDB_SERVICE_SMB
=${CTDB_SERVICE_SMB:-smb}
23 CTDB_SERVICE_NMB
=${CTDB_SERVICE_NMB:-""}
31 ctdb_setup_service_state_dir
35 # make sure samba is not already started
36 service
"$CTDB_SERVICE_SMB" stop
> /dev
/null
2>&1
37 if [ -n "$CTDB_SERVICE_NMB" ] ; then
38 service
"$CTDB_SERVICE_NMB" stop
> /dev
/null
2>&1
40 killall
-0 -q smbd
&& {
42 # make absolutely sure samba is dead
45 killall
-0 -q nmbd
&& {
47 # make absolutely sure samba is dead
51 # start Samba service. Start it reniced, as under very heavy load
52 # the number of smbd processes will mean that it leaves few cycles
56 if [ -n "$CTDB_SERVICE_NMB" ] ; then
57 nice_service
"$CTDB_SERVICE_NMB" start || die
"Failed to start nmbd"
60 nice_service
"$CTDB_SERVICE_SMB" start || die
"Failed to start samba"
65 service
"$CTDB_SERVICE_SMB" stop
66 if [ -n "$CTDB_SERVICE_NMB" ] ; then
67 service
"$CTDB_SERVICE_NMB" stop
71 ######################################################################
72 # Show the testparm output using a cached smb.conf to avoid delays due
75 smbconf_cache
="$service_state_dir/smb.conf.cache"
77 testparm_foreground_update
()
81 if ! _out
=$
(timeout
$_timeout testparm
-v -s 2>/dev
/null
) ; then
82 if [ -f "$smbconf_cache" ] ; then
83 echo "WARNING: smb.conf cache update failed - using old cache file"
86 die
"ERROR: smb.conf cache create failed"
90 _tmpfile
="${smbconf_cache}.$$"
91 # Patterns to exclude...
92 pat
='^[[:space:]]+(registry[[:space:]]+shares|include|copy|winbind[[:space:]]+separator)[[:space:]]+='
93 echo "$_out" |
grep -Ev "$pat" >"$_tmpfile"
94 mv "$_tmpfile" "$smbconf_cache" # atomic
99 testparm_background_update
()
103 testparm_foreground_update
$_timeout >/dev
/null
2>&1 </dev
/null
&
108 testparm
-s "$smbconf_cache" "$@" 2>/dev
/null
114 sed -n -e 's@^[[:space:]]*path[[:space:]]*=[[:space:]]@@p' |
120 testparm_cat
--parameter-name="smb ports" |
124 ###########################
126 ctdb_start_stop_service
128 is_ctdb_managed_service ||
exit 0
130 ###########################
142 testparm_foreground_update
10
145 smb_ports
="$CTDB_SAMBA_CHECK_PORTS"
146 if [ -z "$smb_ports" ] ; then
147 smb_ports
=$
(list_samba_ports
)
148 [ -n "$smb_ports" ] || die
"Failed to set smb ports"
150 ctdb_check_tcp_ports
$smb_ports ||
exit $?
152 if [ "$CTDB_SAMBA_SKIP_SHARE_CHECK" != "yes" ] ; then
153 list_samba_shares | ctdb_check_directories ||
exit $?
156 if [ $ret -ne 0 ] ; then
157 testparm_background_update
10
162 ctdb_standard_event_handler
"$@"