]> git.pld-linux.org Git - packages/rsync.git/commitdiff
- allow running multiple daemons with separate config files
authorMarcin Krol <hawk@tld-linux.org>
Mon, 1 Apr 2024 11:36:50 +0000 (13:36 +0200)
committerMarcin Krol <hawk@tld-linux.org>
Mon, 1 Apr 2024 11:36:50 +0000 (13:36 +0200)
  (based on openvpn.spec)

rsync.init
rsync.spec
rsync.sysconfig
rsyncd.logrotate

index 6f0ba5ef530809c5650e9b7ad1b6cf2276dd5788..86f46e47011ae2d748278d515b726b0dd4a10514 100644 (file)
@@ -6,9 +6,22 @@
 # description: rsync daemon
 # processname: rsync
 #
-# pidfile:     /var/run/rsyncd.pid
 
-# Source function library.
+# Get service config
+[ -f /etc/sysconfig/rsyncd ] && . /etc/sysconfig/rsyncd
+
+[ -n "$2" ] && DAEMONS="$2"
+
+# no daemons. exit silently
+if [ -z "$DAEMONS" ]; then
+       case "$1" in
+       start|stop|restart|reload|force-reload)
+               exit 0
+               ;;
+       esac
+fi
+
+# Source function library
 . /etc/rc.d/init.d/functions
 
 # Source networking configuration.
@@ -24,30 +37,66 @@ else
        exit 0
 fi
 
