shell if 條件語句實踐


對於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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM