色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Unix文件備份利用While解決文件等待問題

瀏覽:159日期:2024-06-07 13:35:08

前幾天有個(gè)朋友向筆者求助,他說他在Unix系統(tǒng)管理的時(shí)候遇到了一個(gè)問題。他在Unix系統(tǒng)中部署了一個(gè)數(shù)據(jù)庫系統(tǒng)?,F(xiàn)在他希望能夠?qū)@個(gè)數(shù)據(jù)庫實(shí)現(xiàn)異地備份。他的解決思路是,先利用數(shù)據(jù)庫自身的功能進(jìn)行本地備份(數(shù)據(jù)庫沒有自動(dòng)進(jìn)行異地備份的功能),然后再將這個(gè)備份文件復(fù)制到異地去。如果備份是確定的,即按照計(jì)劃來進(jìn)行備份,如每天晚上12點(diǎn)備份,這是好解決的。只需要利用Unix系統(tǒng)自帶的CRON任務(wù)計(jì)劃功能即可以解決。但是現(xiàn)在的問題是,有時(shí)候這個(gè)備份具有不確定性。如數(shù)據(jù)庫管理員有時(shí)候也需要進(jìn)行臨時(shí)的備份,為此他希望對(duì)于這些臨時(shí)備份也能夠自動(dòng)實(shí)現(xiàn)異地備份。所以,此時(shí)利用cron任務(wù)計(jì)劃功能就無能為力了。

  一、解決思路。

針對(duì)這些臨時(shí)性的備份任務(wù),如果少的話,那么可以對(duì)其進(jìn)行手工異地備份。然后利用cron任務(wù)計(jì)劃執(zhí)行有計(jì)劃的異地備份工作。如果臨時(shí)性備份比較頻繁,而用戶又確實(shí)對(duì)異地備份的功能比較急切的話,那么就只能夠采用其他折中的處理方式。筆者下面的這個(gè)解決思路,希望能夠幫助解決這個(gè)問題。這個(gè)思路比較簡單,即讓操作系統(tǒng)隔一段固定的時(shí)間(如10分鐘)就去檢查一下是否有生成了備份文件。如果生成了的話,則系統(tǒng)就將這個(gè)備份文件移動(dòng)(不是復(fù)制)到異地進(jìn)行備份。

不過筆者這里要介紹的是另外一種解決方式,即利用while循環(huán)來解決這個(gè)文件等待的問題。其實(shí),這個(gè)文件等待也不是這個(gè)系統(tǒng)工程師遇到的問題,而是具有一定的普遍性。如一個(gè)應(yīng)用程序需要從一個(gè)文件中讀取數(shù)據(jù),而這個(gè)文件又是另一個(gè)應(yīng)用程序或者同一個(gè)應(yīng)用程序的不同進(jìn)程所產(chǎn)生的。為此,必須在另外一個(gè)程序或者進(jìn)程創(chuàng)建完這個(gè)文件之后,原先的應(yīng)用程序才能夠得到順利的運(yùn)行。所以,如果從程序設(shè)計(jì)的角度,就是需要使用某個(gè)腳本,去偵測這個(gè)特定的文件是否已經(jīng)成功創(chuàng)建。如果創(chuàng)建的話,執(zhí)行某個(gè)命令,讓其自動(dòng)調(diào)用某個(gè)程序。如在實(shí)現(xiàn)無人值守安裝時(shí),需要一個(gè)參數(shù)文件。此時(shí)系統(tǒng)工程師可以編寫一個(gè)腳本,先判斷這個(gè)參數(shù)文件是否存在。如果存在的話,則馬上進(jìn)行安裝。如果不存在的話,則進(jìn)行等待。直到這個(gè)配置文件正常建立,然后啟動(dòng)安裝進(jìn)程(此時(shí)系統(tǒng)工程師不需要重新啟動(dòng)腳本程序)。

二、具體實(shí)現(xiàn)。

以上介紹的這個(gè)思路,主要是利用while循環(huán)來實(shí)現(xiàn)的。利用while循環(huán),操作系統(tǒng)會(huì)重復(fù)的執(zhí)行一組命令,直到控制命令返回一個(gè)假false的狀態(tài)值。如果要實(shí)現(xiàn)上面這個(gè)無人值守的安裝進(jìn)程,可以通過如下的腳本來實(shí)現(xiàn)。

While [! –r profile.txt] #循環(huán)條件語句

do #循環(huán)操作語句

sleep 30

done

./setup.sh

在編寫這個(gè)腳本的時(shí)候,各個(gè)部分的含義是什么,又有哪些注意事項(xiàng)呢?具體來說,系統(tǒng)工程師需要掌握下面的內(nèi)容。這些是寫好一個(gè)while循環(huán)結(jié)構(gòu)最基本的東西。

