如何用shell写一个rsync网络服务启动脚本?超级详细!
admin
2023-01-21 04:40:54
0

首先在写脚本之前,你要知道关于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的变量,方便多次引用,可在此脚本中使用

#写一个函数,名为start
start(){
    #函数名
    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
    #退出
}

#写一个停止命令的函数,名为stop
stop(){
    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 1
esac
#结束
exit $retval
#退出并取得返回值从而进行判断


试验:聪明的你可以看到PID进程号在我们的停止开启和重启之后更改,说明脚本ok。
[root@node1 ~]# lsof -i:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   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 stop
rsync stop ok                                              [  OK  ]
[root@node1 ~]# lsof -i:873
[root@node1 ~]# 
[root@node1 ~]# sh /server/scripts/09/rsyncd3.sh start
rsync startup ok                                           [  OK  ]
[root@node1 ~]# lsof -i:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   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 restart
rsync stop ok                                              [  OK  ]
rsync startup ok                                           [  OK  ]
[root@node1 ~]# lsof -i:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   10227 root    4u  IPv4 664325      0t0  TCP *:rsync (LISTEN)
rsync   10227 root    5u  IPv6 664326      0t0  TCP *:rsync (LISTEN)


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

相关内容

热门资讯

平均每天减少22所小学,会带来... 学龄人口收缩将是长期趋势,这为教育发展目标从“规模满足”转向“质量提升”打开了窗口文|《财经》记者 ...
“机车”的民进党怕的不是车,是... 【文/观察者网专栏作者 甘向泰】近日,一则消息在海峡两岸炸开:张雪机车董事长张雪日前接受媒体采访时表...
以媒:美国通知以方将扩大对伊袭... 【环球网报道】据《以色列时报》、《新消息报》网站等以媒22日报道,美国已通知以色列,计划扩大对伊朗的...
毒油案发22天才启动事故调查,... 海峡导报综合报道 台当局卫生主管部门负责人石崇良21日公布“中联油脂”30批预防性下架油品样本检验结...
特朗普再威胁,伊朗各方回应 当地时间7月22日,伊朗外交部长阿拉格齐在社交平台上发文表示,伊朗的防御原则非常明确:以眼还眼。他写...
男子拍台球助教臀部被拘留,称对... 近日,据《1818黄金眼》报道,浙江杭州一男子洪先生因在台球俱乐部拍打女助教臀部,被警方认定构成猥亵...
【正片首发】麦田里,当河南坠子... 您的浏览器不支持 video 标签。当麦田里的守望者遇见麦田里的歌唱者,当河南坠子、宋词吟唱、摇滚回...
宗馥莉再次败诉!律师解读:香港... 作者:刘婷宗馥莉围绕18亿美元资产的第三次努力,还是没能成功。7月21日,香港高等法院就娃哈哈集团创...
德国人还在纠结打孔?中国制造已... 近5年来,持续高温不断刷新德国人对夏季气候的认知。“与记忆中的德国相比,如今夏天更热,高温天气也更常...
特朗普第三度通谍伊朗,红线划到... 前一天刚刚宣称“赢麻了”的美国总统特朗普,22日突然通过社交媒体向伊朗强硬喊话。“即刻起,只要伊朗伊...