對於if 語法 我們不過多做介紹,這里直接上實例,以開發rsync服務啟動腳本為例,先對rsync做個簡單介紹
[root@backup ~]# rpm -qa|grep rsync rsync-3.0.6-12.el6.x86_64 [root@backup ~]# [root@backup ~]# cat /etc/rsync rsyncd.conf rsync.password [root@backup ~]# cat /etc/rsyncd.conf #Rsync server uid = rsync gid = rsync use chroot = no max connections = 2000 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 172.16.80.0/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password ########### [backup] comment = backup by martin 20170613 path = /backup [root@backup ~]# cat /etc/rsync rsyncd.conf rsync.password [root@backup ~]# cat /etc/rsync.password rsync_backup:123456 [root@backup ~]# [root@backup ~]# rsync --daemon #啟動rsync [root@backup ~]# netstat -lntup|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 24837/rsync tcp 0 0 :::873 :::* LISTEN 24837/rsync
[root@backup ~]# pkill rsync #停止rsync
[root@backup ~]# netstat -lntup|grep rsync
判斷rsync服務是否啟動的方法
常規方法有檢測端口以及進程是否存在,可以當服務啟動時,創建一個鎖文件 /var/lock/subsys/ 而當服務停止時,就刪除這個鎖文件,這樣就可以通過判斷這個文件有無來確定服務是否是啟動的狀態,這是一些系統腳本常用的手法,腳本開發如下
[root@backup ~]# cat rsyncd.sh #!/bin/bash # chkconfig: 2345 20 80
# 2345是linux的啟動運行級別,20表示開始啟動順序,80表示腳本停止順序,這兩個數字都是不超過99的數字,應用服務一般要考后啟動為佳,越早停止越好
if [ $# -ne 1 ];then echo $"usage: $0 {start|stop|restart}" exit 1 fi if [ "$1" = "start" ];then rsync --daemon sleep 2 if [ `netstat -lntup|grep rsync|wc -l` -ge 1 ];then echo "rsyncd is started." fi elif [ "$1" = "stop" ];then pkill rsync &>/dev/null sleep 2 if [ `netstat -lntup|grep rsync|wc -l` -eq 0 ];then echo "rsyncd is stopped." fi elif [ "$1" = "restart" ];then pkill rsync sleep 2 killpro=`netstat -lntup|grep rsync|wc -l` rsync --daemon sleep 1 startpro=`netstat -lntup|grep rsync|wc -l` if [ $killpro -eq 0 -a $startpro -ge 1 ];then echo "rsyncd is restarted." fi else echo $"usage: $0 {start|stop|restart}" exit 1 fi [root@backup ~]# [root@backup ~]# [root@backup ~]# ps -ef|grep rsync root 24892 24780 0 00:00 pts/0 00:00:00 grep rsync [root@backup ~]# [root@backup ~]# [root@backup ~]# sh rsyncd.sh start rsyncd is started. [root@backup ~]# [root@backup ~]# ps -ef|grep rsync root 24895 1 0 00:00 ? 00:00:00 rsync --daemon root 24902 24780 0 00:00 pts/0 00:00:00 grep rsync [root@backup ~]# netstat -lntup |grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 24895/rsync tcp 0 0 :::873 :::* LISTEN 24895/rsync [root@backup ~]# [root@backup ~]# sh rsyncd.sh restart rsyncd is restarted. [root@backup ~]# netstat -lntup |grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 24928/rsync tcp 0 0 :::873 :::* LISTEN 24928/rsync [root@backup ~]# sh rsyncd.sh stop rsyncd is stopped. [root@backup ~]# netstat -lntup |grep rsync
使用shell函數封裝的方法來優化上面的腳本,改良后的腳本如下
[root@backup ~]# cat /etc/init.d/rsyncd #!/bin/sh # chkconfig: 2345 20 80 . /etc/init.d/functions if [ $# -ne 1 ];then echo $"USAGE: $0 {start|stop|restart}" exit 1 fi start(){ rsync --daemon sleep 1 if [ `netstat -lntup|grep rsync|wc -l` -ge 1 ];then action "rsyncd is started." /bin/true else action "rsyncd is stopped." /bin/false fi } stop(){ killall rsync &>/dev/null sleep 2 if [ `netstat -lntup|grep rsync|wc -l` -eq 0 ];then action "rsyncd is stopped." /bin/true else action "rsyncd is started." /bin/false fi } restart(){ stop sleep 1 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "echo "USAGE: $0 {start|stop|restart}"" esac