1、格式不同

前者

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

后者

#50 1 * * *  command

2、使用范围

修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接,直接给其他用户设置计划任务,而且还可以指定执行shell等等,
crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入/var/spool/cron/usename

3.服务重启

1 /etc/init.d/crond restart

2 service crond restart


1、crontab 会进行语法检查,vi 不会

2、听说有些 os 的 crond 不会重读配置,所以用 service 重启

crontab -e是某个用户的周期计划任务;

/etc/crontab是系统的周期任务

1. crontab -e 与 /etc/crontab 修改语法格式不一样,后者多一个 user 指定

2. 不管用 crontab -e or 改 /etc/crontab 都不需要重新启动 crond 服务

01 22 * * * /sbin/shutdown -h now

执行的结果都是一样, 一般LINUX 都用shutdown -h now 也可以init 0,init 0在UNIX用得比较多,关机需要root的身份在可以执行:

方法1:换到root 的身份,su - root,crontab -e (按a增加下),01 22 * * * /sbin/shutdown -h now   (或01 22 * * * /sbin/init 0),保存退出即可

方法2:vi /etc/crontab 在里面插入,01 22 * * * root   /sbin/shutdown -h now或 01 22 * * * root   /sbin/init 0

  crontab   -e   是针对用户的cron来设计的,如果是系统的例行性任务,则不需要以crontab -e来管理例行性命令,只需要编辑/etc/crontab文件就可以了。需要注意的是:crontab -e的作用其实是/usr/bin/crontab这个执行文件,但是/etc/crontab是个纯文本文件,可以root的身份编辑这个文件。

基本上,cron服务的最低检测时间单位是分钟,所以cron会每分钟读取一次/etc/crontab与/var/spool/cron中的数据内容,因此,只要编辑完/etc/crontab文件并且保存之后,crontab时设定就会自动执行。

注意:在linux下的crontab会自动每分钟重新读取一次/etc/crontab的例行工作事项,但是某些原因或在其他的unix系统中,由于crontab是读到内存中,所以在您修改完/etc/crontab之后可能并不会马上执行,这时请重新启动crond服务:/etc/rc.d/init.d/crond restart

下面看看/etc/crontab文件的内容:

  vi   /etc/crontab

  SHELL=/bin/bash

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

  MAILTO=root

  HOME=/

  #   run-parts

  01 * * * * root   nice   -n   19     run-parts   /etc/cron.hourly

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

  22 4 * * * root    nice   -n   19   run-parts   /etc/cron.weekly

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

  分 时 日 月 周  用户  参数设定值   参数设定值   指令段

  从这个文件的内容可以看出,这个文件与输入crontab -e后的内容几乎完全相同,只是下面几个地方有所区别:

  1、MAILTO=root:这个字段说明了当/etc/crontab文件中的例行性命令发生错误时,会将错误信息或屏幕显示的信息传递给谁,由于root无法在客户端收信,因此,可以将这个email改成自己普通用户帐号。

  2、0 1 * * * * root   nice   -n  19  run-parts   /etc/cron.hourly:在#run-parts这一行以后的命令,我们可以发现,5个数字后面接的是root,这代表执行的层级为root身份。当然,您也可以root改成其他身份,而run-parts表示后面接的是/etc/cron.hourly是一个目录内(/etc/cron.hourly)的所有可执行文件,

也就是说每个小时的01分,系统会以root的身份到/etc/cron.hourly目录下执行所有可以执行的文件。系统本来就默认了这4个目录,您可以将每天需要执行的命令直接写到/etc/cron.daily中,还不需要用到crontab -e程序,很方便。

注意:基本上,/etc/crontab支持两种输入指令的方式,一种是直接以指令形式输入,一种则是以目录形式输入。

    指令形式

       0 1 * * * * test   mail   -s   test   test   <   /home/test/test/test.txt  ——用户是test,且每小时执行一次指令mail……

    目录形式

       */5   *  *  *  * root run-parts   /root/runcron ——建立一个/root/runcron目录,将每隔5分钟执行一次的可执行文件都写到该目录下,就可以让系统每5分钟执行一次该目录下的所有可执行文件。

