王小明
(上海市地震局,上海 201203)
上海市地震局承擔著上海市行政區范圍內的地震監測預報、地震災害預防和地震緊急救援等政府行政管理職能和各區、縣防震減災的指導工作。隨著國家“九五”、“十五”、“十一五”各項目的逐步完成,上海市地震局逐步實現了數字地震觀測網、地震前兆觀測網(陰朝民,2001)、強震觀測網、地震信息通信網和地震應急指揮系統的建設。在這當中,各個地震系統中的應用軟件成為地震工作者極為重要的工作工具,各軟件之間相互協調、相互合作,實現了地震監測預報以及震情分析等工作內容(中華人民共和國國家標準,2003)。上海市地震局地震監測設備網絡管理平臺(以下簡稱網絡監控平臺)以及值班系統都以郵件或書面通知的方式來告知用戶。其中網絡監控平臺(王小明,2011)監控了上海市地震局在18個區縣部署的地震監測網絡設備以及局中心的所有服務器和網絡設備,網絡管理人員需要在第一時間知道所有設備的狀態變換情況,以便及時對線路或者設備故障進行處理,將故障對中心業務的影響降低到最小;由于業務的特殊需求,上海市地震局各部門都安排了24小時值班人員,為此需要一套自動短消息通知系統,排班之后定時向值班人員發送短消息通知,提醒值班人員注意值班時間及上傳日志時間;上海市地震局OA辦公系統的后臺數據庫設置為每月月初一次的自動備份頻率,系統管理人員如果不在電腦旁邊,就無法得知備份的結果是否成功,這就需要一套短消息通知系統來告知系統管理人員數據庫備份結果,方便管理員及時對數據庫進行管理維護。綜合以上種種需求,迫切需要開發一套能夠集成在上述三套系統之上的短消息通知系統,第一時間通知用戶設備狀態變化、值班日程安排、數據庫備份結果等。
飛信服務的工作機制如圖1所示。

圖1 飛信服務工作機制Fig.1 Working mechanism of Fetion service
飛信服務有以下幾方面的優點。首先,它可以為用戶提供一個通信平臺,在該平臺之上,只要用戶有可用網絡,無論是Internet、GPRS、WIFI、3G、Satellite等,都可以與另一方進行信息交互,使得通信依賴的物理媒介更加廣泛,大大降低了受限程度,為用戶通信方式提供更加多元化的選擇。其次,飛信服務在移動系統中是免費的,只要用戶使用的是移動設備,那么所有短消息的通信都是免費的,這樣就大大節省了通信費用成本,對于在上海市18個區縣都部署了地震監測設備的上海市地震局而言,可節約很大一筆通信費用開支。第三,實現了PC、PAD、手機等個人設備之間的互通。隨著飛信服務的興起,PC與手機間的通信已經普及,而各種預裝了操作系統的個人掌上設備,如iPad等,也逐漸加入了與PC、手機等彼此之間相互通信的群體里,這就解決了通信工具單一化的問題,使得用戶能夠靈活的使用各種工具進行通信,對于上海市地震局地震網絡監測設備統一管理平臺,主要實現了PC到手機的短消息告警故障通知,大大提高了工作效率。
上海市地震局網絡監控平臺搭建在Linux環境下,為了使飛信服務能夠為該監控平臺服務,我們選擇了Linux系統作為飛信服務的安裝平臺。上海市地震局OA辦公自動化系統同樣搭建在Linux環境下,其數據庫采用的是Linux下的MySql,這也要求我們必須將飛信服務部署在Linux系統中,才能實現OA數據庫的自動備份及短消息通知功能。值班人員的短消息通知同樣可以在Linux環境下實現,綜合上述種種原因,我們最終選擇Linux系統(羅琳,2010)作為部署飛信服務的操作系統。
tar xvfz fetion_linux_20080402.tar.gz
cp sms /usr/bin/
tar xvfz lib_lin_32.tar.gz
cd library_linux32
cp *.* /lib/
cp *.* /usr/lib/
cd /usr/bin
./sms -h
出現如圖2所示界面,說明飛信服務已經正常運行。

圖2 飛信服務幫助界面Fig.2 The help interface of Fetion service
至此,基于Fetion的短消息發送平臺已經搭建完成,我們需要將其它應用與該短消息發送平臺結合起來,方便其為其它應用服務。
網絡監控平臺部署在上海市地震局信息中心,以此為中心,上海市 18個區縣部署的地震監測網絡設備為節點,組成了整個上海市地震局網絡拓撲結構,如圖3所示。

