1. 程式人生 > >shell學習筆記(4)

shell學習筆記(4)

shell 基礎 筆記 雜記

一、

1、利用系統函數模擬實現系統腳本啟動特殊顏色效果

1.1 查看系統函數庫

[root@master4 ~]# ll /etc/init.d/functions 
-rw-r--r--. 1 root root 13948 Sep 16  2015 /etc/init.d/functions
[root@master4 ~]# 

1.2 腳本

[root@master4 day5]# vim test_startup.sh

#!/bin/sh

# Source function library.
[ -f /etc/init.d/functions ] && . /etc/init.d/functions

if [ "$1" == "start" ];then
    action "nginx starting." /bin/true
elif [ "$1" == "stop" ];then 
    action "nginx is stopped." /bin/true
else
    action "nginx start" /bin/false
fi

測試
[root@master4 day5]# sh test_startup.sh 
nginx start                                                [FAILED]

[root@master4 day5]# sh test_startup.sh start
nginx starting.                                            [  OK  ]
[root@master4 day5]# sh test_startup.sh stop
nginx is stopped.                                          [  OK  ]
[root@master4 day5]# 

提示輸入參數:
#!/bin/sh

# Source function library.
[ -f /etc/init.d/functions ] && . /etc/init.d/functions

if [ "$1" == "start" ];then
    action "nginx starting." /bin/true
elif [ "$1" == "stop" ];then
    action "nginx is stopped." /bin/true
else
    echo "USAGE:$0 {START|STOIP}"
    #action "nginx start" /bin/false
    exit
fi

2、檢查文件是否被惡意篡改

2.1 方法1

判斷裏面的值

[root@master4 day5]# vim judge.sh 

#!/bin/sh
. /etc/init.d/functions

if [ `cat a.log | wc -L` -ne 1 ];then
    action "a.log" /bin/false
else
    action "a.log" /bin/true
fi

測試:
[root@master4 day5]# sh judge.sh 
a.log                                                      [  OK  ]
[root@master4 day5]# echo 111 > a.log 
[root@master4 day5]# sh judge.sh 
a.log                                                      [FAILED]
[root@master4 day5]#

多文件測試:
[root@master4 day5]# vim judge.sh 

#!/bin/sh
. /etc/init.d/functions
for f in `ls *.log`
do

    if [ `cat $f | wc -L` -ne 1 ];then
        action "$f" /bin/false
    else
        action "$f" /bin/true
    fi
done

[root@master4 day5]# sh judge.sh 
a.log                                                      [FAILED]
b.log                                                      [  OK  ]
[root@master4 day5]# 

記住默認長度:
[root@master4 day5]# for f in `ls *.log`;do wc -L $f;done > c.txt

[root@master4 day5]# cat judge.sh 
#!/bin/sh
. /etc/init.d/functions
for f in `ls *.log`
do

    if [ `cat $f | wc -L` -ne `grep $f c.txt | awk ‘{print $1}‘` ];then
        action "$f" /bin/false
    else
        action "$f" /bin/true
    fi
done

2.2 雜項

項目上線的時候,記錄所有網頁文件的內容長度:

[root@master4 day5]# for f in *.html;do wc -L $f;done > c.txt 
[root@master4 day5]# cat c.txt 
4 a.html
10 b.html

[root@master4 day5]# cat judge.sh 
#!/bin/sh
. /etc/init.d/functions
for f in `ls *.html`
do

    if [ `cat $f | wc -L` -ne `grep $f c.txt | awk ‘{print $1}‘` ];then
    action "$f" /bin/false
    else
    action "$f" /bin/true
    fi
done
[root@master4 day5]# sh judge.sh 
a.html                                                     [  OK  ]
b.html                                                     [  OK  ]

2.3 md5比較

a.建立指紋庫
[root@master4 day5]# md5sum * > zhiwen.log
d8e8fca2dc0f896fd7cb4cb0031ba249  a.html
d8e8fca2dc0f896fd7cb4cb0031ba249  a.log
d4790652b48d41469dd26dd97c71a894  b.html
d4790652b48d41469dd26dd97c71a894  b.log
fac9b0bb2ed61fbda507fcbd18184f85  c.txt
47465a40feb7a298f96909e397b8008a  judge.sh
b4da16b2efbef8d5800be2693c58457b  test_startup.sh

