2013年11月18日 星期一

解決「因檔案鎖定,而造成 Linux 程式不能啟動」的問題

偶而在啟動 Linux 程式時會發生無法啟動,可能是因為 Linux 的安全設計所致。Linux 為避免使用者重覆開啟某些程式,會在開啟時檢查在『特定位置』是否有『特定檔案』。第一個開啟的程式當然沒有問題,但是第二個開啟的程式會發現該檔案已經存在,故立即停止執行。
  問題多因為前一次的程式執行時,發生『不正常』停止執行的情況。因此,程式正常停止時應會刪除掉的該『特定檔案』,並未如期被刪除掉。而導致在『正常』情況開啟的第一個程式也會檢查到該檔案,而立即停止執行。

一、檢查是否為檔案鎖定

「使用者」要檢查是否因此造成程式不能啟動,以 aMule 為例,可以用這個命令查詢:
[SiB@Celeron-D ~]$ ls .aMule/
amule.confGeoIP.datlastversionserver.met
canceled.metIncomingload_index.datserver_met.old
clients.metipfilter.datlogfileshareddir.dat
cryptkey.datipfilter_static.dat  muleLocksrc_index.dat
ED2KLinkskey_index.datnodes.datstatistics.dat
ED2KLinks_lock  known2_64.metpreferences.dat Temp
emfriends.met known.metpreferencesKad.dat  
上例中,藍色的 IncomingTemp 是目錄,紅色的 muleLock 是為防止同時執行兩個 aMule 用的。當第一個 aMule 被啟動執行後,即建立 muleLock 這個檔案,當使用者未注意而啟動第二的 aMule 時,程式發現 muleLock 已被建立,即停止重覆啟動。

:紅色是為方便說明而標上去,查詢命令操作時仍為黑色。

二、解決因檔案鎖定,而不能開啟的問題

確認是檔案鎖定造成的問題,解鎖的方法也很簡單。就是將這個在程式停止執行前,應『正常』刪除的『特定檔案』刪除即可。
[SiB@Celeron-D ~]$ rm -f .aMule/muleLock
:其它程式鎖定用的檔案,檔名中多有 Lock 這個字,檔案日期約為上次程式啟動的時間。

已測試版本:

  • Fedora: 14, 17, 19

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)