潘習元 梁慧 黎直



摘要:在新一代天氣雷達業務應用中,PUP軟件調閱雷達產品是預報員做預報最常用的操作模式,由于雷達軟件系統的升級,使產品索引文件從產生雷達產品開始產生,然后不斷地追加產品信息,文件變得越來越大,如果依靠人工進行刪除,不僅文件目錄多,操作起來困難,而且從刪除那刻起,要等下個雷達數據產生的時次再次生成索引文件,這樣PUP軟件調閱時只能顯示再次生成索引文件時間的產品,之前的產品只能通過打開目錄的方式單一調閱,這樣不利于預報員做預報服務,用截斷方式可以保留產品顯示再次生成索引文件那刻起前一部分的產品。該文介紹了雷達產品自動刪除和產品索引文件自動截斷的關鍵技術和解決方案,通過計算機實現了文件刪除和截斷的自動批處理。
關鍵詞:雷達產品;快速調閱;批處理技術
中圖分類號:TP3 文獻標識碼:A
文章編號:1009- 3044(2019)34-0231-03
梧州市新一代天氣雷達軟件系統從2018年由WINDOWS版本升級到LINUX版本后,系統運行穩定。在使用過程中,發現PUP系統軟件存在一些問題,一是不能自動刪除指定保存天數前的PUP產品,只能靠手動定期刪除,否則會導致硬盤空間不夠,同一目錄下的文件太多,檢索不了,軟件無法正常運行,影響數據傳輸,同時影響PUP軟件列表顯示,調閱也受一定影響。二是不能自動截斷產品索引文件,將前面的索引記錄進行剔除,隨著索引記錄不斷添加,索引文件越來越大,導致進行雷達產品調閱顯示時異常緩慢,影響天氣預報分析。因此,刪除產品和截斷索引文件的方法極其重要。2019年,自主研發基于CINRAD/SB雷達PUP產品自動刪除和索引文件自動截取處理程序。目前,該程序在梧州雷達站進行業務應用。本文以CIN-RAD/SB產品自動刪除和索引文件截斷為例,就一些關鍵性技術問題進行系統地闡述,并簡要介紹該程序的業務應用情況。
1 流程架構
在雷達產品快速調閱關鍵技術中,首先,雷達產品各目錄下的產品刪除,其次,雷達索引文件的截斷方法。圖1是程序流程圖。
2 雷達產品目錄結構和索引文件格式
2.1 雷達產品目錄結構
一級目錄名為“29774”,一級目錄下有“CAPPI"“CAR”“CR”“CS”“ET”“HI”“HSR”“M”“OHP”“PPI”“R”“SHEAR”“SRM”“SS”“STI”“STP”“THP”“TOPS”“TVS”“V”“VIL”“VWP”“WER”23個二級目錄;二級目錄“CAPPI”下有“110”和“110[QC]”2個三級目錄,二級目錄“CAR”下有“110”1個三級目錄,二級目錄“CR”下有“37”“37[QC]”“38”和“38[QC]”4個三級目錄,二級目錄“CS”下有“87”1個三級目錄,二級目錄“ET”下有“41”1個三級目錄,二級目錄“HI”下有“59”和“59[QC]”2個三級目錄,二級目錄“HSR”下有“33”和“33[QC]”2個三級目錄,二級目錄“M”下有“60”和“60[QC]”2個三級目錄,二級目錄“OHP”下有“78”和“78[QC]”2個三級目錄,二級目錄“PPI”下有“19”“19[QC]”“20”“20[QC]”“26”“26[QC]”“27”和“27[QC]”8個三級目錄,二級目錄“R”下有“19”和“20”2個三級目錄,二級目錄“SHEAR”下有“87”和“87[QC]”2個三級目錄,二級目錄“SRM”下有“56”和“56[QC]”2個三級目錄,二級目錄“ss”下有“62”和“62[QC]”2個三級目錄,二級目錄“STI”下有“58”和“58[QC]”2個三級目錄,二級目錄“STP”下有“80”和“80[QC]”2個三級目錄,二級目錄“THP”下有“79”和“79[QC]”2個三級目錄,二級目錄“TOPS”下有“41”和“41[QC]”2個三級目錄,二級目錄“TVS”下有“61”和“6I[QC]”2個三級目錄,二級目錄“V”下有“26”和“27”2個三級目錄,二級目錄“VIL”下有“57”和“57[QC]”2個三級目錄,二級目錄“VWP”下有“48”和“48[QC]”2個三級目錄,二級目錄“WER”下有“53”和“53[QC]”2個三級目錄;每個三級目錄下都有1個索引文件和多個產品文件。每個三級目錄下都有產品和索引文件。
2.2 索引文件格式
PUP軟件產品相應的索引文件為十六進制格式,目前索引文件有兩類,一類是文件名帶擴展名的,這類索引文件每條索引記錄占84個字節,對應的PUP產品命名規則為*.??.*;另一類索引文件名不帶擴展名,每條索引記錄占256字節,對應的PUP產品命名規則為*一??一*,圖2是帶擴展名的索引文件數據格式,圖3是不帶擴展名的索引文件數據格式。
3 關鍵技術
使用LINUX SHELL編寫PUP產品刪除和索引文件截斷腳本程序,通過crontab命令將腳本程序提交給cron這個守護進程來定時執行。
3.1 PUP產品刪除
find命令是LINUX系統用來在指定目錄下查找文件的命令,通過設定不同的參數可以查找特定條件的文件。使用find命令找出PUP產品目錄products下所有子目錄N天前生成的文件,利用rm命令刪除這些文件,達到刪除N天前的PUP產品的目的。
3.2 PUP產品索引文件的截斷
LINUX系統dd命令可以跳過一個文件前面指定的字節數后讀取文件后面的內容輸出到另一個文件,使用該命令可以完成對PUP產品索引文件的截斷。根據當前索引文件的大小和要保留N天記錄的索引記錄大小來確定要跳過的字節數,將索引文件后面的內容讀取生成新的文件,用新的文件覆蓋原來的索引文件,就達到對PUP產品索引文件的截斷。對PUP產品索引文件進行截斷,只保留最近N天的記錄,關鍵是要確定保留N天記錄的索引文件大小,大小=每個索引記錄字節數×一個體掃生成的產品數×某個產品一天生成個數×保存天數N。通過檢查索引文件是否帶擴展名就可確定一個索引記錄所占的字節數。一個體掃生成的產品數可通過檢索該目錄下最近一個時次生成的產品文件得到。目前新一代雷達每6分鐘完成一個體掃,所以一個產品一天共生成240個文件(60÷6x24=240)。
4 源代碼和應用方法
4.1 源代碼
新一代雷達PUP產品的定時自動刪除和索引文件自動截斷程序使用Linux Shell編寫。程序工作流程圖如圖1所示。Shell腳本程序delfiles.sh代碼如下所示:#!/bin/sh
#設置產品存放目錄
dir=”/opt/pup/products”
#根據需要設定保存天數
keep=5
#每天每類產品索引條數
cnt=$《$keep+ 240》
cd $dir
echo、date'”start”》delfiles.log
#刪除設定保存天數前的文件
find $Location -mtime +$keep -type f -name”豐774*”-execrm—f(}\;
#下面對Productlndex索引文件進行截斷
for i in $(find $dir -type f -name”Productlndex*”)
do
#根據是否有擴展名確定索引記錄長度和產品命名規則
ftype=${i##*}
len=${#ftype}
if(($len>3))
then
fname=”*_??_*”
idxsize=256
else
fname="#.??.*”
idxsize= 84
fi
#確定每個體掃生成的產品數
fcnt= $(find ${i%*]-type f -name $fname -cmin -6lawk
'END{print NR}')
if(($fcnt==0))
then
fcnt=l
fi
#計算索引文件的大小
indexsize=$《$cnt * $fcnt * $idxsize))
#獲取當前索引文件大小
size=$(wc$i—c lawk{print $1}')
#下面對超大的索引文件進行截斷成設定的大小
bsize=$《$size - $indexsize》
if(( $bsize>0))
then
#截斷生成一個indexsize大小的文件Productlndex
dd if=$i of=Productlndex bs=$bsize skip=l
#用Productlndex文件覆蓋原索引文件
\cp—r-a Ptoductlndex$i
fi
done
echo 'date'done" 》delfiles.log
4.2 應用方法
首先,在雷達PUP產品目錄products下建立shell腳本文件delfiles.sh,將其屬性改為可執行;其次,在products下打開Linux終端窗口,輸入命令:echo ‘- 30 0***/opt/pup/products/delfiles.sh>delfiles. cron生成定時任務文件;最后,輸人命令crontab-delfiles.cron向系統提交定時任務。完成以上三步后,Linux操作系統每天0點30分就會執行delfiles.sh腳本程序對雷達PUP產品進行自動刪除和索引文件自動截斷處理。可根據需要修改定時任務文件來設定腳本文件啟動執行時間。
5 結束語
目前雷達PUP產品定時自動刪除和索引文件自動截斷處理程序已在梧州雷達站投入運行。從運行情況看,程序運行穩定,每天能定時快速對PUP產品目錄下50多個子目錄的過期文件進行刪除和60多個索引文件進行截斷處理,避免了因產品文件過多,手工刪除不及時導致硬盤空間不足的情況發生,解決了因索引文件過大導致進行雷達產品檢索顯示時異常緩慢的問題,對提高新一代雷達PUP系統的穩定運行和雷達產品檢索速度具有良好的輔助作用。
參考文獻:
[1]北京敏視達雷達有限公司.PUP系統軟件使用手冊,
[2] https://man.linuxde.net/ Linux命令大全(手冊).
[3] http://c.biancheng.net/shell/ SheU腳本:Linux Shell腳本學習指南,
[4] ljianhui. ttps://blog. csdn. netfljianhui/article/details/43128465Linux shell之提取文件名和目錄名的一些方法,
[5]瓜而不皮.https://blog. csdn. net/qq_3259063 1/article/details/79270860 LINUX下定時任務刪除N天前的文件,
【通聯編輯:代影】
收稿日期:2019-09-20
基金項目:梧州市氣象局科學研究與技術開發項目(梧氣科2018004)資助
作者簡介:潘習元(1972-),男,工程師,現從事網絡信息、裝備保障等工作。