#! /bin/sh ### BEGIN INIT INFO # Provides: rsyncd # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: $named # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: fast remote file copy program daemon # Description: rsync is a program that allows files to be copied to and # from remote machines in much the same way as rcp. # This provides rsyncd daemon functionality. ### END INIT INFO set -e # /etc/init.d/rsync: start and stop the rsync daemon global DAEMON := '/usr/bin/rsync' global RSYNC_ENABLE := 'false' global RSYNC_OPTS := '''' global RSYNC_DEFAULTS_FILE := '/etc/default/rsync' global RSYNC_CONFIG_FILE := '/etc/rsyncd.conf' global RSYNC_PID_FILE := '/var/run/rsync.pid' global RSYNC_NICE_PARM := '''' global RSYNC_IONICE_PARM := '''' test -x $DAEMON || exit 0 source /lib/lsb/init-functions if test -s $RSYNC_DEFAULTS_FILE { source $RSYNC_DEFAULTS_FILE matchstr "x$RSYNC_ENABLE" { xtrue|xfalse { } xinetd { exit 0 } * { log_failure_msg "Value of RSYNC_ENABLE in $RSYNC_DEFAULTS_FILE must be either 'true' or 'false';" log_failure_msg "not starting rsync daemon." exit 1 } } matchstr "x$RSYNC_NICE" { x[0-9] { global RSYNC_NICE_PARM := ""--nicelevel $RSYNC_NICE""} x1[0-9] { global RSYNC_NICE_PARM := ""--nicelevel $RSYNC_NICE""} x { } * { log_warning_msg "Value of RSYNC_NICE in $RSYNC_DEFAULTS_FILE must be a value between 0 and 19 (inclusive);" log_warning_msg "ignoring RSYNC_NICE now." } } matchstr "x$RSYNC_IONICE" { x-c[123]* { global RSYNC_IONICE_PARM := $RSYNC_IONICE} x { } * { log_warning_msg "Value of RSYNC_IONICE in $RSYNC_DEFAULTS_FILE must be -c1, -c2 or -c3;" log_warning_msg "ignoring RSYNC_IONICE now." } } } export PATH = ""$(PATH:+$PATH:)/usr/sbin:/sbin"" proc rsync_start { if test ! -s $RSYNC_CONFIG_FILE { log_failure_msg "missing or empty config file $RSYNC_CONFIG_FILE" log_end_msg 1 exit 0 } # See ionice(1) if test -n $RSYNC_IONICE_PARM && test -x /usr/bin/ionice && /usr/bin/ionice $RSYNC_IONICE_PARM true !2 >/dev/null { /usr/bin/ionice $RSYNC_IONICE_PARM -p$Pid > /dev/null !2 > !1 } if start-stop-daemon --start --quiet --background \ --pidfile $RSYNC_PID_FILE --make-pidfile \ $RSYNC_NICE_PARM --exec $DAEMON \ -- --no-detach --daemon --config $RSYNC_CONFIG_FILE $RSYNC_OPTS { global rc := '0' sleep 1 if ! kill -0 $[cat $RSYNC_PID_FILE] >/dev/null !2 > !1 { log_failure_msg "rsync daemon failed to start" global rc := '1' } } else { global rc := '1' } if test $rc -eq 0 { log_end_msg 0 } else { log_end_msg 1 rm -f $RSYNC_PID_FILE } } # rsync_start matchstr $1 { start { if $RSYNC_ENABLE { log_daemon_msg "Starting rsync daemon" "rsync" if test -s $RSYNC_PID_FILE && kill -0 $[cat $RSYNC_PID_FILE] >/dev/null !2 > !1 { log_progress_msg "apparently already running" log_end_msg 0 exit 0 } rsync_start } else { if test -s $RSYNC_CONFIG_FILE { test $VERBOSE != no && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..." } } } stop { log_daemon_msg "Stopping rsync daemon" "rsync" start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE log_end_msg $Status rm -f $RSYNC_PID_FILE } reload|force-reload { log_warning_msg "Reloading rsync daemon: not needed, as the daemon" log_warning_msg "re-reads the config file whenever a client connects." } restart { set +e if $RSYNC_ENABLE { log_daemon_msg "Restarting rsync daemon" "rsync" if test -s $RSYNC_PID_FILE && kill -0 $[cat $RSYNC_PID_FILE] >/dev/null !2 > !1 { start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE || true sleep 1 } else { log_warning_msg "rsync daemon not running, attempting to start." rm -f $RSYNC_PID_FILE } rsync_start } else { if test -s $RSYNC_CONFIG_FILE { test $VERBOSE != no && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..." } } } status { status_of_proc -p $RSYNC_PID_FILE $DAEMON rsync exit $Status # notreached due to set -e } * { echo "Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status}" exit 1 } } exit 0