Linux計劃任務之_Crontab

    提及計劃任務,相信你們都應該聽過,其實就是給個人計算機設置定時任務,指定時間內去執行相應的操做。linux

    熟悉windows的朋友都知道,windows下有一項系統功能叫計劃任務程序,咱們能夠經過界面設定在Windows環境下的計劃任務。數據庫

wKioL1gaoA7ATHztAAFwjoUQZiQ896.png    今天咱們不談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的基本組成。

wKiom1gapanT8rOVAAAusTHYmD4656.png


    Linux下一切皆文件。CROND 是一項系統服務,每分鐘都會從配置文件刷新定時任務,並執行計劃任務,它是以文件的形式設定定時任務。咱們上面使用到的Crontab工具,是用來對定時任務進行調整。

    關於它的配置文件,也就是咱們上面案例中寫到的【*/1 * * * * date >> /tmp/log.txt】,有着必定的格式要求。

wKiom1gapzPwrwz_AAAahguI65A026.png

    咱們再給出幾組例子,幫助理解格式

    * 天天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選項,代表咱們能夠指定計劃任務的全部者。

    案例三: 

多用戶同時設定定時任務


wKioL1gargjCZBLuAABKiBiquVQ058.png


    這就是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:

wKioL1garAiyP234AACBBQZw8yA785.png

    -1>打開文件 crontab<這是Crontab的全局配置文件>

wKiom1gaqffRO_XgAAAakvHx2S4946.png

在該全局的配置文件中也能夠添加新的系統級別的計劃任務。(須要指定用戶)

- */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整理

相關文章
相關標籤/搜索