參考:
shell指令碼為了防止同時執行相同的指令碼需要設定互斥鎖
簡單方法,指令碼執行開始生成乙個鎖檔案,如果該鎖檔案存在則代表有人在執行,就退出指令碼
test.sh
#!/bin/bashsleep模擬指令碼在執行其他操作lockfile="/tmp/test_lock"
if [ -f $ ]
then
echo "someon do the same thing"
exit
else
touch $
fisleep 90
if [ -f $ ]
then
rm -rf $
fi
開啟乙個終端執行指令碼,然後在指令碼還未結束的時候在開啟另外乙個終端執行會提示,然後退出
假如在執行過程中意外或者強制退出了則指令碼沒有執行到最後刪除鎖檔案的步驟,下面寫乙個指令碼避免該問題
#!/bin/bashps:$是獲取當前指令碼名if [ -f /var/run/$.pid ]
then
ps -ef|grep -v grep|grep $|grep `cat /var/run/$.pid` >> /dev/null
if [ $? -eq 0 ];then
echo "someone do the same thing"
exit 1
fifiecho $$ > /var/run/$.pid
sleep 90
判斷過程為
1,判斷指令碼pid是否存在
2,如果指令碼pid存在,檢查當前是否執行該指令碼,如果執行了並且是以pid檔案中的pid執行的則代表有其他人在執行改指令碼則退出
3,如果沒有一pid檔案中的pid執行的指令碼則代表沒有人執行該指令碼,則把執行的pid寫入pid檔案即可
ps:指令碼執行報錯
test.sh: 2: test.sh: bad substitution需要用bash執行
shell指令碼互斥鎖
指令碼防止同時執行兩個例項的互斥鎖 以下是主要寫法。檢查鎖檔案是否存在,如果存在表示系統中有其他例項在執行,則直接退出。需要注意的是,鎖檔案需要避免重名,建議指令碼名稱.file f tmp lock.file exit 開始執行任務前,建立鎖檔案,並把當前pid 寫入鎖檔案 echo tmp lo...
shell指令碼單例項互斥
shell執行指令碼單例項互斥問題 比如說有乙個週期性 cron 備份mysql的指令碼,或者rsync指令碼,如果出現意外,執行時間過長,很有可能下乙個備份週期已經開始了,當前週期的指令碼卻還沒有執行完,顯然我們都不願意看到這樣的情況發生。其實只要對指令碼自身做一些改動,就可以避免它被重複執行。b...
Debian下設定Shell指令碼開機自動啟動
debian下設定shell指令碼開機自動啟動 1 進入init.d初始化指令碼目錄 切換到root使用者 sudo s cd etc init.d 2 建立啟動shell指令碼,安裝nano apt get install nano nano etc init.d footbar 3 編寫node...