#!/bin/bash unset QNAP_QPKG 2>/dev/null HBS_ENABLE=$(/sbin/getcfg HybridBackup Enable -d FALSE -f /etc/config/qpkg.conf) if [ "x$HBS_ENABLE" = xFALSE ]; then export QNAP_QPKG=rsync else export QNAP_QPKG=HybridBackup /usr/local/sbin/qboost_util -S -n rsync -E 0 1>/dev/null 2>&1 fi DEBUG=TRUE RSYNCD_CONF="/etc/config/rsyncd.conf" LOG_DIR="/mnt/ext/opt/HybridBackup/logs" LOG_FILE="${LOG_DIR}/rsyncd_sh.log" log2file() { if [ "${DEBUG}" == "TRUE" ] && [ -d "${LOG_DIR}" ]; then echo "[$(date '+%Y/%m/%d %H:%M:%S')] $*" >> "${LOG_FILE}" fi } log() { echo "$*" if [ "${DEBUG}" == "TRUE" ] && [ -d "${LOG_DIR}" ]; then echo "[$(date '+%Y/%m/%d %H:%M:%S')] $*" >> "${LOG_FILE}" fi } log_stderr() { echo "$*" >&2 if [ "${DEBUG}" == "TRUE" ] && [ -d "${LOG_DIR}" ]; then echo "[$(date '+%Y/%m/%d %H:%M:%S')] [E] $*" >> "${LOG_FILE}" fi } rsyncd_running() { # shellcheck disable=SC2009 _rsyncd_ps=$(ps | grep "rsyncd --daemon" | grep -v grep) if [ -n "${_rsyncd_ps}" ]; then log2file "rsyncd_ps -> ${_rsyncd_ps}" return 0 # True fi return 1 # False } pid_running() { kill -0 $1 && return 0 return 1 } start() { [ -f ${RSYNCD_CONF} ] && /bin/chmod 640 ${RSYNCD_CONF} _prefix_msg="Starting rsync services:" if [ "$(/sbin/getcfg System "Rsync Support" -u -d FALSE)" == "FALSE" ]; then log_stderr "${_prefix_msg} config is disabled." exit 3 fi # check is started if rsyncd_running; then log "${_prefix_msg} already started." exit 0 fi # check port number unused by other process _port=$(/sbin/getcfg "" "port" -f "${RSYNCD_CONF}" -d "873") _process=$(lsof -iTCP -sTCP:LISTEN -P -n | grep ":${_port} " | head -1 | awk '{print $1}') if [ -n "${_process}" ] && [ "${_process}" != "rsyncd" ]; then log_stderr "${_prefix_msg} failed by port number \"${_port}\" already in use on process \"${_process}\"." exit 2 fi # start service log "${_prefix_msg} rsync." [ -f /var/run/rsyncd.pid ] && /bin/rm -f /var/run/rsyncd.pid /usr/bin/rsyncd --daemon --sever-mode=1 --qnap-bwlimit sleep 1 for i in {1..5} do # shellcheck disable=SC2002 _pid=$(cat /var/run/rsyncd.pid | tr -d '\n') if [ -n "${_pid}" ] && /bin/kill -0 "${_pid}" &>/dev/null; then log "${_prefix_msg} success." return fi sleep 1 done log_stderr "${_prefix_msg} rsyncd run failed." exit 4 } status() { if rsyncd_running; then echo "rsync services started." exit 0 fi echo "rsync services stopped." exit 1 } stop() { _prefix_msg="Shutting down rsync services:" log "${_prefix_msg} rsync." if rsyncd_running; then # shellcheck disable=SC2002 _pid=$(cat /var/run/rsyncd.pid | tr -d '\n') log2file "rsyncd.pid: ${_pid}" # shellcheck disable=SC2009 _ps_rsyncd=$(ps | grep '/usr/bin/rsyncd' | grep -v grep) log2file "rsyncd ps: ${_ps_rsyncd}" /bin/kill -9 "${_pid}" &>/dev/null sleep 1 # shellcheck disable=SC2034 for i in {1..5} do if pid_running "${_pid}"; then sleep 1 else log "${_prefix_msg} success." # kill other fork rsyncd process _pid=$(/bin/pidof rsyncd) if [ -n "$_pid" ]; then log2file "kill other pids: ${_pid}" /bin/kill -9 "${_pid}" &>/dev/null sleep 1 fi return fi done log_stderr "${_prefix_msg} failed." exit 1 fi } case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop sleep 1 start ;; *) echo "Usage: /etc/init.d/rsyncd.sh {start|stop|status|restart}" exit 255 esac exit 0