八 任務計劃管理

任務計劃管理

做用: 計劃任務主要是作一些週期性的任務,目前最主要的用途是按期備份數據數據庫

1、cron基礎

# ps aux |grep cron |grep -v 'grep'
    root      3078  0.0  0.0   5632  1108 ?        Ss   08:44   0:00 crond
    # chkconfig crond --list
    crond           0:關閉  1:關閉  2:啓用  3:啓用  4:啓用  5:啓用  6:關閉

    crond進程每分鐘檢查一次,以運行相應的任務
    crond日誌文件/var/log/cron

2、系統級的計劃任務

更新whatis數據庫 日誌按期輪轉 清理/tmp,/var/tmp 收集系統的狀態信息 ... 分時天月周vim

# vim /etc/crontab
    01 * * * * root run-parts /etc/cron.hourly           //run-parts 後面是目錄
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    # ls /etc/cron.hourly/
    # ls /etc/cron.daily/           //下面都是一些腳本程序
    0anacron   cups        makewhatis.cron  prelink  rpm
    0logwatch  logrotate  mlocate.cron     rhsmd    tmpwatch
    # ls /etc/cron.weekly/
    0anacron  99-raid-check  makewhatis.cron
    # ls /etc/cron.monthly/
    0anacron

3、用戶級的計劃任務

# crontab -e        //建立計劃任務
    * * * * * /bin/ls
    # crontab -l            //查看計劃任務
    * * * * * /bin/ls
    # ls /var/spool/cron/
    root
    # cat /var/spool/cron/root 
    * * * * * /bin/ls
    # tail /var/log/cron        //查看日誌

    做爲root:
    # crontab -u alice -e



    時間表:
    *       *       *       *       *
    分      時       日       月       周
    0-59    0-23    1-31    1-12     1-7    0,7表示週日

    00 02 * * * ls        //天天2:00整
    00 02 1 * * ls      //每個月1號2:00整
    00 02 14 2 * ls        //每一年2月14號2:00整
    00 02 * * 7 ls      //每週日2:00整
    00 02 14 2 7 ls     //每一年2月14號2:00整  或者  每週日2:00整,這兩個時間都執行


    00 02 * * * ls        //天天2:00整
    * 02 * * * ls        //天天2:00中的每一分鐘
    * * * * * ls        //每分鐘執行ls
    * * 14 2 * ls        //2月14號的每分鐘


    */5 * * * * ls        //每隔5分鐘
    00 02 1,5,8 * * ls    //每個月1,5,8號的2:00整
    00 02 1-8 * * ls    //每個月1到8號的2:00整

一、練習:備份etc目錄bash

要求:
    1. 天天4:00備份/etc目錄到/var/back
    2. 將備份命令寫在腳本中,如/root/back.sh  加執行權限
    3. 天天備份的文件名包含當天的:日期,如2012-11-09.etc.tar.gz
    4. 計劃任務執行時,屏幕不產生任何輸出 &>/dev/null
    5. 只保留最近5天的備份 find /var/back -mtime +5 -exec rm -rf {} \;
  • 編寫腳本測試

    # vim /root/back.sh 
      tar -czf /var/back/`date +%F`.etc.tar.gz /etc       //將/etc目錄打包壓縮成/var/back/以日期命名的tar.gz包
      find /var/back -mtime +5 -exec rm -rf {} \;
  • 第二種版本url

    #!/bin/bash
      filename=`date +%F`_etc.tar.gz
      back_dir=/var/back
    
      #判斷備份文件存放目錄是否存在
      if [ ! -d $back_dir ];then
         mkdir -p $back_dir
      fi
    
      #備份
      tar -czf ${back_dir}/$filename /etc &>/dev/null
    
      #刪除修改時間超過2天的文件
      cd ${back_dir}
      find . -mtime +5 -exec rm -rf {} \;
    
      # chmod a+x back.sh
手動測試腳本
    # /root/back.sh                //運行備份腳本
    # ll /var/back/
    總計 11720
    -rw-r--r-- 1 root root 11984709 09-14 17:59 2013-09-14_etc.tar.gz

    能夠經過修改時間,繼續測試
    date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
    date -s 14:00                               //修改時間
    # date 09151200              //修改日期,格式:月日時分年.秒

    # /root/back.sh 
    # ll /var/back/
    總計 23440
    -rw-r--r-- 1 root root 11984709 09-14 17:59 2013-09-14_etc.tar.gz
    -rw-r--r-- 1 root root 11984709 09-15 12:00 2013-09-15_etc.tar.gz


    配置cron執行腳本

    [root@station230 ~]# crontab -e
    0 4 * * * /root/back.sh 
    [root@station230 ~]# crontab -l                 //查看計劃任務
    0 4 * * * /root/back.sh 

    測試:
            # date 09220359.50
            # date
            2013年 09月 22日 星期日 04:00:16 CST
            # ll /var/back/
            總計 11720
            -rw-r--r-- 1 root root 11984709 09-22 04:00 2013-09-22_etc.tar.gz

            # tail /var/log/cron
            Sep 20 12:03:01 yangs crond[5873]: (alice) CMD (ls)
            Sep 20 12:03:42 yangs crontab[5870]: (root) REPLACE (root)
            Sep 20 12:03:42 yangs crontab[5870]: (root) END EDIT (root)
            Sep 20 12:03:46 yangs crontab[5880]: (root) LIST (root)
            Sep 20 12:04:01 yangs crond[5882]: (alice) CMD (ls)
            Sep 20 12:05:01 yangs crond[5895]: (alice) CMD (ls)
            Sep 22 04:00:20 yangs crond[5909]: (alice) CMD (ls)
            Sep 22 04:00:20 yangs crond[5912]: (root) CMD (/root/back.sh)



    ====anacron====這個是「撿漏的」,就是出看天天的計劃任務有沒有執行,執行了就算了,沒執行就按照延時時間去執行
    # vim /etc/anacrontab 
    1       65      cron.daily              run-parts /etc/cron.daily
    7       70      cron.weekly             run-parts /etc/cron.weekly
    30      75      cron.monthly            run-parts /etc/cron.monthly
    執行頻率 延時    描述            執行的任務

二、 讓任務實現秒級執行pwa

#經過計劃任務實現

    每隔10秒執行命令date
    * * * * * date >/dev/pts/1
    * * * * * sleep 10; date >/dev/pts/1
    * * * * * sleep 20; date >/dev/pts/1
    * * * * * sleep 30; date >/dev/pts/1
    * * * * * sleep 40; date >/dev/pts/1
    * * * * * sleep 50; date >/dev/pts/1

    # 經過程序實現

    vim while01.sh
    #!/bin/bash        
    while :            
    do                
            echo "ok"        
            sleep 5        
    done
相關文章
相關標籤/搜索