crontab学习笔记
一、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的命令格式
参数:
-u:帮其他用户建立/删除crontab,只有root用户才能执行
-e:编辑crontab的任务内容
-l:查crontab的任务内容
-r:删除crontab的任务内容
实际上crontab命令的效果是作用在用户的任务记录文件里的。
4.关于任务记录文件的含义
从上面的描述我们可以知道,当一个用户(譬如jim)执行:
的时候,实际上他相当于用vi打开并编辑他的任务记录文件/var/spool/cron/jim,这个文件的每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
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私房菜_基础学习篇》(第二版)
(完)
crontab学习笔记的更多相关文章
- Linux定时任务Crontab学习笔记
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond ...
- Linux计划任务Crontab学习笔记
1 http://www.jb51.net/LINUXjishu/345698.html 2 http://www.jb51.net/LINUXjishu/345705.html 3 http: ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- [原创] linux课堂-学习笔记-目录及概况
本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- Hadoop学习笔记01_Hadoop搭建
想往大数据方向转, 难度肯定是有的. 基础知识肯定是要有的,如果是熟悉JAVA开发的人,转向应该优势大. 像我这样的,只有Linux基础以及简单的PHP基础的人,转向难度很大.但是事在人为,努力学习多 ...
- Linux 学习笔记之超详细基础linux命令 Part 13
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...
- Linux命令学习笔记目录
Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
随机推荐
- Sql Server 2012 存储过程的调试
[一]Sql Server 关于存储过程调试SQL2000是在查询分析器中的对象浏览器中选中需要调试的存储过程,右键----调试---输入参数开始调试.sqlserver2008中则完全不同,变成了必 ...
- shell中date命令对month进行加减操作的bug
shell脚本中如何取上个月的月份呢?很容易能想到下面的命令: date +%Y%m -d '-1 month' 或者 date +%Y%m -d 'last month' 在大部分情况下这个命令 ...
- elasticSearch Java Spring Data Api
1. BoolQueryBuilder qb=QueryBuilders. boolQuery(); qb.should(QueryBuilders.matchQuery("keyWord& ...
- Hibernate学习11——配置Hibernate二级缓存
一.缓存的概念: 以空间换时间: 二.Hibernate缓存的分类: 前面我们讲的缓存都是session缓存:也叫一级缓存:get,load等缓存都是内置的,一级缓存: SessionFactor ...
- mysql命令之二:查看mysql版本的四种方法
1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-l ...
- Jetty实战(杂七杂八)
最近开始选择JETTY作为服务器了,乘这现在空闲点学习了些JETTY的部署知识,原来她真的跟TOMCAT很类似,先总结如下: 部署应用方法(下载好jetty); 方法一: 直接将应用的 war包放在j ...
- 转:Ubuntu下下载工具安装--uget+aria2
原文地址:http://burner1024.blog.163.com/blog/static/17447800420126191858424/ Windows下的下载工具--迅雷,之所以下载速度快, ...
- 分享Axure RP8.0激活码一份
用户名:aaa 注册码:2GQrt5XHYY7SBK/4b22Gm4Dh8alaR0/0k3gEN5h7FkVPIn8oG3uphlOeytIajxGU
- 修改tomcat端口后不能IP访问问题
当tomcat端口被修改以后使用IP访问会发生404的问题,只能通过localhost进行访问,当别人想访问你tomcat下的工程时就会访问失败,此时修改eclipse下的tomcat中的server ...
- Python Tkinter参考资料之(通用控件属性)
大部分控件的共享选项: 选项(别名) 说明 单位 典型值 没有此属性的控件 background(bg) 当控件显示时,给出的正常颜色 color 'gray25''#ff4400' border ...