圖3 上海市地震局網絡拓撲結構Fig.3 Network topology of the SHEA
該網絡監控平臺實現了全年不間斷監控(翟炯等,1997),監控對象包含18個區縣臺點地震監測設備、服務器、網絡設備、衛星設備、UPS等,實現了所有設備的統一集中式監控,能夠實時響應設備故障信息,分析故障內容。網絡監控平臺全年不間斷監控所有臺站網絡設備及中心服務器,能夠在第一時間發現拓撲結構中的故障節點,并通過郵件通知網管人員(許登旺等,2007)。系統故障郵件通知流程如圖4所示。
由于故障信息的不確定性,網管人員無法做到全年每天 24小時在電腦面前觀察故障消息,且由于物理網絡環境的局限性,網管人員無法第一時間打開郵箱查看故障信息并處理故障,導致故障處理效率下降。上海市地震局網絡監控平臺在開發過程中預留了短消息通知的接口,本文旨在研究將短消息發布軟件(Fetion)與網絡監控平臺相結合,發送故障告警信息至網管人員手機,保證網管人員第一時間知曉故障信息,并迅速做出故障判斷,處理故障,減少故障對上海市地震局各業務系統的影響。新的基于短消息和郵件的系統故障發現流程如圖5所示。

圖4 系統故障郵件通知流程圖Fig.4 flowchart of system failure notification by e-mail

圖5 基于短信、郵件的故障發現流程圖Fig.5 Flowchart of system failure notification by SMS and e-mail
上海市地震局網絡監控平臺基于Nagios軟件架構,其整體架構中預留了適合編程人員開發的API接口,如圖6所示。
故障告警消息通知接口所在位置為 Nagios配置文件中的/etc/objects目錄下,其中的commands文件需要重新編寫,使整個網絡監控平臺能夠將故障信息在第一時間以短信發送到網管人員手機上,相關的具體代碼如下:
# notifiy service by fetion
define command{
command_name notify-service-by-sms
command_line /usr/local/fx/fetion --mobile=13xxxxxxxxx --pwd=xxxxxx--to=$CONTACTPAGER$ --msg-utf8=" $HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on$TIME$ result is $SERVICEOUTPUT$ " --exit-on-verifycode=1
}
# notifiy host by fetion
define command{
command_name notify-host-by-sms
command_line /usr/local/fx/fetion --mobile=13xxxxxxxxx --pwd=xxxxxx--to=$CONTACTPAGER$ --msg-utf8=" $HOSTNAME$ is $HOSTSTATE$ on $TIME$ result is$HOSTOUTPUT$ " --exit-on-verifycode=1
}
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line/usr/bin/printf "%b" "***** Nagios ***** Notification Type:$NOTIFICATIONTYPE$ Host: $HOSTNAME$ State: $HOSTSTATE$ Address: $HOSTADDRESS$ Info: $HOSTOUTPUT$ Date/Time: $LONGDATETIME$ " | /usr/bin/mail -s "**$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios ***** Notification Type:$NOTIFICATIONTYPE$ Service: $SERVICEDESC$ Host: $HOSTALIAS$ Address:$HOSTADDRESS$ State: $SERVICESTATE$ Date/Time: $LONGDATETIME$ Additional Info: $SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert:$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}

