站長資訊網
        最全最豐富的資訊網站

        Linux shell編程之控制腳本之定時運行

        目錄

        控制腳本之定時運行

        ①cron時間表(系統不關機情況下)

        ②與cron相關的文件和目錄

        ③anacron

        ④crontab定時任務

        定時任務實戰

        ①cron時間表(系統不關機情況下)

        >>>Linux使用cron程序(通過檢查cron時間表)來計劃要定期執行的腳本

        >>>每個用戶(包括root)都有自身的cron時間表,Linux提供了crontab命令來處理時間表

        >>>默認不存在,使用crontab命令來創建計劃任務,將任務寫入文件,寫入時會檢查語法格式是否正確

        >>>當系統進行系統初始化時,cron從/etc/init.d中啟動

        >>>cron進程會去搜索/var/spool/cron目錄下的crontab文件,并將其加載到內存中

        [root@localhost ~]# ll /var/spool/cron

        total 8

        -rw——-. 1 bei bei 27 Sep 26 01:50 bei

        -r——–. 1 root root 40 Aug 6 04:48 root

        >>>cron進程還會去搜索/etc/anacrontab(天周月相關文件)和/etc/cron.d目錄下的文件(小時相關文件)

        >>>定時任務運行時與命令行的環境變量不一樣

        cron有兩種方式可以檢查cron tables的變化

        >>>檢查對應的定時任務文件的modtime

        >>>使用inotify:啟動守護進程后,inotify會被記錄到/var/log/cron這個日志文件中

        cron時間表格式(時間戳 user-name command to be executed)

        時間戳每個字段如下(建議都用數字表示)

        field時間戳

        minute

        hour

        day of month

        month

        day of week

        allowed values

        0-59

        0-23

        1-31

        1-12 or jan、feb、mar…

        0-6 or sun、mon、tue …

        # 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

        說明

        >>>每個字段可能包含星號 * ,表示"first-last"

        >>>每個字段允許用數字范圍表示的,范圍是指用連字符“-”分隔的兩個數字,注意是閉區間

        例:"0-6"表示的是:0,1,2,3,4,5,6

        想要表示一組數字或范圍,可以用列表,用逗號","分隔的一組數字("1,2,3,4,5"或"10-12,15-17,19-21")

        但是,使用英文前三個字母表示的時候,不能用"-"表示一個范圍

        >>>步長值可與范圍結合使用"/"

        在范圍后面帶有"/",表示在范圍內跳過的數字的值

        例:天數取“1-31/2”,表示1,3,5……,29,31,即只取每個月的單數天

        >>>使用名稱表示字段時,不允許使用范圍或列表方式(只能一個名稱)

        >>>第六個字段,指定要運行的命令,直到遇到換行符或%符號(當需要用到%用轉義)

        >>>命令執行的日期可以在兩個字段:day of month和day of week指定,如果兩個字段都收到限制,當任一字段與當前時間匹配,則認為當前時間應該被執行,

        例:"0 0 1,15 * 0"表示每個月的1號,15號和每個星期日的00:00是定時時間

        ②與cron相關的文件和目錄

        >>>/etc/crontab文件:系統級別的定時任務,只有root可以修改

        該文件默認情況下是空的,常用于運行每日、每周、每月的作業

        文件內容如下:

        SHELL=/bin/bash

        PATH=/sbin:/bin:/usr/sbin:/usr/bin #系統級別定時任務和系統的環境變量是不一樣的

        MAILTO=root

        HOME=/

        # For details see man 4 crontabs

        >>>/etc/cron.d

        這個目錄的作用是每小時運行/etc/cron.hourly的定時任務

        ③anacron

        >>>解決機器不連續工作,定時任務過期問題,當服務器不連續工作,重新啟動就回去運行之前定時任務未執行的作業

        >>>/etc/cron.d 每小時會執行一次anacron

        >>>anacron以天為單位,當天的定時任務不會運行

        >>>使用-s選項,只有當上一次作業結束,才會運行下一個作業

        >>>時間戳存在/var/spool/anacron目錄

        ④crontab定時任務

        >>>crontab命令是用于創建、刪除或列出用于服務cron守護程序表的程序

        >>>crontab創建的定時任務存放在/var/spool/cron目錄下(用戶無法編輯,只能用crontab命令去編輯)

        [root@localhost ~]# ls -al /var/spool/cron

        total 16

        drwx——. 2 root root 4096 Sep 27 00:35 .

        drwxr-xr-x. 13 root root 4096 Jun 24 10:46 ..

        -rw——-. 1 bei bei 27 Sep 26 01:50 bei

        -r——–. 1 root root 40 Aug 6 04:48 root

        [root@localhost ~]#

        [root@localhost ~]# ls -al /usr/bin/crontab

        -rwsr-xr-x. 1 root root 51784 Aug 23 2016 /usr/bin/crontab

        說明:用戶無法編輯是因為沒有對/var/spool/cron這個目錄的寫權限,

        用戶可以用crontab命令去編輯/var/spool/cron目錄下自己的文件,是因為/usr/bin/crontab有suid權限

        當/usr/bin/crontab被啟動為一個進程,用戶就擁有了屬主root的權限去創建,修改,刪除自己的定時任務了

        >>>對于不同用戶。可以設置/etc/cron.allow和/etc/cron.deny,去禁止某些用戶使用定時任務

        這兩個文件只用其中一個,若兩個文件不存在,則是有root可以用定時任務

        命令格式:crontab [-u user] 【-e | -l | -r】

        命令

        描述

        -u

        root指定操作哪個用戶的文件

        -e

        編輯某個用戶crontab文件內容

        -l

        列出某個用戶crontab文件內容

        -r

        刪除某個用戶crontab文件內容

        -i

        交互式確認刪除crontab文件

        定時任務實戰

        >>>每分鐘執行一次 commands

        * * * * * commands

        >>>每小時的第3和第15分鐘執行 commands

        3,15 * * * * commands

        >>>在上午的8點到11點的第3和第15分鐘執行 commands

        3,15 8-11 * * * commands

        >>>每隔一天的上午8點到11點的第3和第15分鐘執行 commands

        3,15 8-11 */2 * * commands

        >>>每周一上午8點到11點的第3和第15分鐘執行 commands

        3,15 8-11 * * 1 commands

        >>>每晚的21:30重啟networking

        30 21 * * * /etc/init.d/networking restart

        >>>每月1,20,22的的4.45重啟networking

        45 4 1,20,22 * * /etc/init.d/networking restart

        >>>每周六、日的01:10重啟networking

        10 1 * * 0,6 /etc/init.d/networking restart

        >>>每天18:00至23:00之間每隔30分鐘重啟networking

        0,30 18-23 * * * /etc/init.d/networking restart

        思考題:如何在每個月的最后一天中午12:00執行commands

        0 12 * * * if [ `date +%d -d tomorrow` -eq 1 ];then commands;fi

        說明:這里使用if-then語句,用來判斷明天是不是1號,若是1號,則執行commands

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲精品国产精品国自产观看| 国产精品亚韩精品无码a在线| 久久99精品久久久久久久久久| 九九久久精品国产| 国产精品亚洲专区在线观看| 热久久国产欧美一区二区精品| 91精品国产福利在线观看| 国产精品日韩AV在线播放| 亚洲精品无码久久久久久| 久久精品国产亚洲7777| 97久久精品人人做人人爽| 好吊妞视频精品| 2020亚洲男人天堂精品| 久久久国产乱子伦精品作者| 无码人妻精品一区二区蜜桃AV| 国产精品JIZZ在线观看老狼| 国产精品视频一区二区三区经| 精品无码国产一区二区三区51安| 亚洲精品国产高清嫩草影院 | 欧美精品福利在线视频 | 国产观看精品一区二区三区 | 国产精品成人一区二区| 亚洲欧美日韩精品永久在线| 精品久久香蕉国产线看观看亚洲 | 老年人精品视频在线| 成人午夜精品久久久久久久小说| 国产成人精品日本亚洲专一区| 久久精品无码一区二区无码 | 精品久久久久一区二区三区| 99久久精品九九亚洲精品| 久久er热视频在这里精品| 999国内精品永久免费视频| 国产一精品一AV一免费| 精品乱码久久久久久久| 精品福利一区二区三区免费视频| 精品人妻人人做人人爽| 国产精品久久午夜夜伦鲁鲁| 97久久超碰国产精品2021| 国产精品999| 青青草精品视频| 国产69精品久久久久99尤物|