linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面本來就有很是多的計劃性工做,所以這個系統服務是默認啓動的。另 外, 因爲使用者本身也能夠設置計劃任務,因此, Linux 系統也提供了使用者控制計劃任務的命令 :crontab 命令。linux
crond 是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務 工具,而且會自動啓動crond進程,crond進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務。shell
Linux下的任務調度分爲兩類,系統任務調度和用戶任務調度。windows
系統任務調度:系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。緩存
前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪一個shell,這裏是bash,第二行PATH變量指定了系統執行 命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變量的值爲空,則表示不發送任務 執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。bash
星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。異步
逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」工具
中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」this
正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。操作系統
實例:日誌
在多個進程同時操做同一份文件的過程當中,很容易致使文件中的數據混亂,須要鎖操做來保證數據的完整性,這裏介紹的針對文件的鎖,稱之爲「文件鎖」 flock。
flock,建議性鎖,不具有強制性。一個進程使用flock將文件鎖住,另外一個進程能夠直接操做正在被鎖的文件,修改文件中的數據,緣由在於flock只是用於檢測文件是否被加鎖,針對文件已經被加鎖,另外一個進程寫入數據的狀況,內核不會阻止這個進程的寫入操做,也就是建議性鎖的內核處理策略。
flock鎖的釋放很是具備特點,便可調用LOCK_UN參數來釋放文件鎖,也能夠經過關閉fd的方式來釋放文件鎖(flock的第一個參數是fd),意味着flock會隨着進程的關閉而被自動釋放掉。
若是某腳本要運行30分鐘,能夠在Crontab裏把腳本間隔設爲至少一小時來避免衝突。而比較糟的狀況是可能該腳本在執行週期內沒有完成,接着第二個腳本又開始運行了。如何確保只有一個腳本實例運行呢?一個好用的方法是利用lockf(FreeBSD 8.1下爲lockf,CentOS 5.5下爲flock),在腳本執行前先檢測可否獲取某個文件鎖,以防止腳本運行衝突。
flock (util-linux 2.13-pre7)
Usage: flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command...
-s --shared Get a shared lock
#共享鎖,在定向爲某文件的FD上設置共享鎖而未釋放鎖的時間內,其餘進程試圖在定向爲此文件的FD上設置獨佔鎖的請求失敗,而其餘進程試圖在定向爲此文件的FD上設置共享鎖的請求會成功
-x --exclusive Get an exclusive lock
#獨佔或排他鎖,在定向爲某文件的FD上設置獨佔鎖而未釋放鎖的時間內,其餘進程試圖在定向爲此文件的FD上設置共享鎖或獨佔鎖都會失敗。只要未設置-s參數,此參數默認被設置
-u --unlock Remove a lock
#手動解鎖,通常狀況沒必要須,當FD關閉時,系統會自動解鎖,此參數用於腳本命令一部分須要異步執行,一部分能夠同步執行的狀況
-n --nonblock Fail rather than wait
#爲非阻塞模式,當試圖設置鎖失敗,採用非阻塞模式,直接返回1,
-w --timeout Wait
for
a limited amount of
time
#設置阻塞超時,當超過設置的秒數,就跳出阻塞,返回1
-o --close Close file descriptor before running command
-c --command Run a single command string through the shell 執行其後的comand
-h --help Display
this
text
-V --version Display version