1. 程式人生 > >Linux的Shell指令碼——Nginx安裝及服務、監測

Linux的Shell指令碼——Nginx安裝及服務、監測

netstat命令可以檢視系統中啟動的埠資訊,該命令常用選項如下:

  -n  以數字格式顯示埠號   -t  顯示TCP連線的埠   -u  顯示UDP連線的埠   -l  顯示服務正在監聽的埠資訊,如httpd啟動後,會一直監聽80埠   -p  顯示監聽埠的服務名稱是什麼(也就是程式名稱)

 通常使用方法: netstat -ntulp | grep 服務名  能檢索出來就說明,這個服務啟動了

nginx

   一個網站伺服器,和Apache的http一樣的,都是使用80埠,所以一次只能使用一個,一個開了另一個必須關

   需要原碼編譯安裝,而編譯安裝前需要準備四個軟體:gcc, make, openssl-devel, pcre-devel     預設的目錄和程式位置

/usr/local/nginx/conf 配置檔案目錄
/usr/local/nginx/html 網站頁面目錄
/usr/local/nginx/logs Nginx日誌目錄
/usr/local/nginx/sbin 主程式目錄
/usr/local/nginx/sbin/nginx 啟動服務
/usr/local/nginx/sbin/nginx -s stop 關閉服務
/usr/local/nginx/sbin/nginx -V 檢視軟體資訊

一些系統監測的命令

uptime 檢視CPU負載情況,最後的三個數字,分別是當前CPU負載百分比,5分鐘內平均負載,15分鐘平均負載
ifconfig 'RX packets'是指下載的資料包大小(位元組) 'TX packets'是指上傳的資料包大小
free 'Mem' 後面是記憶體的總量,使用量,剩餘量……
df '/'結尾的那行中,指的是系統磁碟的相關資料
rpm -qa 檢索已經安裝的軟體包的個數

    具體的實際使用,看後面的“ 伺服器執行指標實時監測 ”

檢視yum包安裝情況

[ $(yum repolist | awk '/repolist/{print$2}' | sed 's/,//') -eq 0 ] && echo 'your yum has problem' && exit 2 || echo 'your yum is OK'

資料包從不易讀位元組數變成可讀的資料單位列印輸出

printf(){
  all=''
  a=${1:-0}
  if [ $a -gt 1024 ];then
     k=$[a/1024]
     if [ $k -gt 1024 ];then
        m=$[k/1024]
        if [ $m -gt 1024 ];then
           g=$[m/1024]
           all=${g}'G '
           m=$[m%1024]
        fi
        all=${all}${m}'M '
        k=$[k%1024]
     fi
     all=${all}${k}'K '
     a=$[a%1024]
  fi
  all=${all}$a'b'
  echo $all
}

nginx的原瑪編譯安裝    軟體包在部落格資源庫中有Nginx.zip裡面有兩個版本的Nginx軟體,下面指令碼預設安裝的是nginx-1.12.2

#!/bin/bash

jindu(){
  while :
  do
    echo -n '#'
    sleep 0.1
  done
}

# check yum
[ $(yum repolist | awk '/repolist/{print$2}' | sed 's/,//') -eq 0 ] && echo 'your yum has problem' && exit 2
jindu &
for i in gcc make openssl-devel pcre-devel
do
  rpm -q $i &>/dev/null
  if [ $? -ne 0 ];then
    yum install -y $i &>/dev/null
  fi
done
echo -e "\n"'gcc,make,openssl-devel,pcre-devel is ready'

# check nginx.tar
file=${1:-nginx-1.12.2.tar.gz}
if [ -f $file ];then
  tar -xf $file -C .
else
  kill $!
  echo -e \n'Cannot found '$file" you can try to use \'nginx_install file\' "
  exit 3
fi
echo -e \n'nginx is making install..'
cd nginx-1.12.2
./configure &>/dev/null
make &>/dev/null
make install &>/dev/null

# check nginx
[ ! -e /usr/local/nginx ] && kill $! && echo -e "\nnginx has problem" && exit 1
kill $!
echo -e "\nnginx is ready"
exit 0

nginx的server服務啟動關閉相關指令碼

