摘要1:
摘要2:
摘要3:
用flock命令解決linux計畫任務重複執行
在做計畫任務的時候,可能由於某些問題,任務沒有執行完成,導致任務重複的執行,解決這個問題,只需要乙個flock命令就可以了。
1.建立s**件
vim test.sh
#! /bin/bash
echo
"hello world"
sleep 10
2.建立鎖檔案
touch test.lock #隨便命名
[root@localhost ~]
# flock -xn ./test.lock -c "sh /root/test.sh"
執行中…
3.開啟另外乙個bash視窗執行
[root@localhost ~]
# flock -xn ./test.lock -c "sh /root/test.sh"
前面未獲取到鎖直接返回 直到其他執行完畢 這個才開始執行
4.crontab運用flock防止重複執行
* * * * * * (flock -xn ./test.lock -c "sh /root/test.sh") #-n 為非阻塞模式
1.機器down機自動啟動或重啟
可以在daemon開始的時候, 開啟乙個檔案然後獲取乙個寫鎖. 守護指令碼也開啟檔案並設定寫鎖, 然後阻塞, 一旦寫鎖獲得成功, 則說明daemon已經掛了. 此時守護指令碼重啟daemon並放棄寫鎖.
執行
flock -x ./test.lock -c "/usr/local/nginx/sbin/nginx"
#去掉-n表示使用阻塞模式
執行中…
2.再次執行
flock -x ./test.lock -c "/usr/local/nginx/sbin/nginx"
#去掉-n表示使用阻塞模式
阻塞中…
3.模擬down機
[root@localhost ~]
# ps aux |grep "nginx"|grep"master"|grep -v "grep"|awk''|xargskill -9
kill後阻塞的命令馬上執行 新的程序pid立馬產生 歐啦
linux在多個程序同時操作同一份檔案的時候,很容易導致檔案混亂,這時候就需要鎖,來保證檔案的完成性.
flock主要三種操作型別:
public function logresult($word='')
使用共享鎖lock_sh,如果是讀取,不需要等待,但如果是寫入,需要等待讀取完成。
使用獨佔鎖lock_ex,無論寫入/讀取都需要等待。
lock_un,無論使用共享/讀佔鎖,使用完後需要解鎖。
lock_nb,當被鎖定時,不阻塞,而是提示鎖定。
Linux flock 函式 檔案鎖
檔案鎖是一種檔案讀寫機制,在任何特定的時間只允許乙個程序訪問乙個檔案。利用這種機制能夠使讀寫單個檔案的過程變得更安全。這裡我們使用flock 函式。flock函式說明 flock 會依引數operation所指定的方式對引數fd所指的檔案做各種鎖定或解除鎖定的動作。此函式只能鎖定整個檔案,無法鎖定檔...
mysql行鎖詳解 詳解MySQL行鎖
鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。鎖保證資料併發訪問的一致性 有效性 鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。鎖是mysql在伺服器層和儲存引擎層的的併發控制。mysql中從對資料操作的粒度分為表鎖和行鎖。表鎖是指對一整張表加鎖,一般是 ddl 處理時使用 而行鎖則是鎖定...
間隙鎖詳解
間隙鎖 gap lock 是innodb在 可重複讀 提交下為了解決幻讀問題時引入的鎖機制,下面的所有案例沒有特意強調都使用可重複讀隔離級別 幻讀的問題存在是因為新增或者更新操作,這時如果進行範圍查詢的時候 加鎖查詢 會出現不一致的問題,這時使用不同的行鎖已經沒有辦法滿足要求,需要對一定範圍內的資料...