CRONTAB概念/介绍

crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。

1: crontab文件一般位于/etc/下,这里面存放系统运行的的调度程序。

[root@localhost cron]# more /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

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

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

2:每个用户都会生成一个自动生成一个自己的crontab文件,一般位于/var/spool/cron目录下

[root@localhost cron]# cd /var/spool/cron

[root@localhost cron]# ls

oracle root

如果你用命令crontab -r 就会删除当前用户的crontab文件,例如你切换到oracle账号下,执行了该命令,那么/var/spool/cron/oracle文件就会删除,如果要创建该文件只需要用crontab -e命令即可。注意,普通用户一般没有权限访问/var/spool/cron

3:cron.deny 与 cron.allow文件

/etc/cron.deny 表示不能使用crontab 命令的用户

/etc/cron.allow 表示能使用crontab的用户。

默认情况下,cron.allow文件不存在。如果两个文件同时存在,那么/etc/cron.allow 优先。如果两个文件都不存在,那么只有超级用户可以安排作业。

但是让人纳闷的是cron.deny文件是空的,如下所示

[oracle@localhost etc]$ more cron.deny

4:cron.hourly,cron.daily,cron.monthly,cron.weekly

[oracle@localhost etc]$ ls -lrt cron*

-rw-r--r-- 1 root root 255 Sep 21 2004 crontab

-rw-r--r-- 1 root root 0 May 16 2008 cron.deny

cron.hourly:

total 0

cron.monthly:

total 8

-rwxr-xr-x 1 root root 278 Sep 29 2004 0anacron

cron.weekly:

total 16

-rwxr-xr-x 1 root root 277 Sep 29 2004 0anacron

-rwxr-xr-x 1 root root 414 Jun 6 2007 00-makewhatis.cron

cron.daily:

total 60

-rwxr-xr-x 1 root root 286 Aug 14 2004 tmpwatch

-rwxr-xr-x 1 root root 276 Sep 29 2004 0anacron

-rwxr-xr-x 1 root root 2133 Dec 1 2004 prelink

-rwxr-xr-x 1 root root 180 May 2 2006 logrotate

-rwxr-xr-x 1 root root 418 Jun 6 2007 00-makewhatis.cron

-rwxr-xr-x 1 root root 104 Aug 2 2007 rpm

-rwxr-xr-x 1 root root 121 Aug 22 2007 slocate.cron

lrwxrwxrwx 1 root root 28 May 16 2008 00-logwatch -> ../log.d/scripts/logwatch.pl

cron.d:

total 12

-rw------- 1 root root 366 Jun 12 2007 sa-update

-rw-r--r-- 1 root root 188 Jul 18 2007 sysstat

CRONTAB在线手册

注意:不同版本的Linux系统,可能crontab手册内容有所出入,请以实际版本为准。

[oracle@localhost ~]$ man crontab | more

 

CRONTAB语法及应用

1:查看当前用户的定时任务

[oracle@localhost ~]$ crontab -l

* * * * * /home/oracle/test.sh >/dev/null 2>&1

2:编辑当前用户的定时任务

可以在编辑状态修改、删除、新增一些定时任务。注释一般用#

[oracle@localhost ~]$ crontab -e

3:删除当前用户的定时任务

[root@localhost ~]# crontab -r

[root@localhost ~]# crontab -l

no crontab for root

4

如下所示,一般crontab文件里面的定时任务格式如下所示:

59 23 * * * /home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1

crontab 文件中每个条目中各个域的意义和格式:

第一列 分钟: 1——59

第二列 小时: 1——23(0表示子夜)

第三列 日 : 1——31

第四列 月 : 1——12

第五列 星期: 星期0——6(0表示星期天,1表示星期一、以此类推)

第六列 要运行的命令

我们暂且用C1、C2、C3、C4、C5、C6代表这六列,前面五列通过组合方式来决定执行脚本的频率,最小频率为每分钟执行一次,其中Cn可以用 * ; */n ; T1-T2; a,b,c; 四种形式来表示:

当 C1 为 * 时表示每分钟都要执行脚本,C2 为 * 时表示每小时都要执行程式,依次类推.....

当 C1 为 T1-T2 时表示从第 T1 分钟到第 T2 分钟这段时间内要执行,C2 为 T1-T2 时表示从第 T1 到第 T2 小时都要执行,依次类推....

当 C1 为 */n 时表示每 n 分钟的时间间隔执行一次,C2 为 */n 表示每隔n小时的间隔执行一次,依次类推.....

当 C1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,C2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,依次类推....

下面列举几个例子供大家参考

1: 59 23 * * * /home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1

表示每天23点59分执行脚本/home/oracle/scripts/alert_log_archive.sh

2: */5 * * * * /home/oracle/scripts/monitoring_alert_log.sh >/dev/null 2>&1

表示每5分钟执行一次脚本/home/oracle/scripts/monitoring_alert_log.sh

3: 0 20 * * 1-5 mail -s "**********" kerry@domain.name < /tmp/maildata

周一到周五每天下午 20:00 寄一封信给 kerry@domain.name

..............................................

关于 >/dev/null 2>&1 的解释:

0表示键盘输入

1表示标准输出

2表示错误输出.

我们首先创建test.sh脚本如下:

#! /bin/sh

echo "hello, everybody, now is " `date`

