Shell-Script
檢查和測試來自其他程序的鎖
我正在嘗試
init.d
圍繞我最喜歡的應用程序之一創建一個服務包裝器(腳本)。該應用程序同時創建了一個 PID 和一個鎖定文件,因此我嘗試使用它們來確保我可以報告應用程序的準確狀態並防止我的服務啟動多個副本。不幸的是,應用程序(或系統)不時崩潰,留下 PID 和鎖定文件,所以我不能只檢查這些文件的存在來確定我的應用程序是否正在執行。
應用程序確實在鎖文件上創建了一個鎖,一個鎖,
POSIX
WRITE
根據 刪除文件也成功了(lslocks``flock -x -n "$file" echo dummy``rm "$file"
那麼,我怎樣才能以我知道文件是否有鎖(
POSIX
或FLOCK
)的方式查詢文件?
我在腳本中使用了以下函式來完成此操作:
getPIDLock () { if [ ! -e "$LockFile" ]; then return 0 # Not an error, but lsof will emit a lot of text if the file doesn't exist fi local PIDLock=$( lsof -F p "$1" | head -n 1 ) local strEcho='echo ${PID:1}' bash -c "PID=\"$PIDLock\";$strEcho;" # Assuming system has BASH, but not assuming that the default shell is BASH return 0 }
如果有問題的文件被鎖定,這將發出一個 PID;否則,它將發出一個空白字元串。
PID=$( getPIDLock "/path/to/pidfile" ) if [ -n $PID ]; then # Do your thing fi