cron 计划任务 子系统
分类:linux基础 热度:

cron 计划任务 子系统
 
作用:  计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
========================================================
 
一、cron基础
[root@yunwei  ~]# 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
 
二、系统级的计划任务  
更新whatis数据库-----man -k 按关键字查找的时候会用到这个数据库
日志定期轮转-----------做日志切割
清理/tmp,/var/tmp
收集系统的状态信息
...
 
定义方式一:
[root@yunwei  ~]# 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@yunwei  ~]# ls /etc/cron.hourly/
0anacron
 
========================================================
anacron:  /etc/anacrontab
[root@yunwei  ~]# 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@yunwei  ~]# ls /var/spool/anacron/
cron.daily  cron.monthly  cron.weekly
 
[root@yunwei  ~]# ls /etc/cron.daily
00webalizer  cups       makewhatis.cron  prelink         rhsmd
certwatch    logrotate  mlocate.cron     readahead.cron  tmpwatch
[root@yunwei  ~]# ls /etc/cron.weekly/
                                       
[root@yunwei  ~]# ls /etc/cron.monthly/
readahead-monthly.cron
========================================================
 
三、用户级的计划任务
[root@yunwei  ~]# crontab -e //创建计划任务
* * * * * /bin/ls
[root@yunwei  ~]# crontab -l //查看计划任务
* * * * * /bin/ls
[root@yunwei  ~]# ls /var/spool/cron/
root
[root@yunwei  ~]# cat /var/spool/cron/root 
* * * * * /bin/ls
[root@yunwei  ~]# tail /var/log/cron     //查看日志
[root@yunwei  ~]# 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@yunwei  ~]# 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@yunwei  ~]# chmod a+x /root/back.sh
[root@yunwei  ~]# chattr +i /root/back.sh
[root@yunwei  ~]# /root/back.sh
[root@yunwei  ~]# ll /var/back/
总计 11720
-rw-r--r-- 1 root root 11984709 09-14 17:59 2014-01-16_etc.tar.gz
[root@yunwei  ~]# date 01171200
[root@yunwei  ~]# /root/back.sh 
[root@yunwei  ~]# ll /var/back/
-rw-r--r-- 1 root root 11984709 09-14 17:59 2014-01-16_etc.tar.gz
-rw-r--r-- 1 root root 11984709 09-15 12:00 2014-01-17_etc.tar.gz
 
3. 配置cron执行脚本
[root@yunwei  ~]# crontab -e
0 4 * * * /root/back.sh 
[root@yunwei  ~]# crontab -l        
0 4 * * * /root/back.sh 
 
4. 测试cron
[root@yunwei  ~]# date 09220359.50
[root@yunwei  ~]# date
2013年 09月 22日 星期日 04:00:16 CST
[root@yunwei  ~]# ll /var/back/
-rw-r--r-- 1 root root 11984709 09-22 04:00 2013-09-22_etc.tar.gz
[root@yunwei  ~]# tail /var/log/cron
Sep 20 12:03:01 yunwei  crond[5873]: (alice) CMD (ls)
Sep 20 12:03:42 yunwei  crontab[5870]: (root) REPLACE (root)
Sep 20 12:03:42 yunwei  crontab[5870]: (root) END EDIT (root)
Sep 20 12:03:46 yunwei  crontab[5880]: (root) LIST (root)
Sep 20 12:04:01 yunwei  crond[5882]: (alice) CMD (ls)
Sep 20 12:05:01 yunwei  crond[5895]: (alice) CMD (ls)
Sep 22 04:00:20 yunwei  crond[5909]: (alice) CMD (ls)
Sep 22 04:00:20 yunwei  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
========================================================
上一篇:存储管理(3) 下一篇:网络基础
猜你喜欢
各种观点
热门排行
精彩图文