cront计划任务的详细讲解

cron 计划任务 

作用:  计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据

一、cron基础


   [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
=================================================

cront计划任务的详细讲解cront计划任务的详细讲解

二、系统级的计划任务  
   更新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
===================================================
三、用户级的计划任务
   [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
 

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


========================================================
案例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/


   -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)
========================================================
扩展知识点: 让任务实现秒级执行
一、通过计划任务实现
   每隔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   


上一篇:【定时任务】cron表达式在线生成器怎么用?


下一篇:后门原理与实现-20181224