如果每个流程都在同一时间启动,那么在某个时段,系统会非常的繁忙,所以这时必须分别设定。可以这样做:

    1,6,11,16,21,26,31,36,41,46,51,56 * * * * root …………   // 省略号代表命令

    2,7,12,17,22,27,32,37,42,47,52,57 * * * * root …………

    3,8,13,18,23,28,33,38,43,48,53,58 * * * * root …………

    4,9,14,19,24,29,34,39,44,49,54,59 * * * * root ………… 

     注意,要用","分隔时,不要带有空格。如此一来,则可以将每5分钟工作的流程分别安排在不同的时刻进行。

  

  crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠,实际工作中,90%的程序都没有

必要花这么多时间和精力去解决上面的两个问题的,只需要写好自己的业务逻辑,通过crond这个工业级程序去调度就行了,crond的可靠性,健壮性,大家应该是毫无疑问的。

crontab简易入门

假设我要设置一个任务,每分钟就要做一个数据同步,这个同步脚本的路径是/home/blue/do/rsyncfile.sh,那么我可以在这么配置,使用blue用户,在终端输入

crontab -e
# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
#分 时 日  月 周      |<==============任务的完整命令行*  *  *  *  *       /home/blue/do/rsyncfile.sh

默认情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达『 crontab -e 』去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入『 :wq 』储存后离开 vi 就可以了!

假如我们需要修改为每5分钟运行数据同步的脚本,那么同样使用 crontab -e 进入编辑:

*/5 * * * *  /home/blue/do/rsyncfile.sh

假如服务器出了问题,有一天的数据没有同步,于是我们就需要补数据了,假设这个补数据的脚本是/home/blue/do/rsyncfile_day.sh,但是白天是高峰期,晚上用户不多,是低峰期,我们补数据会占用大量带宽,尤其是白天,会影响正常业务,所以一般我们可以让补数据任务在凌晨2点开始跑,那么同样使用crontab -e 进入编辑:

0 2 1 4 *  /home/blue/do/rsyncfile_day.sh

这样,在4月1号凌晨2点0分就会开始启动我们的补数据的脚本了。

同步数据,在互联网公司是再平常不过的任务了,这里大家可以看到crontab的魅力所在了,只需要写最简单的业务逻辑,把调度交给crond做,就完成了一个可靠性很高的一项任务了,如果要自己去额外写这种调度程序,不知道要花多少精力才能做到可靠稳定。

crontab的语法

crontab [-u username] [-l|-e|-r]
选项与参数:
-u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e  :编辑 crontab 的工作内容
-l  :查阅 crontab 的工作内容
-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑

查询使用者目前的 crontab 内容:

crontab -l
*/5 * * * *  /home/blue/do/rsyncfile.sh
0 2 1 4 *  /home/blue/do/rsyncfile_day.sh

清空使用者目前的 crontab:

crontab -r
crontab -l
no crontab for blue

如果你想删除当前用户的某一个crontab任务,那么使用crontab -e进入编辑器,再删除对应的任务。

crontab的限制

  /etc/cron.allow:将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;

  /etc/cron.deny:将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。

以优先顺序来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个来限制而已,建议只要保留一个即可, 免得影响自己在配置上面的判断!一般来说,系统默认是保留 /etc/cron.deny ,可以将不想让他运行 crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行!

 /etc/crontab配置文件讲解

『 crontab -e 』是针对使用者的 cron 来设计的,如果是『系统的例行性任务』时,就要编辑 /etc/crontab 这个文件。

那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个『纯文字档』,必须用 root 的身份编辑一下这个文件。

首先我们要来看看crontab的文件内容

cat /etc/crontab# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

这个文件与将刚刚我们下达 crontab -e 的内容几乎完全一模一样!只是有几个地方不太相同

PATH=....:

这里就是输入运行档的搜寻路径!使用默认的路径配置就已经很足够了!

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly:

