• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

cron 计划任务子系统

cron 计划任务 子系统

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

一、cron基础

[root@jeson ~]# ps aux |grep cron |grep -v 'grep'
root      56130.00.01172041376?Ss09:360:01 crond
root      68120.00.019396976?Ss10:010:00/usr/sbin/anacron -s

crond进程每分钟检查一次,以运行相应的任务
crond日志文件/var/log/cron

二、系统级的计划任务  
更新whatis数据库
日志定期轮转
清理/tmp,/var/tmp
收集系统的状态信息

定义方式一:

[root@jeson ~]# vim /etc/crontab
*****         root      	ls
0****         root      	ls
02***        	root      	ls
021**         root     /mysql_back.sh
0213*         jack      	run-parts /cron-test

定义方式二:

[root@jeson ~]# ls /etc/cron.hourly/0anacron
========================================================
anacron:/etc/anacrontab
[root@jeson ~]# vim /etc/anacrontab
#period in days   delay in minutes   job-identifier   command15       cron.daily              	nice run-parts /etc/cron.daily
725      	cron.weekly             nice run-parts /etc/cron.weekly
@monthly45     cron.monthly            	nice run-parts /etc/cron.monthly

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

[root@jeson ~]# ls /etc/cron.daily00
webalizer  cups       makewhatis.cron  prelink         rhsmd
certwatch    logrotate  mlocate.cron     readahead.cron  tmpwatch
[root@jeson ~]# ls /etc/cron.weekly/
[root@jeson ~]# ls /etc/cron.monthly/
readahead-monthly.cron

========================================================

三、用户级的计划任务

[root@jeson ~]# crontab -e	//创建计划任务*****/bin/ls
[root@jeson ~]# crontab -l	//查看计划任务*****/bin/ls
[root@jeson ~]# ls /var/spool/cron/
root
[root@jeson ~]# cat /var/spool/cron/root *****/bin/ls
[root@jeson ~]# tail /var/log/cron    	//查看日志[root@jeson ~]# 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. 每天备份的文件名包含当天的日期,如2014-11-09_etc.tar.gz
4. 计划任务执行时,屏幕不产生任何输出 &>/dev/null
5. 只保留最近5天的备份 find /var/back -mtime +5 |xargs rm -rf

1. 编写脚本
[root@jeson ~]# 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

#方式三

#!/bin/sh#Back /etc files
backdir=/opt/backup
backfilename=$(date +%F_etc.tar.gz)
 #if[!-d ${backdir}]then
    echo "${backdir} is not exist!"
    mkdir -p ${backdir}else
   tar -czvf ${backdir}/${backfilename}/etc
fi#
find ${backdir}+5-exec rm -rf {} \;

2. 手动测试脚本

[root@jeson ~]# chmod a+x /root/back.sh
[root@jeson ~]# chattr +i /root/back.sh       \\lsattr
[root@jeson ~]# /root/back.sh 
[root@jeson ~]# ll /var/back/
总计11720-rw-r--r--1 root root 1198470909-1417:592014-01-16_etc.tar.gz
[root@jeson ~]# date 
01171200 
[root@jeson ~]# /root/back.sh 
[root@jeson ~]# ll /var/back/
-rw-r--r--1 root root 1198470909-1417:592014-01-16_etc.tar.gz
-rw-r--r--1 root root 1198470909-1512:002014-01-17_etc.tar.gz

3. 配置cron执行脚本

[root@jeson ~]# crontab -e
0 4 * * */root/back.sh 
[root@jeson ~]# crontab -l 
0 4 * * */root/back.sh 

4. 测试cron

[root@jeson ~]# date
20130922星期日04:00:16 CST
[root@jeson ~]# ll /var/back/
-rw-r--r--1 root root 1198470909-2204:002013-09-22_etc.tar.gz
[root@jeson ~]# tail /var/log/cron
Sep2012:03:01 jeson crond[5873]:(alice) CMD (ls)Sep2012:03:42 jeson crontab[5870]:(root) REPLACE (root)Sep2012:03:42 jeson crontab[5870]:(root) END EDIT (root)Sep2012:03:46 jeson crontab[5880]:(root) LIST (root)Sep2012:04:01 jeson crond[5882]:(alice) CMD (ls)Sep2012:05:01 jeson crond[5895]:(alice) CMD (ls)Sep2204:00:20 jeson crond[5909]:(alice) CMD (ls)Sep2204:00:20 jeson 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

========================o================================
练习:用一个实验测试将/etc/init.d/crond 服务关闭后,测试对计划任务的影响。

cron 计划任务子系统

Pingbacks已打开。

引用地址

暂无评论

发表评论