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, ...
随机推荐
- RK3288 指令查看LCD分辨率
通过下面指令可以查看当前系统设置的分辨率. root@xxx:/ # cd sys/class/graphics/fb0 cd sys/class/graphics/fb0 root@xxx:/sys ...
- string源码分析 ——转载 http://blogs.360.cn/360cloud/2012/11/26/linux-gcc-stl-string-in-depth/
1. 问题提出 最近在我们的项目当中,出现了两次与使用string相关的问题. 1.1. 问题1:新代码引入的Bug 前一段时间有一个老项目来一个新需求,我们新增了一些代码逻辑来处理这个新需求.测试阶 ...
- Java里的常用运算符及其优先级顺序
知道了八种基本数据类型后,在使用中弄清运算符的优先级是很有必要的.具体如下图: 这里需要注意的是,强制类型转换的优先级是位于乘除前面而处于单目运算符后面的,这是比较容易出错的地方.比如用Math.R ...
- codechef January Challenge 2017 简要题解
https://www.codechef.com/JAN17 Cats and Dogs 签到题 #include<cstdio> int min(int a,int b){return ...
- JavaScript Promise启示录--(转)
本博文转至:http://www.csdn.net/article/2014-05-28/2819979-JavaScript-Promise [编者按]JavaScript是一种基于对象和事件驱动并 ...
- Java 父类、静态、子类执行顺序
顺序: 父类的静态,子类静态,父类非静态,父类构造方法,子类非静态,子类构造方法. public class A { static String name = "cjj"; int ...
- Zabbix 添加 WEB 监控
添加 WEB Monitorings Web Monitoring是用来监控web程序的,可以监控到web程序的下载速度.返回码及响应时间,还支持把一组连续的web动作作为一个整体来监控. 下面我们以 ...
- Git回版本回退
这里我们使用命令行的方式对已经提交的版本进行强行回退操作~~~ 一.将git的安装目录bin放到path路径中, 如下图所示: 二.进入cmd界面,依次输入下面内容即可(git 远程仓库 回退到指定版 ...
- 工具类MyBatisUtils创建SqlSessionFactory
package com.js.ai.modules.pointwall.interfac; import java.io.IOException; import java.io.InputStream ...
- 强大的NCBI接口
刚才小玩了下,不错,.net确实很方便,很强大 Using Entrez Utilities Web Service with C# and MS Visual Studio 2005 Updated ...