Linux flock檔案鎖詳解

2021-10-10 20:50:18 字數 1517 閱讀 2865

摘要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在 可重複讀 提交下為了解決幻讀問題時引入的鎖機制,下面的所有案例沒有特意強調都使用可重複讀隔離級別 幻讀的問題存在是因為新增或者更新操作,這時如果進行範圍查詢的時候 加鎖查詢 會出現不一致的問題,這時使用不同的行鎖已經沒有辦法滿足要求,需要對一定範圍內的資料...