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