Shell練習(86-90)-2019.1.25

86.關閉服務

需求:

  • 在centos6系統裏,我們可以使用ntsysv關閉不需要開機啓動的服務,當然也可以使用chkconfig工具來實現,

  • 寫一個shell腳本,用chkconfig工具把不常用的服務關閉。腳本需要寫成交互式的,需要我們給它提供關閉的服務的名字。

核心要點:

  • chkconfig --list
[root@Chauncey ~]# cat 86.sh
#!/bin/bash
#這個腳本用來關閉服務
#作者:Chauncey
#日期:2019-01-25


while :
do
    chkconfig --list |grep '3:on' 2>/dev/null| awk ‘{print $1}’ > /tmp/on_sev.txt
    echo -e "\033[32m系統裏開啓了這些服務:\033[0m"
    cat /tmp/on_sev.txt
    echo
    read -p "請輸入列表中要關閉的服務:" s

    if ! grep -qw "$s" /tmp/on_sev.txt
    then
        echo -e "\033[31mThe service is not in the service list.\033[31m"
        continue
    fi
    chkconfig $s off
    break
done

87.關閉服務

需求:

  • 在生產環境中,經常遇到tomcat無法徹底關閉,也就是說用tomcat自帶shutdown.sh腳本無法將java進程完全關掉。所以,需要藉助shell腳本,將進程殺死,然後再啓動

  • 寫一個shell腳本,實現上述功能。徹底殺死一個進程的命令是kill -9 pid

核心要點:

  • kill -9 pid
[root@Chauncey ~]# cat 87.sh
#!/bin/bash
#這個腳本用來徹底殺死Tomcat進程
#作者:Chauncey
#日期:2019-01-25

dir=/usr/local/tomcat/bin/shutdown.sh

java_pc()
{
     pgrep java|wc -l   
}

cd $dir
./shutdown.sh

count=0

while [ $count -lt 5 ]
do
    n=`java_pc`
    if [ $n -gt 0 ]
    then
        killall java
        count=$s[$count+1]
        sleep 1
    else
        break
    fi
done

n=`java_pc`
if [ $n -gt 0 ]
then
    echo "Tomcat無法強制殺死。"
    exit
fi

88.去掉文件名後綴

需求:

  • 至少用兩種方法,批量把當前目錄下所有文件名後綴爲.bak去掉,比如1.txt.bak去掉後爲1.txt

核心要點:

  • 方法一:用sed把文件名結尾的.bak去掉
  • 方法二:awk截取去掉後綴的部分,賦值變量
[root@Chauncey ~]# cat 88.sh 
#!/bin/bash
#這個腳本用來去掉文件名後綴
#作者:Chauncey
#日期:2019-01-25

for f in `ls -d ./*.bak`
do 
#    mv $f `echo $f |sed 's/.bak$//'`
    fi=`echo $f|awk -F '.bak$' '{print $1}'`
    mv $f $f1
done
[root@Chauncey ~]# 

89.查詢域名是否過期

需求:

  • 寫一個shell腳本,查詢指定的域名是否過期時間,並在到期前一週,每天發一封提醒郵件

核心要點:

  • 可以在linux下使用“whois 域名”,如“whois apelearn.com”,開獲取該域名的一些信息
[root@Chauncey ~]# cat 89.sh
#!/bin/bash
#這個腳本用來檢查域名是否到期
#作者:Chauncey
#日期:2019-01-25

t1=`date +%s`

#檢測whois命令是否存在,不存在則安裝jwhois包
is_install_whois()
{
    which whois >/dev/null 2>/dev/null
    if [ $? -ne 0 ]
    then
        yum install -y epel-release
        yum install -y jwhois
    fi
}

notify()
{
    #e_d=`whois $1|grep 'Expiry Date'|awk '{print $4}'|cut -d 'T' -f 1`
    e_d=`whois $1|grep 'Expiration'|tail -1|awk '{print $5}' |awk -F 'T' '{print $1}'`
    if [ -z "$e_d" ]
    then
        e_d=`whois $1|grep 'Expiry Time'|awk '{print $3}'`
    fi
    #將域名過期的日期轉化爲時間戳
    e_t=`date -d "$e_d" +%s`
    #計算一週一共有多少秒
    n=`echo "86400*7"|bc`
    e_t1=$[$e_t-$n]
    e_t2=$[$e_t-$n]
    if [ $t1 -ge $e_t1 ] && [ $t1 -lt $e_t ]
    then
        python mail.py  $mail_u "Domain $1 will to be expire." "Domain $1 expire date is $e_d."
    fi
        if [ $t1 -ge $e_t1 ] && [ $t1 -lt $e_t ]
    then
        python mail.py  $mail_u "Domain $1 has been expire." "Domain $1 expire date is $e_d."
    fi
}

#檢測上次運行的whois查詢進程是否存在
#若存在,需要殺死進程,以免影響本次腳本執行
if pgrep whois &>/dev/null
then
    killall -9 whois
fi

is_install_whois

for d in aaa.com bbb.com aaa.cn
do
     notify $d
done

90.查詢域名是否過期

需求:

  • 寫一個shell腳本,當我們執行時,提示要輸入對方的iproot密碼,然後可以自動把本機的公鑰增加到對方機器上,從而實現密鑰認證。

核心要點:

  • expect
  • ssh-copy-id
[root@Chauncey ~]# cat 90.sh 
#!/bin/bash
#這個腳本用來自動配置密鑰認證
#作者:Chauncey
#日期:2019-01-25


#!/bin/bash

read -p "輸入一個IP地址" ip
read -p "輸入此機器的root密碼:" pasd

is_install()
{
    if ! rpm -q $1 &>/dev/null
    then
        yum install -y $1
    fi
}

is_install openssh-clients
is_install expect

if [ $ -f ~/.ssh/id_rsa.pub]
then
    echo -e "\n" |ssh-keygen -P ''
fi

cat > key.expect <<EOF
#!/usr/bin/expect
set host [lindex \$argv 0]
set passwd [lindex \$argv 1]
spawn ssh-copy-id root@\$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "\$passwd\r" }
}
expect eof
EOF

chmod a+x key.expect

./key.expect $ip $pasd
[root@Chauncey ~]# 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章