提及計劃任務,相信你們都應該聽過,其實就是給個人計算機設置定時任務,指定時間內去執行相應的操做。linux
熟悉windows的朋友都知道,windows下有一項系統功能叫計劃任務程序,咱們能夠經過界面設定在Windows環境下的計劃任務。數據庫
今天咱們不談Windows,重點在Linux服務器上。Windows和Linux在應用過程當中最大的區別,在於Windows是更加貼近於用戶的,而Linux主要負責管理服務器的工做。相對來講,Linux對計劃任務的要求應該更爲多一些。apache
例如,咱們須要每分鐘執行一次程序,檢查系統運行狀態,每星期要進行日誌備份,每個月要進行數據庫的備份。諸如此類大量頻繁的任務依靠人來作確實不太現實。windows
如何在Linux中使用計劃任務呢?這裏就要用到Linux下的工具Crontab。服務器
首先這裏咱們須要記住兩個概念:週期性執行的任務咱們稱爲CronJob,週期性執行的任務列表咱們稱爲Crontable。
ide
環境:VMware10,Linux版本型號CentOS6.5。遠程工具 X_Shell5
工具
首先,安裝並檢查Crontab工具ui
安裝:url
- yum install vixie-cron - yum install crontabs
檢查:spa
- crontab -l #檢查Crontab工具是否安裝 - service crond status #檢查crond服務是否啓動 - service crond #查詢crond服務可使用的命令
在一些版本的Linux中,Crontab工具是默認安裝的(固然,這與你安裝Linux時選擇哪一種安裝也是有關係的,最小系統安裝默認不會安裝該工具),若是沒有的話,搭建yum源本地安裝便可。
接下來,這裏咱們先給一個小案例。
案例一:
每分鐘都打印當前時間到一個日誌文件中
*********date >> /tmp/log.txt
- crontab -e #打開計劃任務
#寫入
*/1 * * * * date >> /tmp/log.txt
# 保存退出
- crontab -l #打印計劃任務
- tail -f /tmp/log.txt #動態刷新log.txt文件的最後一行
上面的案例給出的是最簡單的計劃任務,每分鐘將時間打印到/tmp/log.txt中。能夠發現,Crontab工具使用起來並非至關複雜。
接下來,咱們聊一聊Crontab的基本組成。
Linux下一切皆文件。CROND 是一項系統服務,每分鐘都會從配置文件刷新定時任務,並執行計劃任務,它是以文件的形式設定定時任務。咱們上面使用到的Crontab工具,是用來對定時任務進行調整。
關於它的配置文件,也就是咱們上面案例中寫到的【*/1 * * * * date >> /tmp/log.txt】,有着必定的格式要求。
咱們再給出幾組例子,幫助理解格式
* 天天10:30重啓apache服務
30 10 * * * service httpd restart
* 每個月一、十、22日4:45重啓apache
45 4 1,10,22 * * service httpd restart
* 每個月1到10日4:45重啓apache
45 4 1-10 * * service httpd restart
* 每隔兩分鐘重啓apache服務
*/2 * * * * service httpd restart
* 每奇數分鐘重啓apache服務
1-59/2 * * * * service httpd restart
* 晚上11點到早上7點之間,每隔一小時重啓apache
0 23-7/1 * * * service httpd restart
* 天天18點到23點之間每隔30分鐘重啓apache
0-59/30 18-23 * * * service httpd restart 0,30 18-23 * * * service httpd restart
有特別注意:
一、Crontab共有秒,分鐘,小時,天,月,星期 五個域,出第三域和第五域之間執行的是「或」操做,其他都執行的是「與」操做。
二、命令行雙引號中使用%時,須要加反斜線 \
案例二:
計劃任務:四月的第一個星期天早晨1時59分運行a.sh
錯誤命令:
59 1 1-7 4 0 /root/a.sh
執行結果:四月的1-7號和四月的每一個周天的1:59都執行該命令
修 正:
59 1 1-7 4 * test `date +\%w` -eq 0 && /root/a.sh
關於Crontab工具的使用,咱們只須要掌握一條命令加四個選項就足夠。
[root@localhost ~]# crontab --help crontab: invalid option -- '-' crontab: usage error: unrecognized option usage:crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context)
-u:指定計劃任務分配的用戶,默認是當前登陸用戶
-e:編輯計劃任務
-l:列出用戶的計劃任務
-r:刪除用戶的計劃任務
細心的話能夠注意到這裏有-u選項,代表咱們能夠指定計劃任務的全部者。
案例三:
多用戶同時設定定時任務
這就是Crontab工具的一些基本功能,關於Crontab,還有很重要的一點,它的配置文件。
在 /etc 目錄下:
[root@localhost ~]# cd /etc [root@localhost etc]# ls cron* cron.deny crontab cron.d: 0hourly raid-check sysstat cron.daily: cups logrotate makewhatis.cron mlocate.cron prelink readahead.cron tmpwatch cron.hourly: 0anacron cron.monthly: readahead-monthly.cron cron.weekly:
-1>打開文件 crontab<這是Crontab的全局配置文件>
在該全局的配置文件中也能夠添加新的系統級別的計劃任務。(須要指定用戶)
- */1 * * * * root echo 「root->cron/crontab」
MAILTO表示的是計劃任務改變以後生成日誌的發送對象。
-2>進入配置文件cron.d
- cd cron.d - ls - cat sysstat
crontab 在載入配置文件的過程當中,會把sysstat文件中的配置信息載入成root用戶的計劃任務。
但crontab -e 修改內容,不會改變sysstat配置文件中的信息。直接修改sysstat配置文件中的信息,不會直接載入到crontab中,可使用命令
crontab sysstat
將配置文件中的內容導入crontab中。這會覆蓋原來crontab -e中的所有內容
-3>
/etc/cron.d/sysstat 文件中有註明的用戶名,在目錄 /etc/cron.d 下的全部文件,均可以認爲是系統配置文件的補充。
也能夠在該目錄下本身建立文件,寫相應的計劃任務,一樣須要註明用戶。不須要載入,就能夠執行該計劃,並且該計劃並無放到 crontab -l -u user中。所以說明,crontab工具不能夠編輯系統級別的計劃任務。
-4>補充
crontab -e寫入的定時任務,以及crontab -l列出的定時任務,保存在文件 /var/spool/mail/」user」文件中.不一樣用戶對應不一樣的子文件夾
cat /var/spool/mail/root
----------------------------------------------------------------------------------------------
Crontab到這裏基本已經結束了,這裏還有最後一個問題。
Crontab最小隻能設置到每分鐘執行一次命令,若是想半分鐘執行某個命令怎麼作的?
Linux下有條系統命令 sleep,可讓程序中止一段時間,如何經過這條系統命令實現小於一分鐘的定時任務呢?
案例四:
計劃任務:每半分鐘執行一次 將date打印到/tmp/date.log
執行命令:
*/1 * * * * date >> /tmp/date.log */1 * * * * sleep 30s;date >> /tmp/date.log
-------muhuizz整理