1. 程式人生 > >【Linux】Linux定時任務crond

【Linux】Linux定時任務crond

作業規劃程序crond是Linux下用來定期執行命令或指定程式任務的一種服務或軟體。執行linux後,開機自啟動crond任務,系統會每分鐘檢查是否有要執行的任務工作(迴圈檢測)。linux系統中定時任務排程的工作可以分為以下兩個情況:
1. linux系統自身定期執行的任務工作:系統週期性執行的任務工作,如輪詢系統日誌,備份系統資料,清理系統快取等。
2. 使用者執行的任務工作:某個使用者或系統管理員定期要做的任務工作,例如每隔5分鐘和網際網路上時間伺服器進行時間同步,每天晚上0點備份站點資料及資料庫資料,一般這些工作需要由每個使用者自行設定才行。

設定定時任務命令是:crontab,它的用法引數如下:
用法:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

引數 意義
-l 檢視當前使用者的定時任務
-e 編輯當前使用者的定時任務
-r 刪除定時任務
-i 刪除crontab檔案內容,刪前會有提示
-u 刪指定使用使用者執行任務

語法格式中特殊符號的含義:

符號 意義
* 號表示任意時間都,就是“每”的意思,舉例:如00 01 * * ls表示每月每週每日的凌晨1點執行ls任務
- 減號,表示分隔符,表示一個時間範圍段。00 17-19 * * * ls。就是17,18,19點整點分別執行的意思。
, 逗號,表示分隔時間段的意思。30 17,18,19 * * * ls 表示每天17,18,19點的半點執行ls。也可以和“-”結合使用,如: 30 3-5,17-19 * * * ls。
/n n代表數字,即”每隔n單位時間”,例如:每10分鐘執行一次任務可以寫 /10 * * * ls,其中 /10,的範圍是0-59,也可以寫成0-59/10。

用一下這個命令看看。
1. 使用crontab -e 編輯好定時任務。我讓每隔一分鐘向test.c檔案裡列印hello。命令如下:

*/1 * * * * echo hello >> /home/liuqing/test.txt

2.儲存退出後開始執行,檢視test.c檔案是否每隔一分鐘就寫入一個hello。
這裡寫圖片描述
說明命令執行成功了。
再試一下每分鐘執行一次ls命令。我們下意識的就會把crontab開啟的檔案寫成下面這個樣子:

*/1 * * * * ls

然後執行後發現,雖然crontab -l 顯示正在執行該任務,但是螢幕中並不會執行ls命令。是因為我們沒有把執行結果指定顯示到終端上,可是預設不就是應該到當前終端嗎?我們知道,一個終端只能執行一個前臺作業,多個後臺作業,當前前臺執行的是shell,所以如果不指定輸出到終端,那麼這個定時任務是不能佔用前臺的。所以,命令應該如下:

*/1 * * * * ls >> /dev/pts/0

為什麼是重定向到/dev/pts/0呢?終端也是一個檔案,使用who am i命令可檢視當前終端檔案。
這裡寫圖片描述
這樣就達到了一分鐘執行一次ls的效果。如果你也只是測試crontab而已,記得最後要執行crontab -r ,要不然你的Linux會一直在跑這個程序,耗費資源。