Linux的計劃任務分為兩類:
1,一次性執行:
常用命令:at, batch,依賴於atd服務
2,周期性執行:
常用命令:crontab,依賴於crond服務
一次性任務執行:
用法:
#at TIME
at> /bin/sync 輸入需要執行的命令或腳本
at> “Ctrl+d” 輸入Cry+d提交任務
TIME:的幾種格式
#at now+3min 相對時間
#at 11:30 或是絕對時間
#at noon, midnight, teatime(4:00pm) 或是模糊時間
man at查看其他詳細時間表示方法
at命令選項:
-m:當at工作完成後,即使沒有輸出信息,也會以mail通知用戶工作已完成
-l:列出當前正在等待執行的任務隊列
#at -l= #atq
-d:刪除尚未執行的任務
#at -dJOB_ID = atrm JOB_ID
-f:指定執行對應目錄下的腳本
#at-f /PATH/TO/AT_SCRIPT TIME 指定執行對應目錄下的腳本
此處/PATH/TO/AT_SCRIPT稱為at腳本
例:at的使用實例
通常在改遠程主機ip之前,為避免修改後的新IP不通,導致無法連接,此場景中則可以先執行一個at任務
#at now 10min
at>ifconfig eth0 IP ##此IP為目前在使用的正確的IP
先發送此at任務,再去改IP,即使改錯,10分鐘後也會自動恢復。
與at的不同是,batch可以不需要指定時間,自動選擇系統空閒時執行。在計劃執行某些批處理任務的場合時,可能使用到,使其自己評估選擇系統空閒時執行。
周期性任務:
周期性任務有兩類:
系統類周期性任務:/etc/crontab
用戶類周期性任務:/var/spool/cron/USERNAME
系統cron的定義:
方法:
1、#vim /etc/crontab 此配置文件中添加計劃任務
2、#service crond restart 重啟crond服務,使剛添加的計劃任務生效
系統cron的配置文件/etc/crontab中7個字段的含義:
#cat/etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59) #第一個字段,在第幾分鐘執行
# | .------------- hour (0 -23) #第二個字段
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6)(Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name(第六個字段) command to be executed(第七字段)
用戶cron的定義:
方法:
#crontab -e [-u USERNAME]
此命令自動打開編輯器,即可新建任務、修改原有任務、刪除原有任務,然後保存即可。此命令編輯文件提供語法檢查功能,而通過vim並不會。類似visudo。
保存後的cron文件自動保存在 /var/spool/cron/USERNAME文件中,此文件中定義6個字段,意義同配置文件/etc/crontab中相同,只是去掉user-name段,即與系統cron相比,用戶cron無需指定用戶身份
crontab命令的選項:
-e:打開當前系統的默認文本編輯器,來定義用戶cron
-r: 移除配置文件,會刪除所有任務;
(若刪除某指定任務,crontab -e打開文件刪除對應行即可)
-l: 列出周期性任務
-u USERNAME:管理員以其他用戶身份定義crontab,並且會保存對應用戶名的目錄下
E.g. #crontab-e -u user1 (所以即可實現root用戶管理其他用戶的任務)
cron配置文件中時間點的段,指定時間時可使用如下通配符:
* :相應時間點的所有有效取值,即意為每
E.g. 3 4 * * * root cat /etc/fstab 每天4點3分以root用戶執行命令cat/etc/fstab
3 4 * * 5 root cat /etc/fstab 每周五4點3分執行(周和月,通常不同時使用)
, :離散取值
E.g. 3,18,33,48 * * * * root cat /etc/fstab
表示每小時的第3分鐘,18分鐘….,即每5分鐘執行1次
/ :定義指定取值范圍內的頻率
E.g. */3 * * * * root cat/etc/fstab 每3分鐘執行一次
17 */3 * * * root cat /etc/fstab 每3小時的第17分鐘執行一次,即實現每3小時執行一次- :連續取值:
E.g. 17 8-20/3 * * * root cat /etc/fstab 每天8點到20點每3小時執行一次
例:3 18 * * 2,5 每周執行2次(周二和周五)
2,328-18/3 * * 1-5 周一到周五,8點到18點每隔3小時,每半小時執行一次
72 */2 * * root tar -Jcf /backup/etc-`date '+%F'`.tar.xz /etc/* 每2天的凌晨2點7分執行備份一次/etc目錄
Linux中利用crontab創建計劃任務 http://www.linuxidc.com//Linux/2013-06/86401.htm
Linux中用crontab例行工作安排 http://www.linuxidc.com//Linux/2013-06/85441.htm
Linux crontab不執行問題排查 http://www.linuxidc.com//Linux/2013-06/85432.htm
Ubuntu使用crontab定時任務 http://www.linuxidc.com//Linux/2013-05/84770.htm
Linux計劃任務(at batch crontab anacron) http://www.linuxidc.com//Linux/2013-03/81584.htm