init.d 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #! /bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides: rsyncd
  4. # Required-Start: $remote_fs $syslog
  5. # Required-Stop: $remote_fs $syslog
  6. # Should-Start: $named
  7. # Default-Start: 2 3 4 5
  8. # Default-Stop:
  9. # Short-Description: fast remote file copy program daemon
  10. # Description: rsync is a program that allows files to be copied to and
  11. # from remote machines in much the same way as rcp.
  12. # This provides rsyncd daemon functionality.
  13. ### END INIT INFO
  14. set -e
  15. # /etc/init.d/rsync: start and stop the rsync daemon
  16. DAEMON=/usr/bin/rsync
  17. RSYNC_ENABLE=false
  18. RSYNC_OPTS=''
  19. RSYNC_DEFAULTS_FILE=/etc/default/rsync
  20. RSYNC_CONFIG_FILE=/etc/rsyncd.conf
  21. RSYNC_PID_FILE=/var/run/rsync.pid
  22. RSYNC_NICE_PARM=''
  23. RSYNC_IONICE_PARM=''
  24. test -x $DAEMON || exit 0
  25. . /lib/lsb/init-functions
  26. if [ -s $RSYNC_DEFAULTS_FILE ]; then
  27. . $RSYNC_DEFAULTS_FILE
  28. case "x$RSYNC_ENABLE" in
  29. xtrue|xfalse) ;;
  30. xinetd) exit 0
  31. ;;
  32. *) log_failure_msg "Value of RSYNC_ENABLE in $RSYNC_DEFAULTS_FILE must be either 'true' or 'false';"
  33. log_failure_msg "not starting rsync daemon."
  34. exit 1
  35. ;;
  36. esac
  37. case "x$RSYNC_NICE" in
  38. x[0-9]) RSYNC_NICE_PARM="--nicelevel $RSYNC_NICE";;
  39. x1[0-9]) RSYNC_NICE_PARM="--nicelevel $RSYNC_NICE";;
  40. x) ;;
  41. *) log_warning_msg "Value of RSYNC_NICE in $RSYNC_DEFAULTS_FILE must be a value between 0 and 19 (inclusive);"
  42. log_warning_msg "ignoring RSYNC_NICE now."
  43. ;;
  44. esac
  45. case "x$RSYNC_IONICE" in
  46. x-c[123]*) RSYNC_IONICE_PARM="$RSYNC_IONICE";;
  47. x) ;;
  48. *) log_warning_msg "Value of RSYNC_IONICE in $RSYNC_DEFAULTS_FILE must be -c1, -c2 or -c3;"
  49. log_warning_msg "ignoring RSYNC_IONICE now."
  50. ;;
  51. esac
  52. fi
  53. export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
  54. rsync_start() {
  55. if [ ! -s "$RSYNC_CONFIG_FILE" ]; then
  56. log_failure_msg "missing or empty config file $RSYNC_CONFIG_FILE"
  57. log_end_msg 1
  58. exit 0
  59. fi
  60. # See ionice(1)
  61. if [ -n "$RSYNC_IONICE_PARM" ] && [ -x /usr/bin/ionice ] &&
  62. /usr/bin/ionice "$RSYNC_IONICE_PARM" true 2>/dev/null; then
  63. /usr/bin/ionice "$RSYNC_IONICE_PARM" -p$$ > /dev/null 2>&1
  64. fi
  65. if start-stop-daemon --start --quiet --background \
  66. --pidfile $RSYNC_PID_FILE --make-pidfile \
  67. $RSYNC_NICE_PARM --exec $DAEMON \
  68. -- --no-detach --daemon --config "$RSYNC_CONFIG_FILE" $RSYNC_OPTS
  69. then
  70. rc=0
  71. sleep 1
  72. if ! kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
  73. log_failure_msg "rsync daemon failed to start"
  74. rc=1
  75. fi
  76. else
  77. rc=1
  78. fi
  79. if [ $rc -eq 0 ]; then
  80. log_end_msg 0
  81. else
  82. log_end_msg 1
  83. rm -f $RSYNC_PID_FILE
  84. fi
  85. } # rsync_start
  86. case "$1" in
  87. start)
  88. if "$RSYNC_ENABLE"; then
  89. log_daemon_msg "Starting rsync daemon" "rsync"
  90. if [ -s $RSYNC_PID_FILE ] && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
  91. log_progress_msg "apparently already running"
  92. log_end_msg 0
  93. exit 0
  94. fi
  95. rsync_start
  96. else
  97. if [ -s "$RSYNC_CONFIG_FILE" ]; then
  98. [ "$VERBOSE" != no ] && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
  99. fi
  100. fi
  101. ;;
  102. stop)
  103. log_daemon_msg "Stopping rsync daemon" "rsync"
  104. start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE
  105. log_end_msg $?
  106. rm -f $RSYNC_PID_FILE
  107. ;;
  108. reload|force-reload)
  109. log_warning_msg "Reloading rsync daemon: not needed, as the daemon"
  110. log_warning_msg "re-reads the config file whenever a client connects."
  111. ;;
  112. restart)
  113. set +e
  114. if $RSYNC_ENABLE; then
  115. log_daemon_msg "Restarting rsync daemon" "rsync"
  116. if [ -s $RSYNC_PID_FILE ] && kill -0 $(cat $RSYNC_PID_FILE) >/dev/null 2>&1; then
  117. start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE || true
  118. sleep 1
  119. else
  120. log_warning_msg "rsync daemon not running, attempting to start."
  121. rm -f $RSYNC_PID_FILE
  122. fi
  123. rsync_start
  124. else
  125. if [ -s "$RSYNC_CONFIG_FILE" ]; then
  126. [ "$VERBOSE" != no ] && log_warning_msg "rsync daemon not enabled in $RSYNC_DEFAULTS_FILE, not starting..."
  127. fi
  128. fi
  129. ;;
  130. status)
  131. status_of_proc -p $RSYNC_PID_FILE "$DAEMON" rsync
  132. exit $? # notreached due to set -e
  133. ;;
  134. *)
  135. echo "Usage: /etc/init.d/rsync {start|stop|reload|force-reload|restart|status}"
  136. exit 1
  137. esac
  138. exit 0