-# Get service configuration
-[ -f /etc/sysconfig/rsyncd ] && . /etc/sysconfig/rsyncd
+# check if the daemon $1 is up
+daemonup() {
+       local daemon="$1"
+       local pidfile=/var/run/rsyncd/$daemon.pid
+       local pid=$(cat $pidfile 2>/dev/null)
+       kill -0 $pid 2>/dev/null
+       return $?
+}
+
+# check if all the configured daemons are up
+daemonsup() {
+        local daemon
+        ret=0
+        for daemon in $DAEMONS; do
+                daemonup $daemon && continue
+                ret=1
+        done
+        return $ret
+}
 
 start() {
-       # Start daemons.
-       if [ ! -f /var/lock/subsys/rsyncd ]; then
-               msg_starting rsyncd
-               daemon /usr/bin/rsync --daemon --dparam=pidfile=/var/run/rsync.pid ${RSYNC_OPTIONS}
-               RETVAL=$?
-               [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyncd
-       else
-               msg_already_running rsyncd
-       fi
+       msg_starting "rsyncd"; started
+       for daemon in $DAEMONS; do
+               config="/etc/rsyncd/$daemon.conf"
+               if [ ! -f "$config" ]; then
+                       nls "Invalid daemon \`%s': missing config: %s" $daemon "$config"
+                       fail
+                       RET=1
+               else
+                       daemonup $daemon && continue
+                       show "Starting Rsync daemon %s" "$daemon"; busy
+                       daemon /usr/bin/rsync --daemon --config=$config --dparam=pidfile=/var/run/rsyncd/$daemon.pid ${RSYNC_OPTIONS}
+                       RET=$?
+               fi
+               [ $RETVAL -eq 0 ] && RETVAL=$RET
+       done
+       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyncd
 }
 
 stop() {
-       # Stop daemons.
-       if [ -f /var/lock/subsys/rsyncd ]; then
-               msg_stopping rsyncd
-               killproc rsync
-               rm -f /var/lock/subsys/rsyncd >/dev/null 2>&1
-       else
-               msg_not_running rsyncd
-       fi
+       msg_stopping "rsyncd"; started
+       for daemon in $DAEMONS; do
+               pidfile=/var/run/rsyncd/$daemon.pid
+               [ -f "$pidfile" ] || continue
+               pid=`cat "$pidfile"`
+               show "Stopping Rsync daemon %s" "$daemon"; busy
+               killproc --pidfile rsyncd/$daemon.pid || err=1
+       done
+       rm -f /var/lock/subsys/rsyncd >/dev/null 2>&1
+}
+
+reload() {
+       msg_reloading "rsyncd"; started
+       for daemon in $DAEMONS; do
+               pidfile=/var/run/rsyncd/$daemon.pid
+               [ -f "$pidfile" ] || continue
+               show "Reloading Rsync daemon %s" "$daemon"
+               killproc --pidfile rsyncd/$daemon.pid rsyncd -HUP
+               [ $? -ne 0 -a $RETVAL -eq 0 ] && RETVAL=7
+       done
 }
 
 condrestart() {
@@ -60,17 +109,41 @@ condrestart() {
        fi
 }
 
+status() {
+       nls "Configured daemons:"
+       echo " $DAEMONS"
+       nls "Currently active daemons:"
+       for pidfile in /var/run/rsyncd/*.pid; do
+               [ -f "$pidfile" ] || continue
+               daemon=${pidfile#/var/run/rsyncd/}
+               daemon=${daemon%.pid}
+               daemonup $daemon && echo -n " $daemon($(cat $pidfile))"
+       done
+       echo ""
+       nm_rsyncd_pid=$(ps -o pid= -C nm-rsyncd-service | xargs)
+       if [ "$nm_rsyncd_pid" ]; then
+               nls "NM ($nm_rsyncd_pid) managed rsyncd sessions"
+               ps -o pid,user,command --ppid=$nm_rsyncd_pid
+       fi
+       daemonsup
+       RETVAL=$?
+}
+
 RETVAL=0
 # See how we were called.
 case "$1" in
   start)
-       start
+       start
        ;;
   stop)
-       stop
+       stop
+       ;;
+  reload)
+       reload
        ;;
   restart)
        stop
+       sleep 1
        start
        ;;
   try-restart)
@@ -80,12 +153,12 @@ case "$1" in
        condrestart 7
        ;;
   status)
-       status rsyncd rsync
-       exit $?
+       status
        ;;
   *)
-       msg_usage "$0 {start|stop|restart|try-restart|force-reload|status}"
+       msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|status}"
        exit 3
+       ;;
 esac
 
 exit $RETVAL
index 8023f15973f06c755df1fd677c12c6b9d709d16b..573f42bcbc90901e2c962eba2e3279076038c969 100644 (file)
@@ -198,7 +198,7 @@ cp -f /usr/share/automake/config.sub .
 
 %install
 rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_sysconfdir},/etc/{sysconfig/rc-inetd,rc.d/init.d,logrotate.d,env.d},/var/log}
+install -d $RPM_BUILD_ROOT{%{_sysconfdir},/etc/{sysconfig/rc-inetd,rc.d/init.d,logrotate.d,env.d},/var/{log,run/rsyncd}}
 
 %{__make} install \
        prefix=$RPM_BUILD_ROOT%{_prefix} \
@@ -288,4 +288,5 @@ fi
 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/logrotate.d/rsyncd
 %attr(640,root,root) %ghost /var/log/rsyncd.log
 %attr(754,root,root) /etc/rc.d/init.d/rsyncd
+%dir /var/run/rsyncd
 %{_mandir}/man5/rsyncd.conf.5*
index b0420e9f1d0704075b7e38d1feac44e988d52409..30b50c9bf648a5952fc8878a49afb7cee868866f 100644 (file)
@@ -8,3 +8,7 @@ SERVICE_RUN_NICE_LEVEL="+5"
 # -4   - use only IPv4 address
 # -6   - use only IPv6 address
 #RSYNC_OPTIONS="-4"
+
+# Daemons to set up
+# For each daemon name, there should be config file in /etc/rsyncd
+DAEMONS="rsyncd"
index de382b1e9399fff59f2def00a4c6526ed8686197..a9360455c70e10003f71dfd889febeee67b558cb 100644 (file)
@@ -1,4 +1,4 @@
-/var/log/rsyncd.log {
+/var/log/rsyncd*.log {
        create 640 root logs
        delaycompress
 }
This page took 0.124138 seconds and 4 git commands to generate.