Crond详解

来源:互联网 发布:网上购物商城源码 编辑:程序博客网 时间:2024/06/09 19:51

crond介绍

  crond是linux系统中定期执行命令或者指定程序任务的服务。一般情况,安装完操作系统,默认就会开启此服务,Crond会定期检查系统中是否有要执行的任务工作,如果有,便会根据与预先默认的规则执行该任务工作。
  linux任务调度可以大致分为两类:
  * 系统自身执行的工作:系统周期性执行的任务工作,如:轮询系统日志、备份系统数据、清理缓存
  * 用户执行的工作:某个用户定期要做的任务工作,例如每隔10分钟和互联网上的时间服务器进行时 间同步,每天晚上0点备份数据,一般此类任务需要用户自行设定

1.1指令语法

crontab [-u user] filecrontab [-u user] {-l | -e | -r}    

1.2指令说明

我们可以通过固定的时间间隔来完成指定的任务或者指定的shell脚本,时间间隔可以是分、时、日、月、周以上的任意组合,这个命令非常适合周期性的日志分析或者数据备份等工作。

1.3使用者权限文件

文件 说明 /etc/cron.deny 该文件中所列用户不允许使用crontab命令 /etc/corn.allow 该文件中所列用户允许使用crontab命令 /var/spool/corn 所有用户crontab文件存放目录,以用户名命名

1.4指令选项

参数名称 含义 指定实例 -l 显示用户crontab文件内容,l为list缩写 crontab -l -e 进入vi编辑用户crontab文件,e为edit缩写 crontab -e -i 删除crontab文件前确认提示 crontab -ri -r 从crontab目录中删除用户crontab文件 crontab -r -u user 指定使用者 crontab -u root -l

1.5 Contab文件详解

Crontab文件存放于/var/spool/cron中,文件名与用户一致。
Crontab文件总共分为7段,前5段分别为:分、时、日、月、周,第6段为用户,第7段为执行命令

*/5 * * * * root /touch /var/www/index.html

1.5.1 Crontab时间段含义表

段 含义 取值范围 第一段 代表分钟 0-59 第二段 代表小时 0-23 第三段 代表日期 1-31 第四段 代表月份 1-12 第五段 代表星期几 0-6 注意:0和7都代表星期一

1.5.2特殊字符含义如下表

特殊符号 含义 * 代表任意时间,如:0 23 * * * command 表示无论每天的23:00都执行任务 - 代表分隔符表示一个时间范围段,如:17-19点,每小时的00分执行任务。00 17-19 * * *command , 逗号,表示分割时段的意思。30 20,21,22 * * *command 每天的20点半,21点半和22点半执行 /n n代表数字,意思是每隔n单位事件执行一次,例如:每隔5分钟执行一次, /5 * * * command

1.6 生产环境写法

#每天早上6点
0 6 * * * echo “Good morning.” >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

#每两个小时
0 /2 * * echo “Have a break now.” >> /tmp/test.txt

echo ‘* * * * * /bin/sh /home/keep/echo.sh > /dev/null 2>&1’ >> /var/spool/cron/root

注意:①在任务上写入注释
   ②执行脚本前先确定脚本有执行权限
   ③在生产环境中分钟尽量不要出现*的情况,这样代表每分钟都要执行
   ④指定任务命令的结尾最好加上 >/dev/null 2>&1等内容,如果需要打印出日志,可以追加到
    指定的日志里不推荐留空这种不专业的做法,其中/dev/null为特殊设备,表示黑洞设备或空设备。
    1代表标准输出,2代表错误信息输出,2>&1使标准错误和标准输出一样 
    本命令是将脚本内容输出重定向到/dev/null,即不记录任何输出,也不给系统发邮件。  

#1.创建一个脚本echo.sh在脚本中写入命令touch /home/keep/echo.shecho 'echo + >> /home/keep/keep.log' >> /home/keep/echo.sh# 2.在cront文件中直接写入脚本,注意脚本权限echo '* * * * * /bin/sh /home/keep/echo.sh > /dev/null 2>&1' >> /var/spool/cron/root# 3.打印命令,使用tab按键上面的标签包裹如下echo `date`