如何用shell写一个rsync网络服务启动脚本

首先在写脚本之前,你要知道关于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和锁文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容