一、crond与crontab简介

在Linux系统中,循环运行的例行性计划任务,是由 cron (crond) 这个系统服务来控制的,而crontab命令则被用来提交和管理用户的需要周期性执行的任务。一般来说,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

Linux下的任务调度分为两类:用户任务调度和系统任务调度。

二、用户任务调度

1. 使用者权限文件

一般来说,在系统上每个用户都能建立自己的例行性计划任务,但是为了安全,我们能通过两个文件来限制一些用户建立例行性任务。

1)/etc/cron.allow:该文件中所列用户允许使用crontab命令

2)/etc/cron.deny:该文件中所列用户不允许使用crontab命令

/etc/cron.allow文件比/etc/cron.deny要优先,不过一般只留一个文件来限制用户的权限,系统默认保留/etc/cron.deny。

2. 其他例行性任务相关文件

1)/var/spool/cron/:当用户使用crontab命令建立任务之后,这项任务就会被记录到/var/spool/cron/目录中以用户名命名的文件,如用户jim的任务记录就在/var/spool/cron/jim这个任务记录文件里。

2)/var/log/cron:cron执行的每一项任务都会记录到这个文件里,可以通过查看这个文件来查看是否被植入木马。

3.crontab的命令格式

crontab [-u username] [-l|-e|-r]
参数:
-u:帮其他用户建立/删除crontab,只有root用户才能执行
-e:编辑crontab的任务内容
-l:查crontab的任务内容
-r:删除crontab的任务内容

实际上crontab命令的效果是作用在用户的任务记录文件里的。

4.关于任务记录文件的含义

从上面的描述我们可以知道,当一个用户(譬如jim)执行:

crontab -e

的时候,实际上他相当于用vi打开并编辑他的任务记录文件/var/spool/cron/jim,这个文件的每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”,中间不能有空格
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

编写命令时,最好使用绝对路径,这样不会找不到执行文件。如果想删除一项工作,必须使用crontab -e去编辑,如果想删除全部任务才使用crontab -r。

三、系统任务调度

我们知道“crontab -e”是针对用户的任务调度来设计的,如果是系统任务调度,则需要直接编辑/etc/crontab文件。这个文件的内容如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/ # For details see man crontabs # Example of job definition:
# .---------------- minute ( - )
# | .------------- hour ( - )
# | | .---------- day of month ( - )
# | | | .------- month ( - ) OR jan,feb,mar,apr ...
# | | | | .---- day of week ( - ) (Sunday= or ) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

前四行是用来配置crond任务运行的环境变量:

  • SHELL:指定了系统要使用的shell
  • PATH:执行文件的搜索路径
  • MAILTO:当任务命令发生错误或者执行结果又标准出或者标准错误时,会将这些信息发给谁,这里默认是由系统直接发一封邮件给root,不过由于root无法通过客户端之类的方式收信,所以通常可以把这个电子邮件改成自己的账号,如MAILTO=harry@my.host.name
  • HOME:指定了在执行命令或者脚本时使用的主目录

后面才是具体的任务内容,从注释中,我们可以看到这里的写法是:

*  *  *  *  * user-name command

可以看到与用户任务不同的是,多了一个user-name,它表示执行这个任务的用户。

一般来说,linux下面的crond进程会每分钟重新读取一次/etc/crontab,但是由于某些原因或者在其他unix系统中,crontab是读到内存中的,则需要在修改完这个文件之后重新启动crond任务。

四、实例

实例1:每1分钟执行一次command

* * * * * command

实例2:每小时的第3和第15分钟执行

, * * * * command

实例3:在上午8点到11点的第3和第15分钟执行

, - * * * command

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

, - */ * * command

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

, - * *  command

实例6:每晚的21:30重启smb

  * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

  ,, * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

  * * , /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

, - * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

  * *  /etc/init.d/smb restart

实例11:每一小时重启smb

* */ * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* -/ * * * /etc/init.d/smb restart

实例13:每月的4号与每周一到周三的11点重启smb

   * mon-wed /etc/init.d/smb restart

实例14:一月一号的4点重启smb

   jan * /etc/init.d/smb restart

实例15:每小时执行/etc/cron.hourly目录内的脚本

   *   *   *   *     root run-parts /etc/cron.hourly

说明:这里多了run-parts这个参数,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

六、小结

例行性计划任务,其实最重要的是分清系统任务调度和用户任务调度这两种类型,然后了解各自的运行原理,对不用的任务根据情况选择不同的类型去编写任务计划。

七、参考

每天一个linux命令(50):crontab命令

《鸟哥的Linux私房菜_基础学习篇》(第二版)

(完)

crontab学习笔记的更多相关文章

  1. Linux定时任务Crontab学习笔记

    crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond ...

  2. Linux计划任务Crontab学习笔记

    1  http://www.jb51.net/LINUXjishu/345698.html 2  http://www.jb51.net/LINUXjishu/345705.html 3  http: ...

  3. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  4. [原创] linux课堂-学习笔记-目录及概况

    本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分 ...

  5. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  6. Hadoop学习笔记01_Hadoop搭建

    想往大数据方向转, 难度肯定是有的. 基础知识肯定是要有的,如果是熟悉JAVA开发的人,转向应该优势大. 像我这样的,只有Linux基础以及简单的PHP基础的人,转向难度很大.但是事在人为,努力学习多 ...

  7. Linux 学习笔记之超详细基础linux命令 Part 13

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...

  8. Linux命令学习笔记目录

    Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...

  9. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

随机推荐

  1. kbuild-(directory)

    -INDEX - this file: info on the kernel build process kbuild.txt - developer information on kbuild kc ...

  2. Spring Boot和Spring cloud

    微服务框架SpringBoot简单验证 首先摘录部分IBM网站部分内容对框架做一个简单说明 http://www.ibm.com/developerworks/cn/java/j-lo-spring- ...

  3. SAE部署Django1.6+MySQL

    [解决]SAE部署Django1.6+MySQL 终于可以舒口气了,今天大部分时间都在搞这个,很是蛋疼,网上资料良莠不齐,我不信这个之前没人做过,但是他们确实分享的不够好. 废话不多说,还是记录一下今 ...

  4. 怎么使用ping命令进行连通性测试

    关于ping命令的作用: ping 命令有助于验证网络层的连通性!一般进行网络故障排除时,可以使用ping 命令向目标计算机或IP地址发送ICMP回显请求,目标计算机会返回回显应答,如果目标计算机不能 ...

  5. POJ 3061 Subsequence(尺取法)

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18145   Accepted: 7751 Desc ...

  6. CentOS下j2ee环境搭建

    转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/01/2994485.html 因为是做j2ee后台开发的,所以在Linux上搭建 ...

  7. Whoops, looks like something went wrong

    Whoops, looks like something went wrong. 这是由于访问laravel项目报错的,解决几种可能出现的错误. 1)打开:D:\java\wamp\www\subwa ...

  8. 实例演示oracle数据块状态视图v$bh的用法二 热点块问题(转)

    在实例一中,我们读取到了x$bh中的tch字段,该字段表示的该字段被读取/写入的次数,这个值在oracle的LRU算法中,是一个重要的参数,如果这个字段被访问,则该值就会增加: 1,第一次查看TCH的 ...

  9. module解析过程

    加载一个核心模块时 直接require('模块名')即可 加载一个文件模块时 直接require('绝对路径/相对路径')即可,可省略文件后缀.js. 因为如果文件不存在,将试图找文件名.js的文件 ...

  10. 28_java之mysql的CRUD

    01数据库概念 * A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据 ...