首先在写脚本之前,你要知道关于rsync的理论知识与实操,才能写好一个ok的脚本。

我们先来捋一捋:

rsync的启动命令:

rsync --daemon

停止命令:

kill rsync进程号

pkill rsync

killall rsync


话不多说,上脚本:

#!/bin/bash###################################### File Name: rsyncd.sh# Version: V1.0# Author: wuhan# Created Time : 2018-10-14 13:19:53# Description: rsync service script#####################################. /etc/init.d/functions#首先加载/etc/init.d/functions,待会我们需要用里面的基础函数lockfile="/var/lock/subsys/rsyncd"#定义一个锁文件的变量rpfp="/var/run/rsyncd.pid"#写一个rsync端口ID的变量,方便多次引用,可在此脚本中使用#写一个函数,名为startstart(){    #函数名    rsync --daemon && >/dev/null    #rsync服务启动命令,启动成功后输出到空    retval=$?    #获取返回值    if [ $retval -eq 0 ]    #如果返回值等于0    then    #那么执行如下操作        action "rsync startup ok" /bin/true        #用action函数输出启动成功的内容并显示ok        touch $lockfile        #在创建一个锁文件        return $retval        #返回使用启动命令后的返回值    else    #否则        action "rsync startup fail" /bin/false        #输出服务启动失败的内为,显示false        return $retval        #也返回启动命令后的返回值,方便排错    fi    #退出}#写一个停止命令的函数,名为stopstop(){    if test -s "$rpfp"    #如果端口ID文件长度不为0,那么为真,执行如下操作    then        rsyncd_pid=`cat $rpfp`        #定义一个端口ID号的变量        if (kill -0 $rsyncd_pid &>/dev/null)        #如果端口ID号存在,且输出到空        then        #执行如下操作            kill $rsyncd_pid            #通过进程号杀掉rsync服务            retval=$?            #获取返回值            if [ $retval -eq 0 ]            #如果返回值等于0,执行如下指令            then                action "rsync stop ok" /bin/true                #输出服务停止成功,显示ok                rm -fr $lockfile                #如果杀掉rsync服务,那就删除锁文件                return "$retval"                #获取返回值            else            #否则执行如下操作                action "rsync stop fail" /bin/false                #输出rsync停止失败,显示false                return $retval                #获得返回值            fi        else        #否则            echo "rsyncd process is not exist."            #提示rsync进程不存在            return 2            #返回值2        fi    else    #否则        echo "${rpfp}is not exist,or rsync does not startup"        #提示端口号不存在或rsync服务没启动    fi    #结束}case "$1" in#因为写了函数,所以我们这里用case结构条件句更适合,定义$1为变量    start)    #匹配到start 执行start函数并获取返回值        start        retval=$?        ;;    stop)    #匹配到stop 执行stop函数并获取返回值        stop        retval=$?        ;;    restart)    #匹配到restart 先执行stop函数休眠1s在执行start实现restart,并获取返回值        stop        sleep 1        start        retval=$?        ;;    *)    #都没有匹配到就输出提示只能执行三个函数中的一个        echo " usage: $0 {start|stop|restart} "        exit 1esac#结束exit $retval#退出并取得返回值从而进行判断


试验:聪明的你可以看到PID进程号在我们的停止开启和重启之后更改,说明脚本ok。

[root@node1 ~]# lsof -i:873COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMErsync   10044 root    4u  IPv4 639767      0t0  TCP *:rsync (LISTEN)rsync   10044 root    5u  IPv6 639768      0t0  TCP *:rsync (LISTEN)[root@node1 ~]# sh /server/scripts/09/rsyncd3.sh stoprsync stop ok                                              [  OK  ][root@node1 ~]# lsof -i:873[root@node1 ~]# [root@node1 ~]# sh /server/scripts/09/rsyncd3.sh startrsync startup ok                                           [  OK  ][root@node1 ~]# lsof -i:873COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMErsync   10212 root    4u  IPv4 664268      0t0  TCP *:rsync (LISTEN)rsync   10212 root    5u  IPv6 664269      0t0  TCP *:rsync (LISTEN)[root@node1 ~]# sh /server/scripts/09/rsyncd3.sh restartrsync stop ok                                              [  OK  ]rsync startup ok                                           [  OK  ][root@node1 ~]# lsof -i:873COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMErsync   10227 root    4u  IPv4 664325      0t0  TCP *:rsync (LISTEN)rsync   10227 root    5u  IPv6 664326      0t0  TCP *:rsync (LISTEN)


此脚本直接复制粘贴即可使用,需要/etc/rsyncd.conf配置好pid和锁文件