開發和維護項目的時候,我們經常需要定時去執行某個任務,比如定時跑一個腳本或者定時備份數據等。
一.crontab安裝
執行一下 service crond status 命令查看 cron服務狀態,若遇到“crontab command not found”錯誤,這是因爲軟件包沒有安裝。
一般情況下linux系統會自帶crontab及crond。如果沒有安裝,請使用以下指令安裝:
yum install vixie-cron
yum install crontabs
(PS:Ubuntu操作系統下請使用apt-get)
二.rontab服務啓動與停止常用命令:
service crond status //查看 cron服務狀態
service crond start //啓動服務
service crond stop //關閉服務
service crond restart //重啓服務
service crond reload //重新載入配置
三.crontab任務管理命令
crontab –e : 修改 crontab 文件,如果文件不存在會自動創建。
crontab –l : 顯示 crontab 文件。
crontab -r : 刪除 crontab 文件。
四.設置定時任務
(1)crontab文件中的行由6個字段組成,不同字段間用空格分割。前5個字段指定命令要運行的時間,最後一欄代表要執行的命令,格式如下:
minute hour day month week command [按順序分別是:分鐘 小時 日期 月份 星期]
分鐘(0-59)
小時(0-28)
日期(1-31)
月份(1-12)
星期(0-6,其中0代表星期日)
第六個字段是一個要在適當時間執行的命令(注意:當使用crontab運行shell腳本時,要由用戶來給出腳本的絕對路徑)
(2)除了數字還有幾個特殊的符號:"*"、"/"和"-"、","
星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
(3)幾個常用例子:
每五分鐘執行一次: */5 * * * *
每小時執行一次 : 0 * * * *
每天執行一次: 0 0 * * *
每週執行一次: 0 0 * * 0
每月執行一次: 0 0 1 * *
每年執行一次: 0 0 1 1 *
(4)特殊例子
30 21 * * * /apps/bin/cleanup.sh //表示每晚的21:30 運行/apps/bin/目錄下的cleanup.sh腳本。
45 4 1,10,22 * * /apps/bin/cleanup.sh //表示每月1,10,22日的4:45 運行/apps/bin/目錄下的cleanup.sh腳本。
10 1 * * 6,0 /apps/bin/cleanup.sh //表示每週六、週日的1:10 運行/apps/bin/目錄下的cleanup.sh腳本。
0,30 18-23 * * * /apps/bin/cleanup.sh //表示在每天18:00至23:00之間每隔30分鐘 運行/apps/bin/目錄下的cleanup.sh腳本。
0 23 * * 6 /apps/bin/cleanup.sh //表示每星期六的23:00 運行/apps/bin/目錄下的cleanup.sh腳本。
四.實例
(1)寫一個定時任務,每分鐘往test.txt文件寫入一個"hello world"字符串
a.創建兩個文件(比如先在/usr目錄下創建個cron_task文件夾,專門存放定時任務文件,以下命令均在此文件夾下執行)
touch script.sh //腳本文件,後綴可以隨便定義,比如(script script.cron script.sh均可)
touch test.txt //目標文件
b.使用vi命令編輯script.sh文件。寫入以下內容:
*/1 * * * * echo "hello world" >> /usr/cron_task/test.txt
c.添加定時任務。將剛創建的定時任務腳本添加到定時任務中,執行命令
crontab script.sh
d.查看結果
service crond status //查看定時任務服務執行情況
cat test.txt //查看目標文件的內容(是否定時寫入了"hello world"字符串)
(2)每間隔5分鐘,向某個地址發送請求,”-O temp.txt”表示輸出會發送到臨時文件
*/5 * * * * /usr/bin/curl -O temp.txt http://host/test.php