date >> test.txt

然后添加作业

* * * * * /home/oracle/test.sh >/home/oracle/log.txt & 默认值为1,即和下面命令一致

* * * * * /home/oracle/test.sh 1>/home/oracle/log.txt &

* * * * * /home/oracle/test.sh 2>/home/oracle/log.txt &

* * * * * /home/oracle/test.sh 2>/home/oracle/log.txt 2>&1 &

1,2将tesh.sh 命令输出重定向到log.txt, 即输出内容不打印到屏幕上,而是输出到log.txt文件中。如果你需要追加而不是覆盖,可以用 >>代替>

2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件log.txt。

&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

注意事项:

配置定时任务时,需要注意两个问题:

1: 在SHELL中设置了必要的环境变量;例如一个shell脚本手工执行OK,但是配置成后台作业执行时,获取不到ORACLE的环境变量,这是因为crontab环境变量问题,Crontab的环境默认情况下并不包含系统中当前用户的环境。所以,你需要在shell脚本中添加必要的环境变量的设置

2: 尽量所有的文件都采用完全路径方式,避免使用相对路径。

参考资料:

http://blog.csdn.net/tianlesoftware/article/details/5315039

http://yke2000.blog.163.com/blog/static/319238142010147308843/

crontab 定时任务设置的更多相关文章

  1. ubantu crontab定时任务设置

    Lynx浏览器安装.安装命令:sudo apt-get install lynx.打开终端输入:crontab -e若初次执行会出现以下(选择编译器,一般选4(Vim))Select an edito ...

  2. Linux crontab 定时任务设置

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  3. Linux crontab定时任务设置

    1.检查是否安装了crontab # rpm -qa | grep crontab 2.重启crontab服务 一定重启,这样确保了crontab服务的开启 # /etc/init.d/crond r ...

  4. Linux下Crontab定时任务的使用教程 以及 无法执行定时任务的解决方案

     前言 本文学习思路:Linux的corntab定时任务的使用教程  --> 定时任务无效的解决方案  Linux的corntab定时任务的使用教程 1. 首先,输入命令 打开crontab定时 ...

  5. linux定时任务crontab的设置

    linux定时任务crontab的设置http://www.blogjava.net/freeman1984/archive/2010/09/23/332715.html vi /etc/cronta ...

  6. Linux下实现秒级的crontab定时任务

    crontab的格式如下 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 ...

  7. Linux crontab 定时任务

    http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html 19. crontab 定时任务 通过crontab 命令,我们 ...

  8. 对于crontab定时任务不能自动执行的总结

    最近遇到了一些sh不能在crontab定时任务中自动执行的问题 期间由于不太了解,故走了一点弯路,现在总结下来可能第一次 进行设置遇到的问题.以绝后患!我所用过的操作系统为HP-unix&li ...

  9. crontab定时任务不执行的原因

    1.重启crontab若是遇见"You (cloudlogin) are not allowed to use this program (crontab)                 ...

随机推荐

  1. 微信授权网页获取用户openiid

    微信网页授权:官方文档: https://mp.weixin.qq.com/wiki 支付文档:https://pay.weixin.qq.com/wiki/doc/api/index.html 调试 ...

  2. operator模块常见方法介绍

    operator.concat(a, b) 对于 a.b序列,返回 a + b(列表合并) --------------------------------- operator.countOf(a, ...

  3. 两个init方法的区别

    容器创建了Servlet实例后,它将调用实例的init(ServletConfig)方法初始化Servlet.该方法的参数ServletConfig对象包含了在WEB应用程序的部署描述文件中指定的初始 ...

  4. ROS-I工业机器人培训课程资料 2017-06-30

    美国ROS工业联盟于2017年6月6日至8日在德克萨斯州圣安东尼奥市的SwRI举办了ROS工业开发人员培训班.12位与会者代表了一系列不同的组织,包括Bastian Solutions,EWI,Joh ...

  5. 重写alert 方法(我胡汉三又回来了)

    window.alert = function (txt) { var shield = document.createElement("DIV"); shield.id = &q ...

  6. 数据链路层、ARP/RARP、ICMP、ping和traceroute

    互联网基础:   数据链路层:RFC文档:894/1042/1340 为IP模块发送和接受IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答   ...

  7. restful 协议 +面试

    restful 协议:面向资源软件架构风格 API 定义 一些预先定义的函数,目的是能够让应用程序或开发人员能够具有访问指定网络资源的能力,而无需关心访问的远吗以及内部的工作机制细节. RESTful ...

  8. java之继承

    措辞 类Y是继承类X == 类X是类Y的父类 == Y IS-A X IS-A测试具有传递性,即:若Y IS-A X,且Z IS-A Y,则Z IS-A X IS-A关系是单向的 条件 为了防止继承被 ...

  9. cocos2d-x 3.17 jsb android运行报错

    编译成功,运行失败,提示如下: 2018-11-15 19:09:56.343 2820-2852/net.jd85.test D/cocos2d-x debug info: cocos2d: ful ...

  10. linux自学(七)之开始ccentos学习,安装jdk

    上一篇:linux自学(六)之开始centos学习,更换yum源 如果你认真跟着前面操作那么一定都完成相关配置及下载,我们的目的是部署Javaweb项目,需要jdk,mysql,tomcat.那么接下 ...