
因此,我們運行這個腳本,將資料添加到文件中,我嘗試添加一些內容來檢查腳本是否已經在運行。如果是這樣,那麼我希望它暫停並在 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
。