服务端
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
客户端
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
开机自动启动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格式的, 然后存盘退出。
再次运行脚本。
以上がrsyncランダム起動スクリプトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。