一、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. (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题

    完美解决 Android WebView 文本框获取焦点后自动放大问题 前几天在写一个项目时,要求在项目中嵌入一个WebView 本来很快就完成了,测试也没有问题.但发给新加坡时,他们测试都会出现文本 ...

  2. JavaFX 之窗口大小自由拉伸(四)

    一.问题场景 同样的,隐藏掉窗体的默认标题栏也会导致窗体大小自由拉伸功能的失效. 二.解决思路 判断鼠标在窗体的位置,改变鼠标样式,给窗体组件添加拖拽事件监听器,根据鼠标移动位置改变窗体大小. 三.代 ...

  3. python3api-ms-win-crt-runtime-l1-1-0.dll丢失解决方法

    先记录一个之前遇到的问题: 在安装了pycharm后,发现 通过上网发现,其实就是没有安装pip和setuptools,其实 Python3以后都是默认安装pip的,所以最后的解决办法是将我目前的Py ...

  4. C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码

    实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...

  5. LWIP在STM32实现

    http://www.openedv.com/posts/list/25178.htm

  6. 使用CSS3 Flexbox布局

    Flexbox(中文版本可以点击这里)的布局是一个用于页面布局的全新CSS3模块功能.它可以把列表放在同一个方向(从左到右或从上到下排列),并且让这些列表能延伸到占用可用的空间.较为复杂的布局可以通过 ...

  7. 5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、

    location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID ...

  8. bbbbb

  9. 用VIM设置UTF-8编码的BOM标记

    1.去掉BOM标记: :set nobomb 2.加上BOM标记: :set bomb 3.查询当前UTF-8编码的文件是否有BOM标记: :set bomb? 4.更高级一点的: :%!xxd &q ...

  10. python学习——练习题(7)

    """ 题目:将一个列表的数据复制到另一个列表中. """ import copy def validate(a, b): "&q ...