zoukankan      html  css  js  c++  java
  • Linux定时任务命令crontab

    作为一个php码农,linux接触总是很少,但又是必须会的一项技能,今天学到的linux命令是crontab命令。

    注:以下总结基于Ubuntu 12.04

    去/etc目录下看看

    先去Ubuntu的/etc目录下看看,我们都知道/etc目录主要用来存放系统中的配置文件,基本上所有的配置文件都可以在这里找到。运行以下命令看看:

    ls /etc/cron*

    这个命令会列出/etc目录下所有以cron开头的文件和文件夹。可以看到主要有以下文件夹:

    /etc/cron.hourly 这里存放了每小时需要运行的脚本
    /etc/cron.daily 这里存放了每天需要运行的脚本
    /etc/cron.weekly 这里存放了每个星期需要运行的脚本
    /etc/cron.monthly 这里存放了每月需要运行的脚本
    /etc/cron.d 如果既不是按小时,也不按天,周和月来运行,就放在这个文件夹

    原来,我们可以把我们需要定时运行的脚本放到对应的文件夹中,系统就会定时运行对应的脚本了。那么系统是怎么做到的呢?

    /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文件是一个系统级别的配置文件,里面配置了什么时候去运行什么文件的规则。Linux会定期去扫描对应的文件夹,运行里面的脚本。这就完成了定时执行任务的功能。

    cron服务

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

    service cron start //启动服务
    service cron stop //关闭服务
    service cron restart //重启服务
    service cron reload //重新载入配置

    cron命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类:

    • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
    • 个人执行的工作:某个用户定期要做的工作,例如每天备份数据库等。

    /var/spool/cron/目录下是所有用户的crontab文件,你也可以去看看。上面说到的/etc下的配置都是属于系统级别的,那么个人级别的定时执行如何来做呢?这就需要说到下面的crontab命令了。

    crontab命令

    cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

    crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
    crontab -l //列出某个用户cron服务的详细内容
    crontab -r //删除没个用户的cron服务
    crontab -e //编辑某个用户的cron服务

    如果不指定用户,就是当前系统的登陆用户。

    当你输入命令:crontab -e时,就会出现一个文件,让你填写对应的定时规则,这个规则是什么?

    定时规则

    看这条规则:

    25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

    这就是一条规则,表示每天的6点25分执行对应的脚本。没有看明白,不要紧,容我慢慢道来。

    以下是 crontab 文件的格式:

    {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
    • minute:区间为0–59;
    • hour:区间为0–23;
    • day-of-month:区间为0–31;
    • month:区间为1–12;1是1月,12是12月;
    • Day-of-week:区间为0–6;周日是0。

    除了数字还有以下几个特殊的符号需要特殊说明:
    *:代表所有的取值范围内的数字;
    /:代表每的意思,”*/5″表示每5个单位;
    -:代表从某个数字到某个数字;
    ,:分开几个离散的数字。

    以下举几个例子说明问题:

    每五分钟执行    */5 * * * * /home/jelly/test.sh
    每小时执行      0 * * * * /home/jelly/test.sh
    每天执行        0 0 * * * /home/jelly/test.sh
    每周执行        0 0 * * 0 /home/jelly/test.sh
    每月执行        0 0 1 * * /home/jelly/test.sh
    每年执行        0 0 1 1 * /home/jelly/test.sh
    
    每天早上6     0 6 * * * /home/jelly/test.sh
    每两个小时      0 */2 * * * /home/jelly/test.sh
    
    晚上11点到早上8点之间每两个小时
    0 23-7/2 * * * /home/jelly/test.sh
    
    11日早上4
    0 4 1 1 * /home/jelly/test.sh

    我想这下你应该明白了,如果还没有明白,没问题,再来个实例,你就能明白了。

    一个小Demo

    先准备以下这么一段简短的脚本:

    #!/bin/bash
    
    var="http://www.jellythink.com"
    
    echo $var
    
    exit 0

    保存为文件backupDemo.sh。
    bash脚本不懂,没关系,看这里:

    在终端输入以下命令:

    crontab -e

    在显示的文件末尾添加以下规则:

    */1 * * * * /home/jelly/MySource/Shell/backupDemo.sh >> /home/jelly/log.log

    编辑完成,保存完成以后,就会显示以下提示信息:

    crontab: installing new crontab

    这就说明正在安装新的定时任务,如果没有这条提示信息,请重新运行crontab -e命令。

    接下来就会看到在/home/jelly目录下会生成一个log.log文件,并写入了输入的信息。

    //常用情况举例

    10 0 * * * /usr/bin/curl http:www.baidu.com   //表示每天0点10分定时访问百度 

    30 21 * * * /usr/local/etc/rc.d/lighttpd restart  //表示每晚的21:30重启apache

    00 * * * * /usr/local/bin/php /home/john/myscript.php  //每一小时执行myscript.php

    */5 * * * * /usr/bin/curl -o temp.txt http://www.jb51.net/myscript.php //使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。

    */10 * * * * /usr/bin/wget -q -O temp.txt http://www.jb51.net/myscript.php  //使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。 
     

    转载自:无限飞翔 » Linux定期执行任务

  • 相关阅读:
    Redis在windows下安装过程
    Java中如何使用Redis做缓存
    Redis学习记录之Java中的初步使用
    Java多线程实现简单的售票程序
    list,set,map,数组间的相互转换
    高性能Java Web 页面静态化技术(原创)
    Nginx windows下搭建过程
    高并发解决方案--负载均衡
    高并发解决方案--页面静态化
    phpcms 自定义方法
  • 原文地址:https://www.cnblogs.com/gyfluck/p/5801807.html
Copyright © 2011-2022 走看看