最近幾月公司接了上海電信新的項目「智慧社區」,此項目中個人角色是FAE,負責項目的現場實施、部署方案、升級方案、運維和客服。電信各部門的接口人每次看見個人口頭禪就是「有事找XX」,XX固然就是個人名字啦。呵呵,很無奈吧,這麼多事對方都是一個個部門的接口人,到我這就是一我的了。前端
拋磚引玉就寫到這了,言歸正傳,開始描述孵化出此腳本的過程。sql
最近幾日,研發發現程序調用電信給出的一個http認證接口小几率的會發生失敗。而後查程序也查不出個因此然來,就發郵件給電信網工。電信網工回覆的郵件內容大體歸納爲「不是隻有你一家程序在調用咱們接口,咱們查過日誌了,沒有問題。請檢查或重啓大家本身的程序。」bash
這下研發着急了,業務平臺啊,不是隨隨便便就能重啓的。緊接着就是懷疑本機系統啊、網絡啊,是否是這方面的問題形成的(作運維的兄弟們你們內心都明白,這是研發的通病,不會認可是本身開發的程序有問題,呵呵)。服務器
在此情景下,郵件天然而然的就到我這了咯。我把來龍去脈看了遍,想了一個比較可行的方法,讓tcpdump去驗證吧。沒辦法,本人責任心比較重。網絡
tcpdump默認是在前端顯示的,爲了實現自動化運維,確定得本身寫腳本了。運維
羅嗦了半天,各位看官請見諒,如下就是整個腳本的所有內容:tcp
- #!/bin/bash
- #tcpdump_port.sh
- #author zhangyu
- # Source function library.
- . /etc/rc.d/init.d/functions
- DATE=`date +%F`
- PIDFILE=/tmp/tcpdump.pid
- LOGPATH=/root/tcpdump
- LOCALHOST=192.168.2.40
- REMOTEHOST=www.baidu.com
- PORT=80
- start() {
- if [ -f $PIDFILE ]; then
- {
- PID=`sed '1d' $PIDFILE`
- echo "Tcpdump (pid $PID) is running ..."
- }
- else
- {
- nohup tcpdump -e -f -nn -vvv -xx host $LOCALHOST and $REMOTEHOST and tcp port $PORT -w "$LOGPATH/$DATE.pcap" &
- ps -ef |grep tcpdump|grep -v grep|awk '{print $2}' >$PIDFILE
- echo -e "Tcpdump start [ \033[32;49;1mok\033[39;49;0m ]"
- }
- fi
- }
- stop() {
- if [ -f $PIDFILE ]; then
- {
- PID=`sed '1d' $PIDFILE`
- kill -2 $PID
- rm -rf $PIDFILE
- echo -e "Tcpdump stop [ \033[32;49;1mok\033[39;49;0m ]"
- }
- else
- {
- echo "Tcpdump is stopped"
- }
- fi
- }
- status() {
- if [ -f $PIDFILE ]; then
- {
- PID=`sed '1d' $PIDFILE`
- echo "Tcpdump (pid $PID) is running ..."
- }
- else
- {
- echo "Tcpdump is stopped"
- }
- fi
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- status)
- status
- ;;
- *)
- echo "Usage:$0 {start|stop|restart|status}"
- ;;
- esac