如何檢查腳本是否正在運行並暫停,直到該實例完成再次運行?

如何檢查腳本是否正在運行並暫停,直到該實例完成再次運行?

因此,我們運行這個腳本,將資料添加到文件中,我嘗試添加一些內容來檢查腳本是否已經在運行。如果是這樣,那麼我希望它暫停並在 20 秒內再次檢查並重複該操作,直到發現它沒有運行。此時,我希望它繼續執行腳本的其餘部分。所以我需要知道如何讓它繼續檢查,直到我可以繼續。有人有主意嗎?

    if [ `ps -ef| grep $script_name_with_arguments | wc -l ` -gt 1 ]
    then
      echo "already running"
      sleep 20s
    else
      echo "ok"
    fi
}```

答案1

您使用某種鎖定。

最簡單的方法是鎖定檔案。有一些軟體包可以為您管理這些內容;你沒有說你的平台或發行版是什麼,所以我不能非常精確,但其中之一是程式procmail附帶的軟體包lockfile

您可以在腳本中使用它,如下所示:

LOCK=/run/npaulsen/mylockfile.lock
lockfile -20 $LOCK
run_the_fscking_rest_of_my_script
rm -f $LOCK

您可以進行一些改進,以避免在一個實例崩潰時無限期地卡住。您可以閱讀有關該內容的線上說明頁:man 1 lockfile。或者您可以實現自己的 - 這很簡單,但您需要真正的程式語言(而不是 shell 腳本)。

另一個更複雜(但也更複雜)的想法是使用 POSIX 信號量;嘗試man 7 sem_overview

相關內容