Linux的Shell指令碼——Nginx安裝及服務、監測
阿新 • • 發佈:2018-12-10
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