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