圖6 上海市地震局網絡監控平臺整體架構Fig.6 Framework of monitoring network platform for SHEA
為了保障上海市地震局業務系統和地震監測設備正常運行,上海市地震局技術保障部實行全年每天24小時待班制度,結合上海市地震局網絡監控平臺,對突發的網絡、地震監測設備、服務器等故障進行及時快速處理,并做故障登記。另外,值班人員每日、每周、每月需要向中國地震局上報信息、臺站運行率統計等日志,上報具有嚴格的時間限制,必須在規定時間段內完成,否則按照缺報處理,影響上海市地震局的信息評比質量和結果。為了提高技術保障部值班人員的工作效率,同時為了對技術保障部值班人員進行日常工作的督促,提高上海市地震局信息評比的質量和水平,需要開發一套值班短消息通知系統。
上海市地震局技術保障部值班系統是為技術保障部值班人員開發的一套日常值班系統(劉劍云等,2010),包含了故障處理記錄、日報月報上傳、服務器運行率查詢及資料文檔查詢等功能模塊,需要將飛信服務與值班系統結合使用。
為了實現短消息通知技術保障部值班人員,我們使用Linux系統下的計劃任務調度常駐命令crontab。Linux任務調度的工作主要分為以下兩類:
(1)系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存等;
(2)個人執行的工作:某個用戶定期要做的工作,例如每隔 10分鐘檢查郵件服務器是否有新郵件,這些工作可由每個用戶自行設置,Crontab是UNIX系統下的定時任務觸發器,其使用者的權限記載在下列兩個文件中:
/etc/cron.deny:該文件中所列的用戶不允許使用Crontab命令;
/etc/cron.allow:該文件中所列的用戶允許使用Crontab命令。
上述兩個文件有優先級高低之分:如果兩個文件同時存在,那么/etc/cron.allow 優先,如果兩個文件都不存在,那么只有超級用戶可以安排作業。每個用戶都會生成一個自己的crontab文件。這些文件在/var/spool/cron目錄下,如:
[root@dave ~]# cd /var/spool/cron
[root@dave cron]# ls
oracle root
上述兩個文件中內容與各自用戶登錄界面下執行crontab –l所顯示的內容相同。
本文在root用戶下執行定時計劃任務,任務內容由值班人員的排班情況來確定,每日早上8點通知值班人員當天值班,每日早上10點通知當天值班人員上傳當日日志,每月5日上午9點通知當天值班人員上傳每月信息安全月報,每月1日至5日上午9點通知當日值班人員上傳中國地震局月報統計信息,具體代碼如下(以上海市地震局技術保障部2012年4月值班排班為例):
# 值班通知 (2012.04)
#值班人員01
0 8 4,10,16,23,28 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile01 --msg-utf8="今日值班!!!" --exit-on-verifycode=1
#值班人員02
0 8 3,9,18,21,27 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile02 --msg-utf8="今日值班!!!" --exit-on-verifycode=1
#值班人員03
0 8 5,7,11,17,29 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile03 --msg-utf8="今日值班!!!" --exit-on-verifycode=1
#值班人員04
0 8 2,6,14,24,26 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--t
o=mobile04 --msg-utf8="今日值班!!!" --exit-on-verifycode=1
#值班人員05
0 8 8,12,15,20,30 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile05 --msg-utf8="今日值班!!!" --exit-on-verifycode=1
#值班人員06
0 8 1,13,19,22,25 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile06 --msg-utf8="今日值班!!!" --exit-on-verifycode=1
# 日志上傳通知 (2012.04)
#值班人員01
0 10 4,10,16,23,28 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile01 --msg-utf8="請注意上傳日志!!!" --exit-on-verifycode=1
#值班人員02
0 10 3,9,18,21,27 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile02 --msg-utf8="請注意上傳日志!!!" --exit-on-verifycode=1
#值班人員03
0 10 5,7,11,17,29 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile03 --msg-utf8="請注意上傳日志!!!" --exit-on-verifycode=1
#值班人員04
0 10 2,6,14,24,26 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile04 --msg-utf8="請注意上傳日志!!!" --exit-on-verifycode=1
#值班人員05
0 10 8,12,15,20,30 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile05 --msg-utf8="請注意上傳日志!!!" --exit-on-verifycode=1
#值班人員06
0 10 1,13,19,22,25 4 * /usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile06 --msg-utf8="請注意上傳日志!!!" --exit-on-verifycode=1
# 信息安全月報通知
0 9 5 * * /usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile01--msg-utf8="安全月報統計上傳" --exit-on-verifycode=1
# 國家局月報通知
0 9 1-5 * * /usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile02--msg-utf8="國家局月報統計上傳" --exit-on-verifycode=1
0 9 1-5 * * /usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile03--msg-utf8="國家局月報統計上傳" --exit-on-verifycode=1
0 9 1-5 * * /usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile04--msg-utf8="國家局月報統計上傳" --exit-on-verifycode=1
上述代碼以crontab文件形式存儲在短消息通知服務器上,并通過Linux系統的計劃調度任務來進行周期巡檢,符合內容的命令將會被執行,即通過Fetion短消息通知相關值班人員。
上海市地震局OA辦公自動化系統于2009年初開始運行,該系統部署在SUSE Linux系統之上,服務器采用B/S架構,數據庫軟件采用的是MySql,根據上海市地震局網絡管理的相關規定,OA系統數據庫需要每月月初進行備份,保證OA系統的正常運行。OA系統共有3個數據庫,分別是netoffice、dagl、easycms。其中netoffice數據庫包含了網絡辦公系統所需要的一些庫表;dagl數據庫包含了文件歸檔功能所需要的一些庫表;easycms數據庫包含了整個OA網站模板所需要的一些庫表。手工備份上述3個數據庫需要執行下面的命令:
mysqldump -u root -p netoffice > back_netoffice
mysqldump -u root -p easycms > back_easycms
mysqldump -u root -p dagl > back_dagl
備份成功后,在當前路徑下將會出現3個備份的數據庫文件back_netoffice、back_dagl、back_easycms。為了實現 OA辦公自動化系統數據庫的自動備份功能,同樣需要使用 Linux系統下的計劃任務調度常駐命令crontab,另外,數據庫管理員DBA需要知道數據庫備份結果,這就要求我們將飛信服務與數據庫備份指令結合使用,流程示意圖如圖7所示。

