cront計劃任務的詳細講解

cron 計劃任務 
mysql

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

web

1、cron基礎sql


   [root@ys ~]# ps aux |grep cron |grep -v 'grep'
   root      5613  0.0  0.0 117204  1376 ?        Ss   09:36   0:01 crond
   root      6812  0.0  0.0  19396   976 ?        Ss   10:01   0:00 /usr/sbin/anacron -s
   crond進程每分鐘檢查一次,以運行相應的任務
   crond日誌文件/var/log/cron
=================================================數據庫

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

2、系統級的計劃任務  
   更新whatis數據庫 ;日誌按期輪轉 ; 清理/tmp,/var/tmp;收集系統的狀態信息...

定義方式一:
   [root@ys ~]# vim /etc/crontab
   *  *  *  *  *         root       ls
   0  *  *  *  *         root       ls
   0  2  *  *  *         root       ls
   0  2  1  *  *         root     /mysql_back.sh
   0  2  1  3  *         jack       run-parts /cron-test

定義方式二:
   [root@ys ~]# ls /etc/cron.hourly/
   0anacron

anacron:  /etc/anacrontab
[root@wang ~]# vim /etc/anacrontab
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily               nice run-parts /etc/cron.daily
7       25       cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45        cron.monthly             nice run-parts /etc/cron.monthly

anacron timestamp: /var/spool/anacron
[root@wang ~]# ls /var/spool/anacron/
cron.daily  cron.monthly  cron.weekly

[root@wang ~]# ls /etc/cron.daily
   00webalizer  cups       makewhatis.cron  prelink         rhsmd        
   certwatch    logrotate  mlocate.cron     readahead.cron  tmpwatch
[root@wang ~]# ls /etc/cron.weekly/
                                      
[root@wang ~]# ls /etc/cron.monthly/
   readahead-monthly.cron
===================================================
3、用戶級的計劃任務
   [root@wang ~]# crontab -e //建立計劃任務
   * * * * * /bin/ls
   [root@wang ~]# crontab -l //查看計劃任務
   * * * * * /bin/ls
   [root@wang ~]# ls /var/spool/cron/
   root
   [root@wang ~]# cat /var/spool/cron/root 
   * * * * * /bin/ls
 
vim

 [root@wang ~]# tail /var/log/cron     //查看日誌
   [root@wang ~]# crontab -u alice -e
===================================================
做業語法格式:
   # 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

   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整
   bash


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

1. 編寫腳本
   [root@wang ~]# vim /root/back.sh
   第一種版本
   tar -czf /var/back/`date +%F`_etc.tar.gz /etc   
   find /var/back -mtime +5 |xargs rm -rf

   第二種版本
   #!/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
     
   #刪除修改時間超過5天的文件
   cd ${back_dir}
   find . -mtime +5 |xargs rm -rf

2. 手動測試腳本
   [root@wang ~]# chmod a+x /root/back.sh
   [root@wang ~]# chattr +i /root/back.sh
   [root@wang ~]# /root/back.sh
   [root@wang ~]# ll /var/back/
   總計 11720
   -rw-r--r-- 1 root root 11984709 09-14 17:59 2017-01-16_etc.tar.gz
   [root@wang ~]# date 01171200
   [root@wang ~]# /root/back.sh 
   [root@wang ~]# ll /var/back/ide


   -rw-r--r-- 1 root root 11984709 09-14 17:59 2017-01-16_etc.tar.gz


3. 配置cron執行腳本
   [root@wang ~]# crontab -e
   0 4 * * * /root/back.sh 
   [root@wang ~]# crontab -l         
   0 4 * * * /root/back.sh 

4. 測試cron
   [root@wang ~]# date 09220359.50
   [root@wang ~]# date
   2013年 09月 22日 星期日 04:00:16 CST
   [root@wang ~]# ll /var/back/
   -rw-r--r-- 1 root root 11984709 09-22 04:00 2013-09-22_etc.tar.gz
   [root@wang ~]# tail /var/log/cron
   Sep 20 12:03:01 wang crond[5873]: (alice) CMD (ls)
   Sep 20 12:03:42 wang crontab[5870]: (root) REPLACE (root)
   Sep 20 12:03:42 wang crontab[5870]: (root) END EDIT (root)
   Sep 20 12:03:46 wang crontab[5880]: (root) LIST (root)
   Sep 20 12:04:01 wang crond[5882]: (alice) CMD (ls)
   Sep 20 12:05:01 wang crond[5895]: (alice) CMD (ls)
   Sep 22 04:00:20 wang crond[5909]: (alice) CMD (ls)
   Sep 22 04:00:20 wang crond[5912]: (root) CMD (/root/back.sh)
========================================================
擴展知識點: 讓任務實現秒級執行
1、經過計劃任務實現
   每隔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

2、經過程序實現
   # vim while01.sh
   #!/bin/bash
 測試

  while :
   do
           echo "ok"
           sleep 5 url

   done   pwa

相關文章
相關標籤/搜索