如何在Linux上定期定期執行命令腳本?
在Linux上執行定時任務的場景還是很多的,比如說我們要:
定時進行日志文件切割;
定時同步服務時間;
定時備份重要數據;
定時執行任務等。
Linux服務器上要實現定時任務,方式有很多,比如說:cron、anacron、sleep等。那這幾種之間有何區別及該選哪種呢,結合我的經驗談談我的看法以供大家參考。
1、cron(crond)
crond是Linux自帶的一個守護進程,利用它來重復執行指定的任務,時間周期可以按分鐘、小時、天、月、周來執行,現實我們主要也就是靠它來執行定時任務。
這里需要注意的是,crontab是crond進程依懶的任務列表文件(對應配置文件在:/etc/crontab 中,不過系統中也有crontab命令,通過這個命令我們可以編輯任務清單),我們將定時任務記錄在crontab中,任務的執行靠的還是crond守護進程。
2、anacron
anacron(對應配置文件在:/etc/anacrontab 中)可以理解為是cron的一種補充,但兩者定位不同。cron定位是7x24小時不間斷的計劃任務執行者,而anacron是用來處理非7x24小時運行的Linux系統上的crontab的。有點繞口,簡單說就是,假設一臺服務器每周六周日是關閉的,而crontab中有幾條是在周六周日執行的,此時anacron就能發揮作用了。anacron在啟動后會去檢查關機期間哪些任務應該執行卻沒有執行到的crontab任務,找到這些任務,執行完,然后anacron就停止了。
其實anacron依懶于crontab,anacron能執行也是靠crontab來運行的。
anacron對于一般用戶基本上用不到!
3、sleep
還有一種方案是通過sh腳本來執行while(true) + sleep操作,以此來模擬定時任務。這種常見于一些PHP腳本模擬“守護進程”效果,執行完一段代碼后,休眠指定時間后再次執行。
綜上,在實際操作中,我們實現定時任務99%的情況下都是通過crontab這個命令和 /etc/crontab 這個文件來設置定時任務的,而定時任務的執行是由Linux自帶的crond守護進程來執行的。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我了解更多科技知識!