首先,需要直到常見循環(huán)條件語句的書寫。一般來說,任何Unix命令或者test內(nèi)容都可以作為循環(huán)條件。也就是說,只要掌握了Unix常用的命令,既可以寫好循環(huán)語句。話雖然這么說,但是有時(shí)候?qū)戇@個(gè)循環(huán)語句的時(shí)候,系統(tǒng)工程師往往需要有一定的創(chuàng)意,或者說需要有經(jīng)驗(yàn)的積累。確實(shí),最終的循環(huán)語句都是基本的操作系統(tǒng)命令所組成的。但是有時(shí)候往往需要對(duì)他們進(jìn)行靈活的組合。如筆者上面用的這個(gè)循環(huán)條件語句,相對(duì)來說比較簡單,但是并不一定每個(gè)系統(tǒng)工程師都可以像得到。筆者這個(gè)! –r profile.txt循環(huán)條件語句的含義,就是不能夠讀某個(gè)文件。一般情況下建立的文件當(dāng)前用戶都是可讀的。如果系統(tǒng)判斷不可讀的話,那么百分之百可以確定是這個(gè)文件不存在(只要權(quán)限沒有調(diào)整過)。換句話說,有時(shí)候系統(tǒng)工程師往往需要換一種角度去考慮問題。如按照這個(gè)案例,需要將“文件不存在轉(zhuǎn)換為“文件不可讀。此時(shí)這個(gè)循環(huán)條件語句就容易寫了??上У氖牵簧傧到y(tǒng)工程師缺少的就是這種轉(zhuǎn)換的能力。這部進(jìn)行需要踏實(shí)的基礎(chǔ),而且還需要一定的創(chuàng)新能力以及相當(dāng)?shù)墓ぷ鹘?jīng)驗(yàn)的積累。為此筆者建議,要用好Unix操作系統(tǒng)或者Linux操作系統(tǒng),那么在平時(shí)的工作中就要有意識(shí)的鍛煉自己這種能力。

其次需要了解操作語句的編寫技巧。有時(shí)候?yàn)榱藢?shí)現(xiàn)某些特定的需求,往往在while循環(huán)結(jié)構(gòu)內(nèi)部的操作語句部分,不會(huì)寫一些實(shí)際的操作語句。而是將操作語句寫在循環(huán)的外部。如上面這個(gè)案例中,筆者在內(nèi)部的操作語句部分,使用了語句sleep 30。這是什么意思呢?如果結(jié)合整個(gè)While循環(huán)結(jié)構(gòu),他的意思就是,如果條件滿足的話(profile配置文件不可讀,即不存在),則每個(gè)30秒執(zhí)行以下這個(gè)循環(huán)。如果條件不滿足的話(profile配置文件可讀,即存在),則跳出這個(gè)循環(huán),然后執(zhí)行后續(xù)的語句。也就是說,此時(shí)筆者將真正要執(zhí)行的操作(啟動(dòng)某個(gè)安裝進(jìn)程),放在了循環(huán)的外部。而在循環(huán)內(nèi)部使用sleep 30,用來控制循環(huán)執(zhí)行的時(shí)間。當(dāng)然,在這個(gè)循環(huán)內(nèi)部也可以寫一些實(shí)際性的操作。如在屏幕上或者安裝日志中顯示一些“找不到配制文件等類似的錯(cuò)誤信息。往往這些類似友好的提示信息,可以提高程序的友好性。類似的處理機(jī)制還有很多。系統(tǒng)工程師需要在日常的工作中注意總結(jié)。另外,如果多看看其他工程師編寫的腳本程序,往往能夠從中獲取不少有價(jià)值性的內(nèi)容。模仿往往是在最短時(shí)間內(nèi)增強(qiáng)自己業(yè)務(wù)能力的捷徑。

最后就是需要注意書寫格式與規(guī)范方面的內(nèi)容。在編寫循環(huán)結(jié)構(gòu)時(shí),無論是while循環(huán)還是for循環(huán),如果能夠有意識(shí)的采用TAB鍵或者空格鍵,可以明顯的提高代碼的可讀性。如循環(huán)內(nèi)部結(jié)構(gòu)的執(zhí)行語句最好能夠跟do或者done等關(guān)鍵字分行寫,并且采用縮進(jìn)的格式。雖然即時(shí)不遵守這些規(guī)則,腳本程序也沒有實(shí)質(zhì)性的影響。但是,對(duì)后續(xù)維護(hù)閱讀的時(shí)候,會(huì)增加不少的困難。特別是當(dāng)循環(huán)內(nèi)部語句比較多的時(shí)候。所以對(duì)于這些代碼編寫規(guī)范,系統(tǒng)工程師最好還是需要遵守。畢竟對(duì)于一些復(fù)雜的功能,需要團(tuán)隊(duì)合作才能夠?qū)崿F(xiàn)。如果大家都能夠遵守同一的書寫規(guī)范,那么無疑可以提高團(tuán)隊(duì)的協(xié)作型。還有就是需要注意語法方面的內(nèi)容,不do后面沒有分號(hào)結(jié)尾符等等。這些語法性的錯(cuò)誤系統(tǒng)在執(zhí)行時(shí)會(huì)告知,所以問題不大。只是會(huì)增加返工的幾率與工作量而已。

