summaryrefslogtreecommitdiffstats
path: root/debian/rsync.init
blob: 3cb044771da4a4258ac57c4d4ba9cf8693ff7bc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#! /bin/sh

### BEGIN INIT INFO
# Provides:          rsyncd
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $named autofs
# 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

DAEMON=/usr/bin/rsync
RSYNC_ENABLE=false
RSYNC_OPTS=''
RSYNC_DEFAULTS_FILE=/etc/default/rsync
RSYNC_CONFIG_FILE=/etc/rsyncd.conf
RSYNC_PID_FILE=/var/run/rsync.pid
RSYNC_NICE_PARM=''
RSYNC_IONICE_PARM=''

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

if [ -s $RSYNC_DEFAULTS_FILE ]; then
    . $RSYNC_DEFAULTS_FILE
    case "x$RSYNC_ENABLE" in
	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
			;;
    esac
    case "x$RSYNC_NICE" in
	x[0-9]|x1[0-9])	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."
			;;
    esac
    case "x$RSYNC_IONICE" in
	x-c[123]*)	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."
			;;
    esac
fi

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

rsync_start() {
    if [ ! -s "$RSYNC_CONFIG_FILE" ]; then
        log_failure_msg "missing or empty config file $RSYNC_CONFIG_FILE"
        log_end_msg 1
        exit 0
    fi
    # See ionice(1)
    if [ -n "$RSYNC_IONICE_PARM" ] && [ -x /usr/bin/ionice ] &&
        /usr/bin/ionice "$RSYNC_IONICE_PARM" true 2>/dev/null; then
        /usr/bin/ionice "$RSYNC_IONICE_PARM" -p$$ > /dev/null 2>&1
    fi
    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
    then
        rc=0
        sleep 1
        if ! kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
            log_failure_msg "rsync daemon failed to start"
            rc=1
        fi
    else
        rc=1
    fi
    if [ $rc -eq 0 ]; then
        log_end_msg 0
    else
        log_end_msg 1
        rm -f $RSYNC_PID_FILE
    fi
} # rsync_start


case "$1" in
  start)
	if "$RSYNC_ENABLE"; then
	    log_daemon_msg "Starting rsync daemon" "rsync"
	    if [ -s $RSYNC_PID_FILE ] && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
		log_progress_msg "apparently already running"
		log_end_msg 0
		exit 0
	    fi
            rsync_start
        else
            if [ -s "$RSYNC_CONFIG_FILE" ]; then
                [ "$VERBOSE" != no ] && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
            fi
	fi
	;;
  stop)
	log_daemon_msg "Stopping rsync daemon" "rsync"
	start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $RSYNC_PID_FILE
	RETVAL="$?"
	log_end_msg $RETVAL
	if [ $RETVAL != 0 ]
	then
		exit 1
	fi
	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; then
	    log_daemon_msg "Restarting rsync daemon" "rsync"
	    if [ -s $RSYNC_PID_FILE ] && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
		start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $RSYNC_PID_FILE
	    else
		log_warning_msg "rsync daemon not running, attempting to start."
	    	rm -f $RSYNC_PID_FILE
	    fi
            rsync_start
        else
            if [ -s "$RSYNC_CONFIG_FILE" ]; then
                [ "$VERBOSE" != no ] && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
            fi
	fi
	;;

  status)
	status_of_proc -p $RSYNC_PID_FILE "$DAEMON" rsync
	exit $?	# notreached due to set -e
	;;
  *)
	echo "Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status}"
	exit 1
esac

exit 0