Re: [請益] 請問多台主機操作同個檔案應該如何鎖定 …
用'以server_id改檔名'的招數不知可不可行? 不管是不是server_id,
只要能夠用來識別不同的伺服器就行了.
假設原共享資料檔名為 data.txt
每次要寫入資料時的程式執行步驟:
loop(try5次,每隔1秒try 1次){
1 若檔案 data.txt 不存在, 則
1.1 continue; (代表其它server佔用中)
2 以server_id改 data.txt 檔名為: [server_id]_data.txt
2.1 若2. 失敗, continue; (代表被其它server搶先一步)
3 開啟 [server_id]_data.txt
4 寫入資料;
5 將 [server_id]_data.txt 改回檔名為 data.txt
6 跳離loop;
}
結束
※ 引述《guardlan (亞修)》之銘言:
: 請問多台Web主機對同一個檔案操作應該如何避免檔案被改壞掉...
: 我是有找到flock來使用
: 但是這個flock指令只有原來的主機認得,同時間如果有其他台主機要寫那個檔案
: 還是會把它寫壞掉
: 例如web1主機要寫/tmp/test.inc這個檔案(有使用flock來做檔案lock的動作)
: 可是只有web1主機的其他程序會等待test.inc檔案的lock結束
: 其它台主機(web2、web3)的程序仍然會對那個檔案作寫入的動作,然後檔案裡面就會亂七八糟(被寫壞了)
: 所以想請問各位先進,如果遇到多台主機要對單一檔案操作應該如何處理?
: web1 web2 web3 主機會mount同一個網路空間
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.151.184
※ 編輯: bobju 來自: 58.115.151.184 (10/15 08:59)
→
10/15 11:12, , 1F
10/15 11:12, 1F
或許可以試試. 這是作業系統對於檔案的管理規則了, 沒深入研究我也不確定.
就我的理解, "讀取"應該不會影響到"改名", "以寫入模式開檔"才會鎖住檔案,
禁止其它程式試圖改名.
而你所提出的問題, 主要似乎是為了解決不同主機要同時"寫入"資料的矛盾,
而非讀取. 如果其它主機因目前的工作主機改變了檔案名稱而讀取失敗, 頂多
是隔時間再試讀, 至少不會造成寫入資料混亂的狀況.
僅供參考, 如果牽涉到細節的話, 恐怕這就幫不上忙了.
→
10/15 11:20, , 2F
10/15 11:20, 2F
→
10/15 11:33, , 3F
10/15 11:33, 3F
※ 編輯: bobju 來自: 58.115.151.184 (10/15 11:47)
→
10/15 13:21, , 4F
10/15 13:21, 4F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章