萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Unix文件備份利用While解決文件等待問題

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

class="55878">

前幾天有個朋友向筆者求助,他說他在Unix系統管理的時候遇到了一個問題。他在Unix系統中部署了一個數據庫系統。現在他希望能夠對這個數據庫實現異地備份。他的解決思路是,先利用數據庫自身的功能進行本地備份(數據庫沒有自動進行異地備份的功能),然後再將這個備份文件復制到異地去。如果備份是確定的,即按照計劃來進行備份,如每天晚上12點備份,這是好解決的。只需要利用Unix系統自帶的CRON任務計劃功能即可以解決。但是現在的問題是,有時候這個備份具有不確定性。如數據庫管理員有時候也需要進行臨時的備份,為此他希望對於這些臨時備份也能夠自動實現異地備份。所以,此時利用cron任務計劃功能就無能為力了。

  一、解決思路。

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

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

  二、具體實現。

  以上介紹的這個思路,主要是利用while循環來實現的。利用while循環,操作系統會重復的執行一組命令,直到控制命令返回一個假false的狀態值。如果要實現上面這個無人值守的安裝進程,可以通過如下的腳本來實現。

  While [! –r profile.txt] #循環條件語句

  do #循環操作語句

  sleep 30

  done

  ./setup.sh

  在編寫這個腳本的時候,各個部分的含義是什麼,又有哪些注意事項呢?具體來說,系統工程師需要掌握下面的內容。這些是寫好一個while循環結構最基本的東西。

  首先,需要直到常見循環條件語句的書寫。一般來說,任何Unix命令或者test內容都可以作為循環條件。也就是說,只要掌握了Unix常用的命令,既可以寫好循環語句。話雖然這麼說,但是有時候寫這個循環語句的時候,系統工程師往往需要有一定的創意,或者說需要有經驗的積累。確實,最終的循環語句都是基本的操作系統命令所組成的。但是有時候往往需要對他們進行靈活的組合。如筆者上面用的這個循環條件語句,相對來說比較簡單,但是並不一定每個系統工程師都可以像得到。筆者這個! –r profile.txt循環條件語句的含義,就是不能夠讀某個文件。一般情況下建立的文件當前用戶都是可讀的。如果系統判斷不可讀的話,那麼百分之百可以確定是這個文件不存在(只要權限沒有調整過)。換句話說,有時候系統工程師往往需要換一種角度去考慮問題。如按照這個案例,需要將“文件不存在轉換為“文件不可讀。此時這個循環條件語句就容易寫了。可惜的是,不少系統工程師缺少的就是這種轉換的能力。這部進行需要踏實的基礎,而且還需要一定的創新能力以及相當的工作經驗的積累。為此筆者建議,要用好Unix操作系統或者Linux操作系統,那麼在平時的工作中就要有意識的鍛煉自己這種能力。

copyright © 萬盛學電腦網 all rights reserved