zoukankan      html  css  js  c++  java
  • [linux]解析crontab

    linux提供了一个非常强大而且又比较好用的命令 [crontab]

    crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,

    如果我要linux定时去执行某个脚本或者定时某个http请求,可以用crontab来实现

    如下 我用cron去定时发送一个http请求

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

    如果你要每5分钟运行数据同步的脚本,同样可以用crontab -e 然后编辑按照规定的格式写即可.

    白天是高峰期,晚上用户不多,是低峰期,我们补数据会占用大量带宽,尤其是白天,会影响正常业务,一般的运维人员在对服务器有大的操作的时候都会实现吧脚本写好,然后设定在凌晨的时候执行指定的脚本就可以了.

    crontab的语法

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

    查询目前的定时任务

    如果想删除某一个crontab任务,就删除某一行就可以了

    /etc/crontab配置文件讲解

    我们可以看一看 linux中 /etc/crontab

    前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

    crontab的格式讲解

    用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

    minute   hour   day   month   week   command

    其中:

    minute: 表示分钟,可以是从0到59之间的任何整数。

    hour:表示小时,可以是从0到23之间的任何整数。

    day:表示日期,可以是从1到31之间的任何整数。

    month:表示月份,可以是从1到12之间的任何整数。

    week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    上图已经表示很明确了. 每个*代表的意义..

    在这里还有一点是需要注意的是几个特殊的符号含义  

     特殊字符  代表含义
     *(星号)  代表任何时刻都接受的意思,*代表的是任何时候
     ,(逗号)

     代表分隔字段的意思

    例如: 15,30,45 * * * * command 代表的是每月每日每小时的15分,30分,45分的时候执行命令

    -(减号) 

     代表一段时间范围内

    例如: 10 7-10 * * * command 代表的是每月每日的7点到10点的10分整时执行命令

     /n  

     那个 n 代表数字,也就是每隔 n 单位间隔的意思

    例如 /5 * * * * command 代表的是每月每日每时每个5分钟执行一次

    crontab的原理

    当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的喔!举例来说, css使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/css 中,但请注意,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法运行 cron 喔!另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中.

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

    如果你修改完的crontab或者添加的crontab没有马上的执行起来,那么你可以用 service crond restart 来重启.

    看看/etc/下的所有cron的目录

    特别注意的是

    /etc/cron.deny  该文件中所列用户不允许使用crontab命令

    /etc/cron.allow  该文件中所列用户允许使用crontab命令

    最好是对crontab命令进行备份,因为 crontab -e 和crontab -r 中一个是写入 一个是删除,而e和r又相离很近,所以要注意这一点,很容易误删crontab这个文件.

    举几个实例吧,这样方便大家能够更加容易的了解

     实例  
     每1分钟执行一次 

     * * * * * command 

    /1 * * * * command

     每小时的第15,30,45分钟执行  15,30,45 * * * * command
     7点到10点的第10,50分钟执行  10,50 7-10 * * * command
     每隔一天的7点到11点的第20和第40分钟执行  20,40 7-11 */1 * * command
     每周一的7点到11点的第25和第50分钟执行 25,50 7-11 * * 1 command
     每天的3:30执行  30 3 * * * command
     每月1、10、20日的3 : 30执行  30 3 1,10,20 * * command
     每周六、周日的3 : 30执行

     30 3 * * 6,0 command

    30 3 * * 6,7 command

     每天9点到16点之间每隔15分钟执行  /15 9-16 * * * command

    & 后台执行命令

    * * * * * command &

    当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。

    可以把输出接口放到某一个温江中

    2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做log.file 的文件中

    command >log.file 2>&1 &

    CentOS下查看crontab执行历史记录

    在crontab中添加了定时任务,但发现没有得到期望的结果,因而怀疑是crontab没有执行相应的任务,这是我们可以查看一下日志

    cd /var/log
    
    tail -100 cron
  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/chenshishuo/p/5152068.html
Copyright © 2011-2022 走看看