亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux Shell在衛(wèi)星定軌軟件中的應用

        2014-08-22 01:00:06馬宏陽張龍平
        全球定位系統(tǒng) 2014年6期
        關鍵詞:腳本內核命令

        馬宏陽,張龍平

        (1.中國測繪科學研究院,北京 100830;2.山東科技大學,山東 青島 266510)

        0 引 言

        Linux是一套可免費使用和自由傳播的類UNIX操作系統(tǒng),經(jīng)過近20年來的發(fā)展,Linux成為了一個支持多用戶、多進程、多線程,實時性較好、功能強大而穩(wěn)定的操作系統(tǒng),它也是目前支持硬件平臺最多的操作系統(tǒng)[1-3]。除了桌面領域,Linux在其他領域都取得了巨大的進步和成功。其開放、安全、穩(wěn)定的特性得到越來越多用戶的認可,許多導航定位領域廣泛應用的軟件都是基于Linux開發(fā)[4],如GAMIT/GlobK、GIPS、Bernese、PANDA等。許多IGS分析中心也將Linux作為平臺操作系統(tǒng)。Linux自誕生以來發(fā)布了許多不同的版本,常見的有Slackware、RedHat、Debian、Fedora、S.u.s.E.等。本文的實驗環(huán)境選擇了S.u.s.E. 11,它是2008年發(fā)布的S.u.s.E.版本,是一個開放的、創(chuàng)新的、具有前瞻性的免費Linux系統(tǒng)。

        Shell是一種具備特殊功能的程序,它提供了用戶與內核進行交互操作的一種接口,它接受用戶輸入的命令,并把它送入內核去執(zhí)行[5-6]。內核是Linux系統(tǒng)的心臟,當用戶登錄Linux系統(tǒng)時,Shell就會被調入內存執(zhí)行。Shell獨立于內核,它是連接內核和應用程序的橋梁,并由輸入設備讀取命令,再將其轉為計算機可以理解的機械碼,Linux才能執(zhí)行該命令。本文根據(jù)實際工作經(jīng)驗,詳細介紹了C Shell語言在Linux系統(tǒng)下輔助衛(wèi)星定軌軟件起到的作用。

        1 數(shù)據(jù)下載

        數(shù)據(jù)解算的第一步是下載所需的數(shù)據(jù),如觀測文件、廣播星歷和頻間偏差等文件,對于衛(wèi)星定軌而言,需要下載幾十甚至上百個觀測站的數(shù)據(jù),如果手動下載會非常繁瑣,本節(jié)介紹兩個常用的數(shù)據(jù)下載命令。

        1.1 wget命令

        以下載MGEX觀測站的多模觀測文件的小時文件為例,其命令為

        set pth=/cddis.gsfc.nasa.gov/pub/gnss/data

        set site-list=site-list-mgex

        set chour=(a b c d e f g h i j k l m n o p q r s t u v w x)

        set ihour=$hour+1

        foreach s (`cat $site-list`)

        wget ftp://$pth/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"o.Z"

        end

        其中,$pth為MGEX數(shù)據(jù)下載路徑;$yyyy、$doy、$hour分別為年、年積日、小時,均可以作為變量輸入;$site-list為需要下載的站列表文件;$yy 為兩位數(shù)的年;foreach為循環(huán)站列表文件,并將站名賦給$s;$s$doy$chour[$ihour].$yy"o.Z"即為需要下載的某個測站小時觀測文件名稱,全部使用變量表示,因此利用該腳本,可以下載任意時段的指定站列表小時數(shù)據(jù)。

        該網(wǎng)站的數(shù)據(jù)可以免費下載,若下載數(shù)據(jù)的ftp地址設置了用戶名和密碼,可以將命令改寫為

        wget-ftp-user=user_name-ftp-password

        =secret

        值得注意的是,wget會不斷的嘗試下載沒有下載成功的數(shù)據(jù),因此有必要介紹兩個常用的參數(shù),-t為設置下載嘗試次數(shù),-w為設置下載最大時長,均可以避免在一個站上消耗大量時間。

        一般IGS站的小時觀測文件延遲半小時之內上傳,而MGEX站會延遲更長時間,因此有可能出現(xiàn)在下載時刻數(shù)據(jù)還沒有上傳的情況,因此最好是下載完成一個小時的數(shù)據(jù)后,再補下前一個小時的數(shù)據(jù),命令為

        while (0 < 1)

        @ hour=$hour-1

        if($hour < 0)then

        @doy=$doy-1

        if($doy==0)then

        @yyyy=$yyyy-1

        @doy=`dpy $yyyy`

        endif

        @ hour=23

        endif

        set hour=`echo $hour | awk '{printf("%2.2d",$1)}'`

        set doy=`echo $doy | awk '{printf("%3.3d",$1)}'`

        ……

        end

        該腳本實現(xiàn)將時間調至前一個小時,while (0 < 1)給出一個死循環(huán),只要不結束該腳本,它就會一直循環(huán)補充下載前一個小時的觀測文件;若是出現(xiàn)跨天的情況,則年積日減1,$hour變?yōu)?3,若是出現(xiàn)跨年的情況,則年減1,年積日為該年的最后一天,@ doy=`dpy $yyyy`為調用“dyp”命令,計算該年有多少天;awk '{printf("%2.2d",$1)}為將$hour寫成兩位數(shù)的小時,同樣,$doy也寫成三位數(shù)的年積日,這是為了和下載目錄向對應。

        既然給出了while (0 < 1)的死循環(huán),肯定有一個時刻要將該腳本關閉??梢允紫仁褂谩皃s-ef”查看該腳本運行的ID,再使用“kill-9 %ID”強制關閉腳本的進程。使用這種方法每次都需要人工查看腳本ID,不適合自動化運行,因此可以使用如下結束進程的腳本:

        set name="get_hourly"

        set id=`ps-ef | grep "$name" | grep-v"$0" | grep-v"grep" | awk’{print $2}’

        kill-9 $id

        這樣,僅給出需要結束的進程名稱(get_hourly),腳本就可以自動獲取其進程ID,結束該進程。

        1.2 mget命令

        該命令與wget命令的區(qū)別是,wget每下載一個數(shù)據(jù)都要登入和登出一次,而mget登入后,會將所需文件全部下載完畢才登出,從理論上講,mget會比wget的效率更高。由于使用mget命令需要登錄對方服務器,因此必須設置用戶名和密碼,其命令為

        if(!-d./$yyyy)then

        mkdir $yyyy

        cd./$yyyy/

        mkdir $doy

        cd $pth-pwd

        endif

        set file-name=""

        foreach s (`cat $site-list`)

        set file-name=($file-name $s$doy$chour[$ihour].$yy"o.Z")

        end

        set HOST="cddis.gsfc.nasa.gov"

        set USER="anonymous"

        set PASS='^M'

        ftp -inv $HOST ?EOF

        user $USER $PASS

        cd/gnss/data/campaign/mgex/hourly/rinex3/$yyyy/$doy/$hour/

        mget $file-name

        bye

        EOF

        該腳本首先判斷有沒有存放數(shù)據(jù)的文件夾,若沒有,建立年和年積日的文件夾;由于登入對方服務器有許多操作限制,因此需要事先定義好需要下載的文件名$file-name;該網(wǎng)站的數(shù)據(jù)可以免費下載,可以使用"anonymous"匿名登錄,登錄密碼'^M'相當于“回車”的作用;語句“ftp-inv”相當于登入對方服務器,許多Cshell命令在該狀態(tài)下無法使用。

        以下載小時觀測文件為例,下載小時廣播星歷文件也類似。

        2 文件合并

        為保證超快速軌道解算的實時性,國際IGS分析中心一般使用小時文件合并成天文件進行解算。另外,最終產品可能需要一個周或更長的時間進行解算,這需要將多天的文件合并成一個文件。這一節(jié)介紹小時文件合并和天文件合并。

        合并文件之前,需要將準備合并的小時文件放到一個文件夾中,然后使用命令:

        set f-day=$s$doy"0."$yy"o"

        foreach s ('ls $s$doy*.$yy"o"')

        if(-e $f-day)then

        cat $s | awk ’/BEIN/{i=0}/END OF HEADER/{i=NR} {if(NR> i && i!=0)print $0}’? $f_day

        else

        cat $s? $f-day

        endif

        end

        其中,$f-day為該站合并后天文件文件名;$s$doy*.$yy"o"為該站的小時文件名,“*”為通配符,代表小時文件的標識a~z;“if(-e $f-day)”為判斷是否已經(jīng)存在合成的天文件,若不存在,則將頭文件和數(shù)據(jù)記錄一起寫入天文件中,若存在,則將標識符“END OF HEADER”之后的數(shù)據(jù)記錄寫入天文件中,由于每個小時文件都有頭文件,使用這種判斷可以避免天文件中有多個頭文件。

        天文件合并的方法與小時文件合并類似,僅需要將$s$doy*.$yy"o"改為$s*"0."$yy"o"即可。

        值得注意的是,MGEX使用3.xx格式的多模觀測數(shù)據(jù),其數(shù)據(jù)格式與2.xx有較大區(qū)別:其一是在頭文件中加入了更多的觀測類型,如圖1所示;其二是數(shù)據(jù)記錄方式也隨頭文件做了修改。

        圖1 RINEX3.02格式文件(部分)

        在該頭文件中可以看出,該站觀測到了G(GPS)、S(SBSA)、R(GLONASS)、E(GALILEO)、C(BDS),由于每個小時觀測到的衛(wèi)星系統(tǒng)不盡相同,因此在合并成天文件后會出現(xiàn)頭文件觀測類型和數(shù)據(jù)記錄不相符的情況,這就為后續(xù)使用該觀測文件埋下了隱患。為了避免這種情況發(fā)生,使頭文件和數(shù)據(jù)記錄統(tǒng)一,應該首先遍歷需要合并的小時觀測文件,找到頭文件觀測類型最多的小時文件作為天文件的頭文件。因此,上述合并文件腳本可以進一步優(yōu)化為

        foreach s (`ls $s$doy*.$yy"o"`)

        set bb=` grep -n "SYS/#/OBS TYPES" "$s" | head-1 | cut -d ":"-f 1 '

        set cc=` grep -n "SYS/#/OBS TYPES" "$s" | tail-1 | cut -d ":"-f 1'

        @ aa=$cc-$bb

        set aa1=0

        if($aa> $aa1)then

        at $s | awk '/BEIN/{i=0}/END OF HEADER/{i=NR} {if(NR < i && i!=0)print $0}'? $f_day

        endif

        @ aa1=$aa

        end

        該腳本的目的是以頭文件觀測類型最多的小時文件作為天文件的頭文件,其中$bb和$cc分別為查找"SYS/#/OBS TYPES"標識符的起始行和結束行,然后做差,取其差后$aa最大的小時文件的頭文件作為天文件的頭文件。

        3 數(shù)據(jù)傳輸

        3.1 數(shù)據(jù)傳輸(內網(wǎng))

        一般一個服務器組都是由多臺服務器構成。它們之間通過內網(wǎng)相互聯(lián)系,如圖1所示。內網(wǎng)的跨服務器數(shù)據(jù)傳輸可以用以下命令:

        scp root @99.99.99.1: root/data/obs/$yy

        yy/$doy/*.*o./

        scp -r root @99.99.99.1: root/data/nav/$yyyy/$doy./

        第一個scp是從內網(wǎng)地址99.99.99.1的服務器中指定目錄下的觀測文件拷貝到運行該命令的服務器的當前路徑下;第二個添加了控制“-r”,是拷貝整個文件夾。

        由于命令跨服務器拷貝數(shù)據(jù),因此需要手動輸入登入服務器的用戶名和密碼,這使數(shù)據(jù)拷貝變得不是很方便,而設置密鑰可是省略輸入密碼這一步驟。具體命令如下:

        cd/.ssh

        ssh-keygen-t rsa

        將id_rsa文件中的密鑰拷貝到另一臺服務器的相應位置,就可以實現(xiàn)兩臺服務器數(shù)據(jù)自由傳輸。

        圖2 內網(wǎng)與外網(wǎng)

        3.2 數(shù)據(jù)傳輸(外網(wǎng))

        設置密鑰傳輸數(shù)據(jù)僅限于內網(wǎng)的服務器和臺式機之間而外網(wǎng)傳輸可以向任意一臺聯(lián)網(wǎng)的計算機傳輸數(shù)據(jù),傳輸數(shù)據(jù)的命令為

        set file_name=igs$week$dow.sp3

        set HOST="999.999.0.1"

        set USER="user_name"

        set PASS='secret'

        ftp -inv $HOST ?EOF

        user $USER $PASS

        put $file_name

        bye

        EOF

        該命令與mget命令相似,首先登入對方服務器,再使用put命令上傳。

        4 自動化運行與錯誤提示

        若是想要將腳本和軟件每天都定時運行,人工方法會很繁瑣,因此,可以考慮將其加載為自動化運行。將需要自動運行的腳本寫入一個新文件auto當中:

        30*/1 * * */bin/csh/root/shell/get-hourly>/root/log/get.log 2>&1

        該命令的時間“30 */1 * * *”為每年、每月、每天的每小時30分運行“get_hourly”腳本,由于自動運行全部在后臺,不會輸出任何顯示信息,因此將其運行中輸出的信息通過“>/root/log/get.log 2>&1”賦給一個日志文件,方便檢查運行的狀態(tài)及出現(xiàn)的錯誤。將需要自動運行的命令全部寫好后,執(zhí)行“crontab auto”命令,將其加載到后臺中,命令到運行時間就可以自動運行。為了防止自動運行的腳本到了規(guī)定時間還沒有結束而影響其他的進程,可以用“kill”命令將其強制結束。

        自動運行的情況只能在輸出的log文件中查看,不能實時的發(fā)現(xiàn)錯誤并進行改正??梢栽陉P鍵步驟使用飛信進行報錯提醒,若是運行出現(xiàn)問題,飛信就會發(fā)送短信到指定的手機上。先安裝Linux系統(tǒng)版的飛信,再利用以下腳本進行短信錯誤預警:

        set file_name=check_file

        set lstop='cat $file_name | grep ’ERROR’

        if("$lstop"=="")then

        echo $file_name is Normal End>/root/log/file.log 2>&1

        else

        echo $file_name’ is not Normal End>/root/log/file.log 2>&1

        /opt/fx/fetion -mobile=188****3047 -pwd=billgis3d -to=188****3048 -msg-utf8=$file_name’ is error’-debug

        echo $?

        endif

        其中,需要檢查名為“check_file”的文件中是否有“ERROR”提示,若是沒有則表示運行正常,若有,則一方面向log文件輸出文件不正常,一方面登錄飛信,向負責該文件生成的負責人發(fā)送短信。

        5 結束語

        本文根據(jù)作者的實際工作經(jīng)驗,總結了Linux Shell在衛(wèi)星定軌軟件設計中的應用,主要有數(shù)據(jù)下載與合并、文件傳輸、自動運行與報錯等,可以為從事衛(wèi)星導航定位領域的科研人員或工作人員提供參考。但本文介紹的只是利用Cshell語言作為工具,本文提到的功能也可以用其他的語言實現(xiàn),這里僅是提供一種思路和手段。

        [1]劉文峰,李程遠,李善平.嵌入式Linux操作系統(tǒng)的研究[J].浙江大學學報·工學版,2004,38(4): 447-452.

        [2]鄒 勇,王 青,李明樹.Linux內核的實施支持的研究與實現(xiàn)[J].計算機研究與發(fā)展,2002,39(4): 466-472.

        [3]劉善平,劉文峰,王煥龍,等.Linux與嵌入式系統(tǒng)[M].北京:清華大學出版社,2003.

        [4]景月娥.衛(wèi)星定軌可視化軟件的實現(xiàn)與應用研究[D].西安: 國家授時中心,2011.

        [5]閆生超.基于BASH腳本的Unix環(huán)境下多組件部署管理框架[J].計算機系統(tǒng)應用,2012,21(10): 61-65.

        [6]白 云,喻 莉,謝長生.一個基于Bash的輕量級構建系統(tǒng)的設計與實現(xiàn)[J].計算機科學,2013,40(11): 8-12.

        猜你喜歡
        腳本內核命令
        酒駕
        萬物皆可IP的時代,我們當夯實的IP內核是什么?
        只聽主人的命令
        強化『高新』內核 打造農業(yè)『硅谷』
        安奇奇與小cool 龍(第二回)
        基于嵌入式Linux內核的自恢復設計
        Linux內核mmap保護機制研究
        數(shù)據(jù)庫系統(tǒng)shell腳本應用
        電子測試(2018年14期)2018-09-26 06:04:24
        移防命令下達后
        快樂假期
        中學生(2017年19期)2017-09-03 10:39:07
        玩弄人妻少妇500系列网址| 色吧噜噜一区二区三区| 久久久久亚洲av无码专区喷水| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 国产桃色在线成免费视频| 日韩亚洲国产中文字幕| 日韩乱码人妻无码系列中文字幕| 成人h视频在线观看| 99久久精品无码专区无| 日本高清一区二区在线播放| 国产爆乳无码一区二区麻豆 | 乱人伦中文字幕成人网站在线| 午夜精品久视频在线观看| 日韩在线不卡一区三区av| 成人在线免费电影| а中文在线天堂| 色综合久久五月天久久久| 伊人加勒比在线观看视频| 午夜色大片在线观看| 亚洲国产精品久久久久秋霞1| 亚洲黑寡妇黄色一级片| 国产欧美精品aaaaaa片| 久久亚洲私人国产精品| 无码人妻中文中字幕一区二区 | 白白色日韩免费在线观看| 男女18禁啪啪无遮挡激烈网站 | 性饥渴的农村熟妇| 欧美末成年videos在线观看| 色偷偷亚洲av男人的天堂| 白白发在线视频免费观看2| 国产精品成人久久电影| 久久久久亚洲AV成人网毛片| 凹凸世界视频a一二三| 亚洲香蕉成人av网站在线观看| 午夜家庭影院| 日本高清长片一区二区| 欧美性色欧美a在线播放| 丰满岳乱妇久久久| 亚洲精品一区二区三区播放| 国产一区二区三区不卡在线观看| 亚洲一区二区三区无码国产|