我需要一些幫助。我有一個腳本'腳本1',它將調用'腳本2'在後臺運行,並定期檢查某些內容。但我希望腳本2只開始一次,即使腳本1被多次調用。有沒有辦法做到這一點?從腳本中只運行一次命令,甚至腳本多次執行
如果有人提出一些命令來實現這一點,那將會更有幫助。
在此先感謝
我需要一些幫助。我有一個腳本'腳本1',它將調用'腳本2'在後臺運行,並定期檢查某些內容。但我希望腳本2只開始一次,即使腳本1被多次調用。有沒有辦法做到這一點?從腳本中只運行一次命令,甚至腳本多次執行
如果有人提出一些命令來實現這一點,那將會更有幫助。
在此先感謝
當然,你可以把這樣的事情在Script2
頂部:
if [[ -f /tmp/Script2HasRun ]] ; then
exit
fi
touch /tmp/Script2HasRun
這將阻止Script2
從曾經使用定點文件,除非重新運行文件被刪除,當然,它可能會在某個時間點,因爲它在/tmp
。
所以你可能想把它放在其他地方,它可以得到更好的保護。
如果你不要想要阻止它再次運行,你需要一些機制來刪除sentinel文件。
例如,如果你的目的是隻有一個副本同時運行:
if [[ -f /tmp/Script2IsRunning ]] ; then
exit
fi
touch /tmp/Script2IsRunning
# Do whatever you have to do.
rm -f /tmp/Script2IsRunning
而且記住有這麼可以結果一分式兩份運行中存在的競爭條件。有一些方法可以減輕以及通過使用內容以及存在的,是這樣的:
if [[ -f /tmp/Script2IsRunning ]] ; then
exit
fi
echo $$ >/tmp/Script2IsRunning
sleep 1
if [[ "$(cat /tmp/Script2IsRunning 2>/dev/null)" != $$ ]] ; then
exit
fi
# Do whatever you have to do.
rm -f /tmp/Script2IsRunning
有超出保護更多的水平,但他們變得複雜,我常常發現,足以滿足大多數事情。
非常感謝paxdiablo。這個答案非常有用,它解決了我的問題。 :) – iMSivam
[Shell腳本的可能的重複:確保腳本不執行,如果已經運行](http://stackoverflow.com/questions/4768860/shell-script-ensure-that-script-isnt-executed-if-已經運行) –
重複的:http://stackoverflow.com/questions/185451/quick-and-dirty-way-to-ensure-only-one-instance-of-a-shell-script-is-running-在 –