前言
我們可以運用 flock 幫助我們管理任務的流程。
在執行多腳本的時候,這個功能非常的方便。
flock
flock -s /tmp/lock1.lock sleep 3
flock -s /tmp/lock1.lock echo "task 2"
flock -x /tmp/lock1.lock echo "task 3"
說明
指定說明
- -s : 代表此檔案為 shared lock,可以同時被多程式執行。所以擁有此 lock 的程式都可以馬上執行
- -x:代表指定的檔案為 exclusive lock,只能同時被一個程式執行。
程式碼說明
上面的程式碼中,表示我們透過 /tmp/lock1.lock 這個檔案來做為我們任務的管理器
(其中不論是路徑、檔名、副檔名我們都可以任意更改,只需指定一個檔案即可。)
- flock -s /tmp/lock1.lock sleep 3 : 執行第一個任務 sleep 3
- 此指令擁有 lock1.lock
- flock -s /tmp/lock1.lock echo “task 2” : 執行第二個任務 echo “task 2”
- 此指令也擁有 lock1.lock,由於是 shared lock (-s),所以可以直接執行
- flock -x /tmp/lock1.lock echo “task 3”: 執行第三個任務 echo “task 3”
- 此指令也擁有 lock1.lock,由於是 exclusive lock (-x),所以一次只能被執行一支 (需等待前一支程式執行完才能執行)
結果
我們執行上述的腳本後,發現結果為:
1. sleep 3、echo task2 同時執行
2. 等待 sleep 的 3 秒後,echo task3 才被執行。
也就是說,我們可以完全確保什麼指令可以先被執行,
什麼指令需要等到前一個任務的 (lock) 被釋放後,才能夠被執行。