这个 /etc/crontab 里面预配置义出四项工作任务,分别是每小时、每天、每周及每个月分别进行一次的工作! 但是在五个栏位后面接的并不是命令,而是一个新的栏位,那就是『运行后面那串命令的身份』为何!这与使用者的 crontab -e 不相同。由於使用者自己的 crontab 并不需要指定身份,但 /etc/crontab 里面当然要指定身份啦!以上表的内容来说,系统默认的例行性工作是以 root 的身份来进行的。

那么后面那串命令是一个 bash script !如果你直接进入 /usr/bin/run-parts 去看看, 会发现这支命令会将后面接的『目录』内的所有文件捉出来运行!这也就是说『 如果你想让系统每小时主动帮你运行某个命令,将该命令写成 script,并将该文件放置到 /etc/cron.hourly/ 目录下即可』的意思!

现在你知道系统是如何进行他默认的一堆例行性工作排程了吗?如果你下达『 ll /etc/cron.daily 』就可以看到一堆文件, 那些文件就是系统提供的 script ,而这堆 scripts 将会在每天的凌晨 6:25 开始运行!

假设你现在要作一个目录,让系统可以每 2 分钟去运行这个目录下的所有可以运行的文件,你可以写下如下的这一行在 /etc/crontab 中:

*/2 * * * * root run-parts /etc/cron.min

当然罗, /etc/cron.min 这个目录是需要存在的喔!那如果我需要运行的是一个『程序』而已, 不需要用到一个目录呢?该如何是好?例如在侦测网络流量时,我们希望每五分钟侦测分析一次, 可以这样写:

*/5 * * * * root /bin/mrtg /etc/mrtg/mrtg.cfg

如何!创建例行性命令很简单吧!如果你是系统管理员而且你的工作又是系统维护方面的例行任务时, 直接修改 /etc/crontab 这个文件即可喔!又便利,又方便管理呢!

crontab的原理

当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的喔!举例来说, blue 使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/blue 里头去!但请注意,不要使用 vi 直接编辑该文件, 因为可能由於输入语法错误,会导致无法运行 cron 喔!另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,所以罗,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档呢!

crond服务的最低侦测限制是『分钟』,所以『 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 』,因此,只要你编辑完 /etc/crontab 这个文件,并且将他储存之后,那么 cron 的配置就自动的会来运行了!

备注:在 Linux 底下的 crontab 会自动的帮我们每分钟重新读取一次 /etc/crontab 的例行工作事项,但是某些原因或者是其他的 Unix 系统中,由於 crontab 是读到内存当中的,所以在你修改完 /etc/crontab 之后,可能并不会马上运行, 这个时候请重新启动 crond 这个服务吧!『/etc/init.d/crond restart』

crontab的格式讲解

每项工作 (每行) 的格式都是具有六个栏位,这六个栏位的意义为:

代表意义 分钟 小时 日期 月份 命令
数字范围 0-59 0-23 1-31 1-12 0-7 呀就命令啊

比较有趣的是那个『周』喔!周的数字为 0 或 7 时,都代表『星期天』的意思!另外, 还有一些辅助的字符,大概有底下这些:

特殊字符 代表意义
*(星号) 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思!
,(逗号) 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是:

0 3,6 * * * command

时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!

-(减号) 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:

20 8-12 * * * command

仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!

/n(斜线) 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:

*/5 * * * * command

很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!

周与日月不可同时并存

另一个需要注意的地方在於:『你可以分别以周或者是日月为单位作为循环,但你不可使用「几月几号且为星期几」的模式工作』。 这个意思是说,你不可以这样编写一个工作排程:

30 12 11 9 5 root echo "just test"   <==这是错误的写法

本来你以为九月十一号且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的 9 月 11 号分别进行,如此一来与你当初的规划就不一样了~所以罗,得要注意这个地方!上述的写法是不对的!

