Shell指令碼互斥設定

2022-06-24 09:24:13 字數 1024 閱讀 2517

參考:

shell指令碼為了防止同時執行相同的指令碼需要設定互斥鎖

簡單方法,指令碼執行開始生成乙個鎖檔案,如果該鎖檔案存在則代表有人在執行,就退出指令碼

test.sh

#!/bin/bash

lockfile="/tmp/test_lock"

if [ -f $ ]

then

echo "someon do the same thing"

exit

else

touch $

fisleep 90

if [ -f $ ]

then

rm -rf $

fi

sleep模擬指令碼在執行其他操作

開啟乙個終端執行指令碼,然後在指令碼還未結束的時候在開啟另外乙個終端執行會提示,然後退出

假如在執行過程中意外或者強制退出了則指令碼沒有執行到最後刪除鎖檔案的步驟,下面寫乙個指令碼避免該問題

#!/bin/bash

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

ps:$是獲取當前指令碼名

判斷過程為

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...