crontab+flock實現定時檢測進程狀態並重啓

Crontab

*/1 * * * * flock -xn ./flock.lock -c "php -r \"sleep(120);\"" && rm ./flock.lock

注:咱們擔憂常駐進程(死循環)運行時出現不知名錯誤,而致使進程中斷執行,經過crontab+flock保證常駐進程的中斷以後重啓php

Flock

flock -xn ./flock.lock -c "php -r \"sleep(20);\"" && rm ./flock.lock

這條命令,第一次執行,能夠發現幾點html

  1. 命令行會等待20s而後結束linux

  2. 命令回車執行以後,生成了flock.lock文件shell

  3. 20s等待完畢以後flock.lock文件被刪除命令行

  4. 在這20s等待期間,ps -ef | grep php會出現兩個相關進程,一個是php執行進程,一個是flock鎖進程code

  5. 在這20s等待期間,重複運行該命令,進程數量並不會增長htm

flock的一些參數指令

-s, --shared:    得到一個共享鎖
-x, -e, --exclusive: 得到一個獨佔鎖(排它鎖)
-u, --unlock:    移除一個鎖,一般是不須要的,腳本執行完會自動丟棄鎖
-n, --nonblock:  若是沒有當即得到鎖,直接失敗而不是等待
-w, --timeout:   若是沒有當即得到鎖,等待指定時間
-o, --close:     在運行命令前關閉文件的描述符號。用於若是命令產生子進程時會不受鎖的管控
-c, --command:   在shell中運行一個單獨的命令
-h, --help       顯示幫助
-V, --version:   顯示版本
Q1: 爲何會等待20s執行以後退出?

答: 前段命令會等待 -c 後面的命令執行結束,即: php -r "sleep(20);"進程

Q2: 爲何會生成flock.lock文件?

答: flock 會先建立一個文件,再獲取該文件的相關鎖(獨佔鎖、共享鎖、排他鎖)crontab

Q3:爲何flock.lock文件被刪除?

答: 前面的命令執行成功,執行下一步命令get

關於&&的用法請閱讀《Shell 基本運算符》

Q4:爲何會有兩個進程?

答: flock進程在等待php進程執行完成

Q5: 爲何相關進程數量並不會增長

答: 第一個flock 進程已經拿到了文件flock.lock的獨佔鎖,後面重複執行命令,獲取鎖失敗(與flock -n的參數指令相關),執行失敗後,天然不會進行下一步

注:flock.lock文件可不刪除,flock只會獲取文件鎖,跟文件是否存在無關(文件不存在會自動建立文件)

相關文章
相關標籤/搜索