在 incron 作業中一次允許一個條目?

在 incron 作業中一次允許一個條目?

我有一個要監視的目錄。更新後,我透過 incron 運行一些命令。當該目錄下複製多個檔案時,incron會同時執行多個指令。有沒有什麼方法可以讓 incron 的一項作業執行時,第二項作業不執行?我已關注本教程以獲得指導。

答案1

不,incron 沒有內建鎖定功能。如果您想阻止作業同時執行,請從作業內部執行此操作。

如果您想延遲作業直到前一個作業完成,請讓它們鎖定。您可以使用flock命令。手冊頁中有範例。

如果您想在前一個作業尚未完成的情況下跳過某個作業,您仍然可以使用flock,但逾時時間為 0。請注意,這很容易出現競爭條件:可能會發生在作業 #1 完成枚舉文件之後但在它有時間釋放鎖之前複製新文件的情況,而作業 #2 會發現該鎖已被複製。並退出而不處理文件。解決這場競賽沒有簡單的方法。

答案2

一個最簡單的解決方案範例:假設 1 表示檔案已鎖定(前一個腳本已在執行),0 表示已解鎖(沒有進程正在執行)。

然後這是代碼

    state=`cat /tmp/my_lck`
    if [ "$state" -eq 1 ];then
        echo "Already executing!!!"
        exit
    else
        #Lock the file
        echo 1 > /tmp/nws_lck

       #Put you code here  

 #Unlock    
        echo 0 > /tmp/nws_lck

    fi

相關內容