#!/bin/bash
start(){

   # check httpd 
   systemctl status httpd &>/dev/null
   [ $? -eq 0 ] && systemctl stop httpd && echo if you want to start ngix you have to stop apache || echo 'port 80 is ready'

   # 只有當apache啟動了,但是關不了的時候會執行下面的命令
   [ $? -ne 0 ] && echo 'your httpd cannot be stopped' && exit 1

   #check nginx and start
   netstat -ntlup | grep -q nginx
   [ $? -ne 0 ] && /usr/local/nginx/sbin/nginx

   status
}

stop(){
   # stop nginx
   netstat -ntlup | grep -q nginx
   [ $? -eq 0 ] && /usr/local/nginx/sbin/nginx -s stop

   #check nginx
   netstat -ntlup | grep -q nginx
   if [ $? -eq 0 ];then 
     echo -e "server nginx stop -------------------[\033[31mfalse\033[0m]"
     exit 2
   else
     echo -e "server nginx stop -------------------[\033[32mOK\033[0m]"
   fi
}

status(){
   #check nginx
   netstat -ntlup | grep -q nginx
   if [ $? -ne 0 ];then 
     echo -e "server nginx is ---------------------[\033[31mfalse\033[0m]"
     exit 3
   else
     echo -e "server nginx is ---------------------[\033[32mOK\033[0m]"
   fi
}

# choice 不管有沒有初始,賦予一個不被檢索的值,執行最後的檢索命令
choice=${1:-0}
case $choice in
start)
  start ;;
stop)
  stop ;;
restart)
  stop &>/dev/null
  start ;;
status)
  status ;;
*)
   echo 'you can try nginx_server start|stop|restart|status'
esac

伺服器執行指標實時監測

#!/bin/bash

# change to echo readable
printf(){
  all=''
  a=${1:-0}
  if [ $a -gt 1024 ];then
     k=$[a/1024]
     if [ $k -gt 1024 ];then
        m=$[k/1024]
        if [ $m -gt 1024 ];then
           g=$[m/1024]
           all=${g}'G '
           m=$[m%1024]
        fi
        all=${all}${m}'M '
        k=$[k%1024]
     fi
     all=${all}${k}'K '
     a=$[a%1024]
  fi
  all=${all}$a'b'
  echo $all
}


while :
do
  # CPU 負載情況
  now_CPU=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`
  all_CPU=`uptime | awk '{print $NF}'`

  # 網路流量互動情況
  ifcon_r=`ifconfig eth0 | awk '/RX p/{print $5}'`
  ifcon_t=`ifconfig eth0 | awk '/TX p/{print $5}'`

  # 記憶體剩餘情況
  mem=`free | awk '/Mem/{print $4}'`

  # 系統磁碟剩餘情況
  devepment=`df | awk '/\/$/{print $4}'`

  # 註冊使用者數
  user=`cat /etc/passwd | wc -l`

  # 當前登陸數
  loginnum=`who | wc -l`

  # 當前程序數
  ps=`ps aux | wc -l`

  # 已安裝軟體包數
  repolis=`rpm -qa | wc -l`
  clear
  echo -e 'CPU實時負載是:'"\t\t"$now_CPU
  echo -e 'CPU持續負載是:'"\t\t"$all_CPU
  echo -en '網路接受流量為:'"\t"
    printf $ifcon_r
  echo -en '網路傳送流量為:'"\t"
    printf $ifcon_t
  echo -en '記憶體剩餘容量:'"\t\t"
    printf $mem
  echo -en '磁碟剩餘容量:'"\t\t"
    printf $devepment
  echo -e '計算機賬戶數量:'"\t"$user
  echo -e '當前登入賬戶數量:'"\t"$loginnum
  echo -e '計算機當前開啟的程序數量:'"\t"$ps
  echo -e '本機已安裝的軟體包數量:'"\t"$repolis
  sleep 0.5
done

遠端登陸安全監測

#!/bin/bash

num=3

while :
do
  for i in `awk '/Invalid user/{IP[$10]++}END{for(i in IP){print i,IP[i]}}' /var/log/secure | awk '$2>'$num'{print $2}'`
  do
     echo 'this IP '$i' try to ssh ,but its username is wrong too many times' | mail -s root
  done
  for i in `awk '/Failed password/{IP[$11]++}END{for(i in IP){print i,IP[i]}}' /var/log/secure | awk '$2>'$num'{print $2}'`
  do
     echo 'this IP '$i' try to ssh ,but its passwd is wrong too many times' | mail -s root
  done
  sleep 5s
done