/etc/crontab文件和crontab -e命令区别相关推荐

  1. Linux下的/etc/crontab文件和crontab -e命令区别及Crontab命令详解(转)

    1.格式不同 前者 # For details see man 4 crontabs# Example of job definition: # .---------------- minute (0 ...

  2. linux cron读哪个文件,linux crontab 文件位置和日志位置

    一.文件位置 位置一般在/var/spool/cron/下,如果你是root用户,那下面有个root文件,建议日常备份,避免误删除导致crontab 文件丢失: 二.日志文件位置 默认情况下,cron ...

  3. linux中的crontab文件位置,linux crontab 文件位置和日志位置

    一.文件位置 位置一般在/var/spool/cron/下,如果你是root用户,那下面有个root文件,建议日常备份,避免误删除导致crontab 文件丢失: 二.日志文件位置 默认情况下,cron ...

  4. linux crontab文件,crontab用法与实例

    导读 在Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息.负载状况:定时执行某些任务/脚本来对远端进行数据采集等.这里将介绍下cronta ...

  5. linux间隔时间执行,科技常识:使用linux命令crontab间隔时间执行其它命令

    今天小编跟大家讲解下有关使用linux命令crontab间隔时间执行其它命令 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关使用linux命令crontab间隔时间执行其它命令 的相关资料 ...

  6. linux 创建crontab文件位置,linux - 如何通过脚本创建crontab - Ubuntu问答

    问题描述 我需要通过运行设置服务器的脚本来添加cron作业.我目前正在使用Ubuntu.我可以使用crontab -e,但这将打开一个编辑器来编辑当前的crontab.我想以编程方式执行此操作. 有可 ...

  7. ubuntu 定时执行php文件,Ubuntu crontab 定时执行php脚本文件

    什么是Cron和Crontab Unix和Linux系统的各个发行版本基本都支持Cron,Cron /Crontab允许我们在设定的时间自动执行或定时执行某个任务,如应用程序或脚本.更详细的概念和使用 ...

  8. linux crontab 管理,linux crontab 命令详解

    linux crontab 命令详解 使用方式 : crontab [ -u user ] file crontab [ -u user ] { -l | -r | -e } 说明 : crontab ...

  9. Linux crontab下关于使用date命令和sudo命令的坑

    Linux crontab下关于使用date命令和sudo命令的坑 想要在root 的crontab里面加一些任务计划,希望以www用户运行命令,并且将输出重定向到某处以当时时间命名的日志文件,大致如 ...

  10. 赋crontab -e 权限以及使用命令详解

    一.  Crontab 介绍 crontab命令的功能是在一定的时间间隔调度一些命令的执行. 1.1 /etc/crontab 文件 在/etc目录下有一个crontab文件,这里存放有系统运行的一些 ...

最新文章

  1. Analysis and Design Overview
  2. Python网络编程—(TCP、UDP区别)
  3. 身为最热门的编程语言,Java求职前景到底如何?
  4. pymongo 使用测试
  5. node中的js-核心模块
  6. 纽约大学计算机工程专业课程,纽约大学计算机工程硕士专业介绍及课程要求
  7. rust石头墙几个c4_从安顺自驾石头寨一日游
  8. mysql基线检查_Mysql安全基线检查
  9. 金融行业灾备压力大?看中和农信如何从容应对
  10. 计算机套题库c版,计算机二级C语言上机题库100套(最新版)
  11. M3U8下载,直播源下载,FLASH下载(三)-直播源下载
  12. 如何用adb连接android手机
  13. 【CUDA】cuda安装 (windows版)
  14. 微信小程序搜索wifi列表
  15. malloc与calloc
  16. 微信小程序中使用iconfont图标
  17. oracle是java代码块,Oracle中施行java代码
  18. 怦然心栋-冲刺日志(第10天)
  19. 基于单片机智能安全服药提醒药盒系统设计(毕设资料)
  20. C++继承——宠物的生长

热门文章

  1. 2021中职网络空间安全国赛隐藏信息探索解析做题详解
  2. stata基本操作(一)
  3. 渗透测试技巧总结更新篇2
  4. alps interview
  5. 自建服务器好还是外包,自建与外包对比:如何使你的IT回归内部
  6. r4900g3系统安装linux_H3C UniServer R4900 G3
  7. 领扣LintCode算法问题答案-1485. 圣杯咒语
  8. unity渲染篇:画面亮度、饱和度、对比度调整
  9. 按下Backspace键,就会跳转到上一个页面。JavaScript屏蔽Backspace键处理,禁用Backspace键。
  10. HDU 2209 翻纸牌游戏 By Assassin 模拟