服务端
#!/bin/sh
# chkconfig:
# description: Saves and restores system entropy pool for \
#create by xiaohu
#2014.06.
#This script is the Rsync service script
. /etc/init.d/functions
case "$1" in
start)
echo "rsync is starting"
/usr/local/rsyncd/bin/rsync --daemon --config=/etc/rsyncd.conf
sleep
myport=`netstat -lnt|grep |wc -l`
if [ $myport -eq ]
then
action "rsync start" /bin/true
else
action "rsync start" /bin/false
fi
;;
stop)
echo "rsync is stoping"
myport=`netstat -lnt|grep |wc -l`
if [ $myport -eq ]
then
killall rsync &>/dev/null
sleep
killall rsync &>/dev/null
sleep
fi
myport=`netstat -lnt|grep |wc -l`
if [ $myport -ne ]
then
action "rsync stop" /bin/true
else
action "rsync stop" /bin/false
fi
;;
restart)
if [ `netstat -lnt|grep |wc -l` -eq ]
then
/usr/local/rsyncd/bin/rsync --daemon --config=/etc/rsyncd.conf
sleep
myport=`netstat -lnt|grep |wc -l`
if [ $myport -eq ]
then
action "rsync restart" /bin/true
else
action "rsync restart" /bin/false
exit
fi
else
killall rsync &>/dev/null
sleep
killall rsync &>/dev/null
sleep
/usr/local/rsyncd/bin/rsync --daemon --config=/etc/rsyncd.conf
sleep
myport=`netstat -lnt|grep |wc -l`
if [ $myport -eq ]
then
action "rsync restart" /bin/true
else
action "rsync restart" /bin/false
fi
fi
;;
status)
myport=`netstat -lnt|grep |wc -l`
if [ $myport -eq ]
then
echo "rsync is running"
else
echo "rsync is stoped"
fi
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
;;
esac
客户端
#! /bin/sh ### BEGIN INIT INFO
# Provides: rsyncd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $named autofs
# Default-Start:
# 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 . /lib/lsb/init-functions if [ -s $RSYNC_DEFAULTS_FILE ]; then
. $RSYNC_DEFAULTS_FILE
case "x$RSYNC_ENABLE" in
xtrue|xfalse) ;;
xinetd) exit
;;
*) 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
;;
esac
case "x$RSYNC_NICE" in
x[-]|x1[-]) 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[]*) 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
exit
fi
# See ionice()
if [ -n "$RSYNC_IONICE_PARM" ] && [ -x /usr/bin/ionice ] &&
/usr/bin/ionice "$RSYNC_IONICE_PARM" true >/dev/null; then
/usr/bin/ionice "$RSYNC_IONICE_PARM" -p$$ > /dev/null >&
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=
sleep
if ! kill - $(cat $RSYNC_PID_FILE) >/dev/null >&; then
log_failure_msg "rsync daemon failed to start"
rc=
fi
else
rc=
fi
if [ $rc -eq ]; then
log_end_msg
else
log_end_msg
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 - $(cat $RSYNC_PID_FILE) >/dev/null >&; then
log_progress_msg "apparently already running"
log_end_msg
exit
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 --pidfile $RSYNC_PID_FILE
log_end_msg $?
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 - $(cat $RSYNC_PID_FILE) >/dev/null >&; then
start-stop-daemon --stop --quiet --oknodo --pidfile $RSYNC_PID_FILE || true
sleep
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
esac exit
开机自动启动rsync
1. 扔脚本进去/etc/init.d/
2. 授权
chmod +x rsync
3. 一旦抛出:binsh^M错误就执行编码改写
设置dos统一编码
(请看rsync脚本抛出binsh^M bad interpreter文档)
4. 添加到服务
chkconfig --add ningx
5. 随机启动脚本带动rsync开机启动
chkconfig --level 2345 rsync on
执行脚本时发现如下错误:
/bin/sh^M: bad interpreter: 没有那个文件或目录
错误分析:
因为操作系统是windows,我在windows下编辑的脚本,所以有可能有不可见字符。
脚本文件是DOS格式的, 即每一行的行尾以\n\r来标识, 其ASCII码分别是0x0D, 0x0A.
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
解决方法:
vim filename
然后用命令
:set ff? #可以看到dos或unix的字样. 如果的确是dos格式的。
然后用
:set ff=unix #把它强制为unix格式的, 然后存盘退出。
再次运行脚本。