国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(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大片 | 国产国语一级毛片全部 | 99re在线视频精品 | 国产日本精品 | 国内精品久久影视 | 18在线观看国内精品视频 | 久久精品国产免费中文 | 欧洲欧美成人免费大片 | 99在线国产 | 国产免费观看a大片的网站 国产免费黄色网址 | 欧美国产高清欧美 | 精品99视频 | 那种视频在线观看 | 国产手机精品视频 | 成年网在线观看免费观看网址 | 欧美日一级| 亚洲成人福利在线 | 亚洲三级在线视频 | 韩国一级毛片 | 欧美日韩一级片在线观看 | 黄色三级网站在线观看 | 亚洲欧美在线视频免费 | www.日本高清| hd欧美xxx欧美极品hd | 亚洲国产精品久久综合 | 国产欧美一区二区另类精品 | 欧美一区二区三区不卡片 | 国产精品毛片无码 | 日本一区二区三区精品视频 | 男人女人做性全程视视频 | 欧美一级成人一区二区三区 | 欧美精品久久 | 免费一级欧美性大片 | 91国内精品久久久久影院优播 | 免费一级特黄a | 国产成人a一区二区 | 最新亚洲精品国自产在线观看 |