圖7 OA數據庫備份流程圖Fig.7 Flowchart of OA database backup
具體代碼:
# OA DB(netoffice,dagl,easycms) backup on 1st of every month
30 1 1 * * /home/autobackup
其中autobackup為可執行腳本,該腳本控制數據庫的自動備份及短消息的通知,代碼如下:
#!/bin/sh
#File:/home/autobackup.sh
#Database info
DB_NAME1="netoffice"
DB_NAME2="dagl"
DB_NAME3="easycms"
DB_USER="root"
DB_PASS=""
#Others vars
BIN_DIR="/usr/bin"
BACK_DIR="/home/DB_BACKUP"
DATE=`date +%F`
#TODO
cd $BACK_DIR
$BIN_DIR/mysqldump --opt -u$DB_USER $DB_NAME1 > $BACK_DIR/back_$DB_NAME1$DATE
status=$?
case $status in
0 )
/usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile01 --msg-utf8="backup DB $DB_NAME1 success!" --exit-on-verifycode=1
;;
1 )
/usr/local/fx/fetion --mobile=mobile --pwd=password--to=mobile01 --msg-utf8="backup DB $DB_NAME1 failed!" --exit-on-verifycode=1
;;
esac
sleep 5
$BIN_DIR/mysqldump --opt -u$DB_USER $DB_NAME2 > $BACK_DIR/back_$DB_NAME2$DATE
status=$?
case $status in
0 )
/usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile01 --msg-utf8="backup DB $DB_NAME2 success!" --exit-on-verifycode=1
;;
1 )
/usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile01 --msg-utf8="backup DB $DB_NAME2 failed!" --exit-on-verifycode=1
;;
esac
sleep 5
$BIN_DIR/mysqldump --opt -u$DB_USER $DB_NAME3 > $BACK_DIR/back_$DB_NAME3$DATE
status=$?
case $status in 0 )
/usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile01 --msg-utf8="backup DB $DB_NAME3 success!" --exit-on-verifycode=1
;;1 )
/usr/local/fx/fetion --mobile=mobile --pwd=password --to=mobile01 --msg-utf8="backup DB $DB_NAME3 failed!" --exit-on-verifycode=1
;;
esac
(1)飛信服務結合上海市地震局網絡監控平臺應用展示(圖8)

圖8 臺站設備告警短信通知Fig.8 Station device alarm notification by SMS
(2)飛信服務結合值班系統應用展示(圖9)
(3)飛信服務在上海市地震局OA數據庫備份系統上的應用展示(圖10)

圖9 值班短信通知Fig.9 Duty notification by SMS

圖10 OA數據庫備份短信通知Fig.10 Notification of OA database backup by SMS
中國移動飛信服務,使短消息通知在我們日常生活中起著不可或缺的作用,而飛信服務在Linux系統下的成功部署,是短消息通知功能與上海市地震局各業務系統相結合的前提,在該前提下,上海市地震局網絡監控平臺短消息告警得以實現,上海市地震局保障中心技術保障部值班短消息通知得以實現,上海市地震局OA辦公自動化平臺數據庫自動備份短消息通知得以實現。所有上述業務系統與飛信服務的有機結合,提高了辦公人員的業務水平和能力,提高了辦公人員故障處理效率,提高了數據庫備份機制的安全性,提高了中心網絡設備和服務器的運行效率,提高了臺站網絡運行率。
飛信服務與上海市地震局各業務系統相結合使用,使辦公人員受益匪淺,但同樣也應該看到不足之處。由于飛信服務是免費的,每天通過PC客戶端向手機最多能夠發送600條短消息,每月最多能夠發送5000條短消息,這就使得飛信服務與上海市地震局業務系統的結合使用受到一定的限制。盡管當前上述三個業務系統與飛信服務結合使用沒有發現任何問題,但需要未雨綢繆,需要考慮網絡監控平臺上面設備的增加對短消息告警的影響,需要考慮值班人員的增加對短消息通知的影響,需要考慮數據庫周期備份機制的變化對短消息通知的影響,還需要考慮其它業務系統與飛信服務結合使用之后對短消息通知的影響。今后仍將對不足之處進一步改善,在地震各業務系統進一步推廣飛信服務,使得飛信服務能夠更好地為地震系統各項業務工作服務。
劉劍云,馬晨陽,2010. PHP+MySQL網站開發應用. 北京:中國鐵道出版社.
羅琳,2010. 即用即查Linux命令行實例參考手冊. 北京:中國鐵道出版社.
王小明,2011. 基于Nagios軟件的上海市地震局地震監測設備網絡管理系統的開發和應用. 上海:防震減災學術分論壇論文匯編.
許登旺,鄒天思,潘凱華,2007. PHP程序開發范例寶典. 北京:人民郵電出版社.
陰朝民,2001. 地震前兆臺網技術. 北京:地震出版社.
翟炯,石祥生,石秋云,1997. TCP/IP網絡管理. 北京:電子工業出版社.
中華人民共和國國家標準,2003. 地震災害預測及其信息管理系統技術規范(GB/T 19428-2003). 北京:中國標準出版社.