八 任务计划管理
任务计划管理
作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
一、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
二、系统级的计划任务
更新whatis数据库 日志定期轮转 清理/tmp,/var/tmp 收集系统的状态信息 ... 分时天月周
# 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
三、用户级的计划任务
# 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整
1、练习:备份etc目录
要求:
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 {} \;
-
第二种版本
#!/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
执行频率 延时 描述 执行的任务
2、 让任务实现秒级执行
#通过计划任务实现
每隔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