修改文件:
[root@master4 day5]# md5sum -c zhiwen.log 
a.html: OK
a.log: OK
b.html: OK
b.log: OK
c.txt: OK
judge.sh: OK
test_startup.sh: OK
[root@master4 day5]# echo oldboy > b.log
[root@master4 day5]# md5sum -c zhiwen.log 
a.html: OK
a.log: OK
b.html: OK
b.log: FAILED
c.txt: OK
judge.sh: OK
test_startup.sh: OK
md5sum: WARNING: 1 computed checksum did NOT match

b.實例腳本:
[root@master4 day5]# mkdir oldboy
[root@master4 day5]# touch oldboy/{1..9}.txt
[root@master4 day5]# ls oldboy/
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

[root@master4 day5]# vim md5check01.sh 

#!/bin/sh
. /etc/init.d/functions

[root@master4 day5]# vim md5check01.sh 

#!/bin/sh

[ ! -f md5zhiwen.log ] && md5sum oldboy/* > md5zhiwen.log
md5sum -c md5zhiwen.log | grep -i ‘FAILED‘ > error.log
if [ `cat error.log | wc -l` -ge 1  ];then
    echo "`cat error.log`"
fi

測試:
[root@master4 day5]# echo 3 > oldboy/3.txt 
[root@master4 day5]# 
[root@master4 day5]# 
[root@master4 day5]# sh md5check01.sh 
md5sum: WARNING: 2 computed checksums did NOT match
oldboy/1.txt: FAILED
oldboy/3.txt: FAILED

c.腳本2
vim :g/ggg/s//root/g

生成指紋庫:
[root@master4 day5]# find /server/scripts/day5/ -type f -name "*" -exec md5sum {}>/root/checkmd5.db \;

[root@master4 day5]# vim md5check02.sh 

#!/bin/bash

CHECK_DIR=/server/scripts/day5
if [ -e /root/checkmd5.db ];then
    md5sum -c /root/checkmd5.db > /root/result.db 2>/dev/null
    egrep -i "FAILED" /root/result.db > /root/err.log
    if [ -s /root/err.log ];then
        mail -s "`uname -n ` $(date +%F) web is error" root@localhost < /root/err.log
    else
        echo "file is not modife" | mail -s "web is true" root@localhost
    fi
fi

測試:
[root@master4 day5]# echo "djfldjfld" > a.log 
[root@master4 day5]# sh -x md5check02.sh 
+ CHECK_DIR=/server/scripts/day5
+ ‘[‘ -e /root/checkmd5.db ‘]‘
+ md5sum -c /root/checkmd5.db
+ egrep -i FAILED /root/result.db
+ ‘[‘ -s /root/err.log ‘]‘
++ uname -n
++ date +%F
+ mail -s ‘master4.com 2018-01-14 web is error‘ root@localhost

放到計劃任務:
[root@master4 day5]# crontab -e

#md5 check etc
***** /bin/sh /server/scripts/day5/md5check02.sh > /dev/null 2>&1

3、監聽端口的聯通性

3.1 telnet

[root@master4 ~]# telnet 10.201.106.134 80
Trying 10.201.106.134...
Connected to 10.201.106.134.
Escape character is ‘^]‘.

[root@master4 ~]# echo -e "\n" | telnet 10.201.106.134 80 | grep Connected
Connected to 10.201.106.134.
Connection closed by foreign host.

[root@master4 ~]# echo -e "\n" | telnet 10.201.106.134 80 | grep Connected | wc -l
Connection closed by foreign host.
1

3.2 namp

[root@master4 ~]# nmap 10.201.106.134 -p 80 | grep open
80/tcp open  http
[root@master4 ~]# nmap 10.201.106.134 -p 80 | grep open | wc -l
1
[root@master4 ~]# 

3.3 nc

[root@node3 ~]# nc -w 2 10.201.106.134 80 && echo ok || echo no
ok
[root@node3 ~]# nc -w 2 10.201.106.134 80 && echo ok || echo no
no
[root@node3 ~]#

4、監控memcached

http://oldboy.blog.51cto.com/2561410/942530

二、case

1、例子

[root@master4 day5]# cat case-1.sh 
#!/bin/bash
# this script is created by xsz
# e-mail:[email protected]
# qqinfo:666
# version:1.1

read -p "Please input a number:" ans
case "$ans" in
1)
    echo "the num you input is 1"
;;
2)
    echo "the num you input is 2"
;;
[3-9])
    echo "the num you input is $ans"
;;
*)
    echo "the num you input must be less 9."
    exit
esac

測試
[root@master4 day5]# sh case-1.sh
Please input a number:1
the num you input is 1
[root@master4 day5]# sh case-1.sh
Please input a number:2
the num you input is 2
[root@master4 day5]# sh case-1.sh
Please input a number:8
the num you input is 8

[root@master4 day5]# cat case-if.sh 
#!/bin/sh

read -p "please input a number:" ans
if [ $ans -eq 1 ];then
     echo "the num you input is 1"  
elif [ $ans -eq 2 ];then
    echo "the num your input 2"
elif [ $ans -ge 3 -a $ans -le 9 ];then
    echo "the num you input is $ans"
else
    echo "the num you input must be less 9"
    exit
fi

2、例子2-選擇喜歡的水果並配色

[root@master4 day5]# cat case-2.sh 
#!/bin/bash
# xsz
# e-mail:[email protected]
# qq:666
# function:case example
# version:1.1
# color defined

RED_COLOR=‘\E[1;31m‘
GREEN_COLOR=‘\E[1;32m‘
YELLOW_COLOR=‘\E[1;33m‘
BLUE_COLOR=‘\E[1;34m‘
RES=‘\E[0m‘

read -p "Please input the fruit name you like :" ans
case "$ans" in
apple | APPLE)
    echo -e "the fruit name you like is ${RED_COLOR}"$ans."${RES}"
;;

banana | BANANA)
    echo -e "the fruit name you like is ${YELLOW_COLOR}$ans.${RES}"
;;

pear | PEAR)
    echo -e "the fruit name you like is ${GREEN_COLOR}"$ans."${RES}"
;;

*)
    echo -e "Here is not the fruit name you like--${BLUE_COLOR}"$ans."${RES}"
    exit
;;

esac

3、給字符串顯示不同顏色

3.1 直接加顏色

[root@master4 day5]# cat color.sh 
echo -e "\033[30m 黑色字 oldboy trainning \033[0m"
echo -e "\033[31m 紅色字 oldboy trainning \033[0m"
echo -e "\033[32m 綠色字 oldboy trainning \033[0m"
echo -e "\033[33m ×××字 oldboy trainning \033[0m"
echo -e "\033[34m 藍色字 oldboy trainning \033[0m"
echo -e "\033[35m 紫色字 oldboy trainning \033[0m"
echo -e "\033[36m 天藍字 oldboy trainning \033[0m"
echo -e "\033[37m 白色字 oldboy trainning \033[0m"

3.2 腳本,定義變量

[root@master4 day5]# cat color2.sh 
#!/bin/sh
RED_COLOR=‘\E[1;31m‘
GREEN_COLOR=‘\E[1;32m‘
YELLOW_COLOR=‘\E[1;33m‘
BLUE_COLOR=‘\E[1;34m‘
PINK=‘\E[1;35m‘
RES=‘\E[0m‘

echo -e "${RED_COLOR}===red color===${RES}"
echo -e "${YELLOW_COLOR}===yellow color===${RES}"
echo -e "${BLUE_COLOR}===blue color===${RES}"
echo -e "${GREEN_COLOR}===green color===${RES}"
echo -e "${PINK}===pink color===${RES}"
[root@master4 day5]# 
[root@master4 day5]# sh color2.sh 
===red color===
===yellow color===
===blue color===
===green color===
===pink color===
[root@master4 day5]# 

3.3 參考function的腳本

[root@master4 day5]# cat color3.sh 
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[1;39m"
echo ---oldboy trainning--- && $SETCOLOR_SUCCESS
echo ---oldboy trainning--- && $SETCOLOR_FAILURE
echo ---oldboy trainning--- && $SETCOLOR_WARNING
echo ---oldboy trainning--- && $SETCOLOR_NORMAL

3.4 給內容加顏色的函數

在腳本命令行傳2個參數,給指定內容(第一個參數)加指定顏色(第二個顏色)

[root@master4 day5]# cat color4.sh 
#!/bin/bash

RED_COLOR=‘\E[1;31m‘
GREEN_COLOR=‘\E[1;32m‘
YELLOW_COLOR=‘\E[1;33m‘
BLUE_COLOR=‘\E[1;34m‘
PINK_COLOR=‘\E[1;35m‘
RES=‘\E[0m‘

if [ $# -ne 2 ];then
    echo "Usage $0 content {red|yellow|blue|green|pink}"
    exit
fi

case "$2" in
red|RED)
    echo -e "${RED_COLOR}$1${RES}"
    ;;

yellow|YELLOW)
    echo -e "${YELLOW_COLOR}$1${RES}"
    ;;

green|GREEN)
    echo -e "${GREEN_COLOR}$1${RES}"
    ;;

blue|BLUE)
    echo -e "${BLUE_COLOR}$1${RES}"
    ;;

pink|PINK)
    echo -e "${PINK_COLOR}$1${RES}"
    ;;

*)
    echo "Usage color {red|yellow|blue|green|pink}"
    exit
    ;;

esac

改造成read腳本:
[root@master4 day5]# cat color-read.sh 
#!/bin/bash

RED_COLOR=‘\E[1;31m‘
GREEN_COLOR=‘\E[1;32m‘
YELLOW_COLOR=‘\E[1;33m‘
BLUE_COLOR=‘\E[1;34m‘
PINK_COLOR=‘\E[1;35m‘
RES=‘\E[0m‘

read -t 9 -p "Please input tow char,format:content color:" content color
[ -z "$content" -o -z "$color" ] && {
    echo "Usage $0 content {red|yellow|blue|green|pink}"
    exit
}

case "$color" in
red|RED)
    echo -e "${RED_COLOR}$color${RES}"
    ;;

yellow|YELLOW)
    echo -e "${YELLOW_COLOR}$color${RES}"
    ;;

green|GREEN)
    echo -e "${GREEN_COLOR}$color${RES}"
    ;;

blue|BLUE)
    echo -e "${BLUE_COLOR}$color${RES}"
    ;;

pink|PINK)
    echo -e "${PINK_COLOR}$color${RES}"
    ;;

*)
    echo "Usage color {red|yellow|blue|green|pink}"
    exit
    ;;

esac

3.5 背景顏色

[root@master4 day5]# cat color5.sh 
echo -e "\033[40;37m 黑底白字 welcome \033[0m"
echo -e "\033[41;37m 紅底白字 welcome \033[0m"
echo -e "\033[42;37m 綠底白字 welcome \033[0m"
echo -e "\033[43;37m 黃底白字 welcome \033[0m"
echo -e "\033[44;37m 藍底白字 welcome \033[0m"
echo -e "\033[45;37m 紫底白字 welcome \033[0m"
echo -e "\033[46;37m 天藍白字 welcome \033[0m"
echo -e "\033[47;30m 白底黑字 welcome \033[0m"
[root@master4 day5]# 

技術分享圖片

三、shell函數語法與案列

1、範例1

[root@master4 day5]# cat func01.sh 
#!/bin/bash

oldboy() {
 echo "I am oldboy."
}

oldboy
[root@master4 day5]# sh func01.sh 
I am oldboy.
[root@master4 day5]# 

2、使用其它腳本調用上面的函數腳本

[root@master4 day5]# cat func01.sh 
#!/bin/bash

oldboy() {
 echo "I am oldboy."
}

[root@master4 day5]# cat exec.sh 
. ./func01.sh
oldboy

[root@master4 day5]# sh exec.sh 
I am oldboy.
[root@master4 day5]# 

3、在腳本中通過函數給指定的字符串內容加指定顏色

[root@master4 day5]# cat color-test.sh 
#!/bin/bash

echo_chars() {

    RED_COLOR=‘\E[1;31m‘
    GREEN_COLOR=‘\E[1;32m‘
    YELLOW_COLOR=‘\E[1;33m‘
    BLUE_COLOR=‘\E[1;34m‘
    PINK_COLOR=‘\E[1;35m‘
    RES=‘\E[0m‘

    if [ $# -ne 2 ];then
        echo "Usage $0 content {red|yellow|blue|green|pink}"
        exit
    fi

    case "$2" in
    red|RED)
        echo -e "${RED_COLOR}$1${RES}"
        ;;

    yellow|YELLOW)
        echo -e "${YELLOW_COLOR}$1${RES}"
        ;;

    green|GREEN)
        echo -e "${GREEN_COLOR}$1${RES}"
        ;;

    blue|BLUE)
        echo -e "${BLUE_COLOR}$1${RES}"
        ;;

    pink|PINK)
        echo -e "${PINK_COLOR}$1${RES}"
        ;;

    *)
        echo "Usage 1 {red|yellow|blue|green|pink}"
        exit
        ;;

    esac

}

echo_chars xsz blue
echo_chars xsz yellow
echo_chars xsz green
echo_chars xsz red
echo_chars xsz xxue

4、通過case實現rsync服務啟動腳本

4.1 腳本1

[root@master4 day5]# rsync --daemon

[root@master4 day5]# 
[root@master4 day5]# ps -ef | grep rsync
root      6884     1  0 23:32 ?        00:00:00 rsync --daemon

[root@master4 day5]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   6884 root    4u  IPv4 304578      0t0  TCP *:rsync (LISTEN)
rsync   6884 root    5u  IPv6 304579      0t0  TCP *:rsync (LISTEN)

[root@master4 day5]# cat /etc/rsyncd.conf

uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /va/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.201.106.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
# rsync_config___________end
[oldboy]
path = /oldboy/
[data]
path = /data/
[backup]
path = /backup/
# rsync_config___________end

[root@master4 day5]# vim /etc/rsyncd.password

rsync_bakup:rsync1234

啟動腳本:
[root@master4 day5]# cat rsyncd 
#!/bin/bash

case "$1" in
    start)
    rsync --daemon
    [ $? -eq 0 ] && echo "rsync started successful"
;;
    stop)
    pkill rsync;sleep 1
    [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -eq 0 ] &&    echo "rsync stopped successful"
;;
    restart)
    pkill rsync
    sleep 1
    rsync --daemon
    [ $? -eq 0 ] && echo "rsync restarted successful"
;;
    status)
    pid_status=`lsof -i :873 | awk ‘{print $2}‘ | grep [0-9] | uniq`
    [ -n "$pid_status" ] && echo "rsync is running,pid($pid_status)" || echo "rsync is not running."
;;
    *)
    echo "Usage:$0 {start|stop|restart}"
;;    

esac

[root@master4 day5]# sh rsyncd start
rsync started successful
[root@master4 day5]# sh rsyncd stop
rsync stopped successful
[root@master4 day5]# sh rsyncd restart
rsync restarted successful
[root@master4 day5]# sh rsyncd status
rsync is running,pid(8987)

4.2 腳本2

上面腳本改進:

[root@master4 day5]# cat rsyncd02 
#!/bin/bash
. /etc/init.d/functions

case "$1" in
    start)
    [ -e /var/run/rsyncd.pid ] && echo "rsync is staring" && exit
    rsync --daemon
    if [ $? -eq 0 ];then
      action "rsync started" /bin/true
    else
      action "rsync started" /bin/false
    fi
;;
    stop)
    pkill rsync;sleep 1
    if [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -eq 0 ];then
       action  "rsync stopped" /bin/true
    else
        action  "rsync stopped" /bin/false
    fi
;;
    restart)
    pkill rsync
    sleep 1
    if [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -eq 0 ];then
        flag=0
        action  "rsync stopped" /bin/true
    else
        action  "rsync stopped" /bin/false
    fi
    rsync --daemon
    if [ $? -eq 0 -a $flag -eq 0 ];then
       action "rsync restarted" /bin/true
    else
       action "rsync restarted" /bin/false
    fi
;;
    status)
    pid_status=`lsof -i :873 | awk ‘{print $2}‘ | grep [0-9] | uniq`
    [ -n "$pid_status" ] && echo "rsync is running,pid($pid_status)" || echo "rsync is not running."
;;
    *)
    echo "Usage:$0 {start|stop|restart}"
;;    

esac

測試:
[root@master4 day5]# sh rsyncd start
rsync started                                              [  OK  ]
[root@master4 day5]# sh rsyncd start
rsync is staring
[root@master4 day5]# 
[root@master4 day5]# sh rsyncd restart
rsync stopped                                              [  OK  ]
rsync restarted                                            [  OK  ]

4.3 腳本3、函數化腳本

繼續改進:
[root@node1 ~]# cat /etc/init.d/rsd
#!/bin/bash
. /etc/init.d/functions

start () {
    if [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -ge 1 ];then
    echo "rsyncd running."
    exit
    fi
    rsync --daemon
    if [ $? -eq 0 ];then
    action "rsync started" /bin/true
    else
        action "rsync started" /bin/false
    fi
}

stop(){
    if [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -eq 0 ];then
        echo "rsyncd is stopped."
        exit
    fi
    pkill rsync
    sleep 1
    if [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -eq 0 ];then
        action  "rsync stopped" /bin/true
    else
        action  "rsync stopped" /bin/false
    fi
}

restart() {
    if [ `ps -ef | grep "rsync --daemon" | grep -v grep | wc -l` -eq 0 ];then
    start
    else
    stop
    start
    fi
}

status() {
    pid_status=`lsof -i :873 | awk ‘{print $2}‘ | grep [0-9] | uniq`
    [ -n "$pid_status" ] && echo "rsync is running,pid($pid_status)" || echo "rsync is not running."
}

case "$1" in
    start)
    start
    RETUVAL=$?
;;
    stop)
    stop
    RETUVAL=$?
;;
    restart)
    restart
    RETUVAL=$?
;;
    status)
    status
    RETUVAL=$?
;;
    *)
    echo "Usage:$0 {start|stop|restart}"
;;    

esac
exit $RETUVAL

需要改名否則會異常
[root@master4 day5]# mv rsyncd rsd

給文件增加執行權限:
[root@master4 day5]# chmod +x rsd

拷貝到啟動路徑:
[root@master4 day5]# cp rsd /etc/init.d/

之前的系統環境是centos7,默認調用systemctl需要拷貝腳本和配置到centos6運行測試:

[root@node1 ~]# /etc/init.d/rsd start
rsync started                                              [  OK  ]
[root@node1 ~]# /etc/init.d/rsd start
rsyncd running.
[root@node1 ~]# /etc/init.d/rsd start
rsyncd running.
[root@node1 ~]# /etc/init.d/rsd stop
rsync stopped                                              [  OK  ]

[root@node1 ~]# /etc/init.d/rsd start
rsync started                                              [  OK  ]
[root@node1 ~]# /etc/init.d/rsd restart
rsync stopped                                              [  OK  ]
rsync started                                              [  OK  ]
[root@node1 ~]# /etc/init.d/rsd status
rsync is running,pid(11520)
[root@node1 ~]# 

測試:
[root@node1 ~]# /etc/init.d/rsd status
rsync is running,pid(11701)
[root@node1 ~]# /etc/init.d/rsd stop
rsync stopped                                              [  OK  ]
[root@node1 ~]# /etc/init.d/rsd start
rsync started                                              [  OK  ]
[root@node1 ~]# /etc/init.d/rsd status
rsync is running,pid(11762)
[root@node1 ~]# /etc/init.d/rsd restart
rsync stopped                                              [  OK  ]
rsync started                                              [  OK  ]
[root@node1 ~]# /etc/init.d/rsd status
rsync is running,pid(11804)
[root@node1 ~]# 

放到系統自啟動服務:
[root@node1 ~]# vim /etc/init.d/rsd 

#!/bin/bash
. /etc/init.d/functions
# chkconfig: 2345 21 81

[root@node1 ~]# chkconfig --add rsd

[root@node1 ~]# chkconfig --list | grep rsd
rsd             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@node1 ~]# 

[root@node1 ~]# chkconfig --level 234 rsd on
[root@node1 ~]# chkconfig --list rsd
rsd             0:off   1:off   2:on    3:on    4:on    5:off   6:off

測試:
[root@node1 ~]# service rsd status
rsync is running,pid(11804)
[root@node1 ~]# service rsd stop
rsync stopped                                              [  OK  ]
[root@node1 ~]# service rsd start
rsync started                                              [  OK  ]
[root@node1 ~]# service rsd status
rsync is running,pid(11980)
[root@node1 ~]# 
[root@node1 ~]# 
[root@node1 ~]# service rsd restart
rsync stopped                                              [  OK  ]
rsync started                                              [  OK  ]

4.4 MySQL多實例啟動關閉腳本

[root@node4 3306]# cat my.cnf 
[mysqld]
datadir=/data/3306/
socket=/data/3306/mysql.sock
user=mysql
symbolic-links=0
port=3306
innodb_file_per_table= 1

[mysqld_safe]
log-error=/data/3306/mysqld.log
pid-file=/data/3306/mysqld.pid

[root@node4 3307]# cat my.cnf 
[mysqld]
datadir=/data/3307/
socket=/data/3307/mysql.sock
user=mysql
symbolic-links=0
port=3307
innodb_file_per_table= 1

[mysqld_safe]
log-error=/data/3307/mysqld.log
pid-file=/data/3307/mysqld.pid

初始化實例
/usb/bin/mysql_install_db  --datadir=/data/3306
/usb/bin/mysql_install_db  --datadir=/data/3307

後臺運行:
[root@node4 3306]# /bin/sh /usr/bin/mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &

[root@node4 3307]# /bin/sh /usr/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &

[root@node4 mysql]# netstat -tanp | grep mysql
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      3275/mysqld         
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      3428/mysqld         
[root@node4 mysql]# 

腳本1:通過sock判斷:
[root@node4 3306]# cat mysql3306 
#!/bin/sh
########################
# this scripts is created by xsz at 2018-02-12
# xsz QQ:66
# function:mysqld start scripts
########################

#init
port=3306
mysql_user="root"
mysql_pwd="test3306"
CmdPath="/usr/bin"
mysql_sock="/data/${port}/mysql.sock"

#startup function
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
    printf "Starting MySQL...\n"
    /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
    else
    print "MySQL is running...\n"
    exit
    fi
}

#stop function
function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
    printf "MySQL is stopped...\n"
    exit
    else
    printf "Stoping MySQL...\n"
    ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown

    fi
}

#restart function
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 1
    function_start_mysql
}

case "$1" in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: /data/${port}/mysql3306 {start|stop|restart}\n"
esac

[root@node4 3306]# ./mysql3306 stop
Stoping MySQL...
[root@node4 3306]# ./mysql3306 start
Starting MySQL...
[root@node4 3306]# ./mysql3306 restart
Restarting MySQL...
Stoping MySQL...
Starting MySQL...

腳本2:通過端口判斷:
[root@node4 3306]# cat mysql-port3306 
#!/bin/sh
########################
# this scripts is created by xsz at 2018-02-12
# xsz QQ:66
# function:mysqld start scripts
########################

#init
port=3306
mysql_user="root"
mysql_pwd="test3306"
CmdPath="/usr/bin"
mysql_sock="/data/${port}/mysql.sock"

#startup function
function_start_mysql()
{
    if [ `netstat -lnt | grep $port | wc -l` -eq 0 ];then
    printf "Starting MySQL...\n"
    /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
    else
    print "MySQL is running...\n"
    exit
    fi
}

#stop function
function_stop_mysql()
{
    if [ `netstat -lnt | grep $port | wc -l` -eq 0 ];then
    printf "MySQL is stopped...\n"
    exit
    else
    printf "Stoping MySQL...\n"
    ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown

    fi
}

#restart function
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 1
    function_start_mysql
}

case "$1" in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: /data/${port}/mysql3306 {start|stop|restart}\n"
esac

shell學習筆記(4)