三、利用while實(shí)現(xiàn)無限循環(huán)。

如上面那個(gè)數(shù)據(jù)庫異地備份的案例,其實(shí)若能夠通過無限循環(huán)來實(shí)現(xiàn)可能會(huì)更加的合適。如讓操作系統(tǒng)每隔30分鐘來執(zhí)行一次循環(huán)。循環(huán)內(nèi)不能的操作就是先利用if語句來判斷備份文件是否在30分鐘內(nèi)更新過。如果有更新的話,就將其復(fù)制或者移動(dòng)到遠(yuǎn)程的服務(wù)器上。不管有沒有更新,這個(gè)循環(huán)的話,每30分鐘就需要執(zhí)行一次。此時(shí)就需要用到無限循環(huán)。利用while循環(huán)條件的含義,這個(gè)無限循環(huán)很容易實(shí)現(xiàn),只需要循環(huán)條件語句設(shè)置為true即可。即while true ; do 操作語句 ;done &。

在這個(gè)循環(huán)結(jié)構(gòu)中,筆者采用true作為循環(huán)條件,其循環(huán)條件永遠(yuǎn)為真,那么操作系統(tǒng)就會(huì)一直循環(huán)下去,直到用戶手工終止。另外需要注意的是,如果循環(huán)語句比較簡單,可以在同一行中書寫。只是在中間合適的位置(如關(guān)鍵字之前)需要加以分號(hào)來進(jìn)行識(shí)別。另外,為了避免對(duì)其他進(jìn)程進(jìn)行干擾,最好將這些無限循環(huán)的操作放置到后臺(tái)運(yùn)行,這可以保障各個(gè)進(jìn)程之間相對(duì)的獨(dú)立性。此時(shí)只需要在done關(guān)鍵字后面加入&符號(hào)即可,就可以告訴操作系統(tǒng)將這個(gè)無限循環(huán)放入到后臺(tái)運(yùn)行。

不過在編寫無限循環(huán)的時(shí)候,需要注意死循環(huán)的發(fā)生。如循環(huán)內(nèi)部的某個(gè)操作比較耗時(shí)。在這個(gè)操作還沒有完成之前,新的循環(huán)又開始了。這久而久之,必將耗盡系統(tǒng)資源。為此,在程序內(nèi)部最好還是需要設(shè)置一些條件,如CPU等資源的使用程度,來強(qiáng)制結(jié)束無限循環(huán)。筆者認(rèn)為這是比較安全的處理方式,可以有效的避免無限循環(huán)影響操作系統(tǒng)性能。;

標(biāo)簽: Unix系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: 黄 色 成 年 人小说 | 在线观看免费a∨网站 | 亚洲天堂色视频 | 国产午夜精品理论片在线 | 免费一级做a爰片久久毛片 免费一级做a爰片性色毛片 | 性感美女一级片 | 国产亚洲综合在线 | 国产成人免费福利网站 | 国内免费自拍视频 | 欧美一级日韩一级 | 欧美第一精品 | 久久欧美精品欧美久久欧美 | 欧美性猛片xxxxⅹ免费 | a毛片在线看片免费 | 国产一区二区三区在线免费 | 俄罗斯一级成人毛片 | 99在线看 | 欧美在线播放视频 | 日韩欧美综合 | 国产成人最新毛片基地 | 在线a亚洲视频播放在线观看 | 久久99九九精品免费 | 亚洲欧美国产日韩天堂在线视 | 亚洲国产精品不卡毛片a在线 | 天天摸天天爽视频69视频 | 国产主播福利片在线观看 | 亚洲欧美日韩在线一区二区三区 | 国产妇乱子伦视频免费 | 欧美一级毛片欧美大尺度一级毛片 | 国产成人久久精品二区三区牛 | 亚洲精品区在线播放一区二区 | 午夜在线视频一区二区三区 | 免费观看欧美精品成人毛片 | 99在线观看视频 | 欧美一级视频 | 日韩中文字幕精品一区在线 | 国产乱码精品一区二区三区中 | 欧美人体在线 | 国产日本在线 | 波多野结衣一区二区在线 | 久久久成人网 |