五个常用的Linux监控脚本代码
bash中 2>&1 & 的解釋
1、首先,bash中0,1,2三個數(shù)字分別代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標(biāo)準(zhǔn)輸入(一般是鍵盤),標(biāo)準(zhǔn)輸出(一般是顯示屏,準(zhǔn)確的說是用戶終端控制臺),標(biāo)準(zhǔn)錯誤(出錯信息輸出)。
2、輸入輸出可以重定向,所謂重定向輸入就是在命令中指定具體的輸入來源,譬如 cat < test.c 將test.c重定向為cat命令的輸入源。輸出重定向是指定具體的輸出目標(biāo)以替換默認(rèn)的標(biāo)準(zhǔn)輸出,譬如ls > 1.txt將ls的結(jié)果從標(biāo)準(zhǔn)輸出重定向為1.txt文本。有時候會看到如 ls >> 1.txt這類的寫法,> 和 >> 的區(qū)別在于:> 用于新建而>>用于追加。即ls > 1.txt會新建一個1.txt文件并且將ls的內(nèi)容輸出到新建的1.txt中,而ls >> 1.txt則用在1.txt已經(jīng)存在,而我們只是想將ls的內(nèi)容追加到1.txt文本中的時候。
3、默認(rèn)輸入只有一個(0,STDIN_FILENO),而默認(rèn)輸出有兩個(標(biāo)準(zhǔn)輸出1 STDOUT_FILENO,標(biāo)準(zhǔn)錯誤2 STDERR_FILENO)。因此默認(rèn)情況下,shell輸出的錯誤信息會被輸出到2,而普通輸出信息會輸出到1。但是某些情況下,我們希望在一個終端下看到所有的信息(包括標(biāo)準(zhǔn)輸出信息和錯誤信息),要怎么辦呢?
?????? 對了,你可以使用我們上面講到的輸出重定向。思路有了,怎么寫呢? 非常直觀的想法就是2>1(將2重定向到1嘛),行不行呢?試一試就知道了。我們進(jìn)行以下測試步驟:
1)mkdir test && cd test??????????????? ; 創(chuàng)建test文件夾并進(jìn)入test目錄
2)touch a.txt b.c c????????????????????????? ; 創(chuàng)建a.txt b.c c 三個文件
3)ls > 1?????????????????????????????????????????? ; 按我們的猜測,這句應(yīng)該是將ls的結(jié)果重定向到標(biāo)準(zhǔn)輸出,因此效果和直接ls應(yīng)該一樣。但是實際這句執(zhí)行后,標(biāo)準(zhǔn)輸出中并沒有任何信息。
4)ls????????????????????????????????????????????????? ; 執(zhí)行3之后再次ls,則會看到test文件夾中多了一個文件1
5)cat 1??????????????????????????????????????????? ; 查看文件1的內(nèi)容,實際結(jié)果為:1 a.txt b.c c???? 可見步驟3中 ls > 1并不是將ls的結(jié)果重定向為標(biāo)準(zhǔn)輸出,而是將結(jié)果重定向到了一個文件1中。即1在此處不被解釋為STDOUT_FILENO,而是文件1。
4、到了此時,你應(yīng)該也能猜到2>&1的用意了。不錯,2>&1就是用來將標(biāo)準(zhǔn)錯誤2重定向到標(biāo)準(zhǔn)輸出1中的。此處1前面的&就是為了讓bash將1解釋成標(biāo)準(zhǔn)輸出而不是文件1。至于最后一個&,則是讓bash在后臺執(zhí)行。
?
1、查看主機網(wǎng)卡流量
?
復(fù)制代碼代碼如下:#!/bin/bash
#network
#Mike.Xu
while : ; do
????? time='date +%m"-"%d" "%k":"%M'
????? day='date +%m"-"%d'
????? rx_before='ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-'
????? tx_before='ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-'
????? sleep 2
????? rx_after='ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-'
????? tx_after='ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-'
????? rx_result=$[(rx_after-rx_before)/256]
????? tx_result=$[(tx_after-tx_before)/256]
????? echo "$time Now_In_Speed: "$rx_result"kbps Now_OUt_Speed: "$tx_result"kbps"
????? sleep 2
done
?
2、系統(tǒng)狀況監(jiān)控
?
復(fù)制代碼代碼如下:#!/bin/sh
#systemstat.sh
#Mike.Xu
IP=192.168.1.227
top -n 2| grep "Cpu" >>./temp/cpu.txt
free -m | grep "Mem" >> ./temp/mem.txt
df -k | grep "sda1" >> ./temp/drive_sda1.txt
#df -k | grep sda2 >> ./temp/drive_sda2.txt
df -k | grep "/mnt/storage_0" >> ./temp/mnt_storage_0.txt
df -k | grep "/mnt/storage_pic" >> ./temp/mnt_storage_pic.txt
time=`date +%m"."%d" "%k":"%M`
connect=`netstat -na | grep "219.238.148.30:80" | wc -l`
echo "$time? $connect" >> ./temp/connect_count.txt
?
3、監(jiān)控主機的磁盤空間,當(dāng)使用空間超過90%就通過發(fā)mail來發(fā)警告
?
復(fù)制代碼代碼如下:#!/bin/bash
#monitor available disk space
SPACE='df | sed -n '/ \ / $ / p' | gawk '{print $5}' | sed? 's/%//'
if [ $SPACE -ge 90 ]
then
jbxue123@163.com
fi
?
4、 監(jiān)控CPU和內(nèi)存的使用情況
?
復(fù)制代碼代碼如下:#!/bin/bash
#script? to capture system statistics
OUTFILE=/home/xu/capstats.csv
DATE='date +%m/%d/%Y'
TIME='date +%k:%m:%s'
TIMEOUT='uptime'
VMOUT='vmstat 1 2'
?USERS='echo $TIMEOUT | gawk '{print $4}' '
LOAD='echo $TIMEOUT | gawk '{print $9}' | sed "s/,//' '
FREE='echo $VMOUT | sed -n '/[0-9]/p' | sed -n '2p' | gawk '{print $4} ' '
IDLE='echo? $VMOUT | sed -n '/[0-9]/p' | sed -n '2p' |gawk '{print $15}' '
echo "$DATE,$TIME,$USERS,$LOAD,$FREE,$IDLE" >> $OUTFILE
?
5、全方位監(jiān)控主機
?
復(fù)制代碼代碼如下:#!/bin/bash
# check_xu.sh
# 0 * * * * /home/check_xu.sh
DAT="`date +%Y%m%d`"
HOUR="`date +%H`"
DIR="/home/oslog/host_${DAT}/${HOUR}"
DELAY=60
COUNT=60
# whether the responsible directory exist
if ! test -d ${DIR}
then
??????? /bin/mkdir -p ${DIR}
fi
# general check
export TERM=linux
/usr/bin/top -b -d ${DELAY} -n ${COUNT} > ${DIR}/top_${DAT}.log 2>&1 &
# cpu check
/usr/bin/sar -u ${DELAY} ${COUNT} > ${DIR}/cpu_${DAT}.log 2>&1 &
#/usr/bin/mpstat -P 0 ${DELAY} ${COUNT} > ${DIR}/cpu_0_${DAT}.log 2>&1 &
#/usr/bin/mpstat -P 1 ${DELAY} ${COUNT} > ${DIR}/cpu_1_${DAT}.log 2>&1 &
# memory check
/usr/bin/vmstat ${DELAY} ${COUNT} > ${DIR}/vmstat_${DAT}.log 2>&1 &
# I/O check
/usr/bin/iostat ${DELAY} ${COUNT} > ${DIR}/iostat_${DAT}.log 2>&1 &
# network check
/usr/bin/sar -n DEV ${DELAY} ${COUNT} > ${DIR}/net_${DAT}.log 2>&1 &
#/usr/bin/sar -n EDEV ${DELAY} ${COUNT} > ${DIR}/net_edev_${DAT}.log 2>&1 &
?
放在crontab里每小時自動執(zhí)行:
0 * * * * /home/check_xu.sh
這樣便會在/home/oslog/host_yyyymmdd/hh目錄下生成各小時cpu、內(nèi)存、網(wǎng)絡(luò),IO的統(tǒng)計數(shù)據(jù)。
如果某個時間段產(chǎn)生問題了,就可以去看對應(yīng)的日志信息,看看當(dāng)時的主機性能如何。
轉(zhuǎn)載于:https://www.cnblogs.com/wanghuaijun/p/7371951.html
總結(jié)
以上是生活随笔為你收集整理的五个常用的Linux监控脚本代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡临时额度怎么用?用错了后果你承担不
- 下一篇: 广发给利卡怎么用?国内能使吗?