zoukankan      html  css  js  c++  java
  • Ubuntu下的计划任务 -- cron的基本知识

    下面不完全:

    参考:http://blog.csdn.net/cuker919/article/details/6336457

    cron是一个Linux下的后台进程,用来定期的执行一些任务。因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但其他系统应该也差不多。

    想要让cron执行你指定的任务,首先就要编辑crontab文件。crontab是一个文本文件,用来存放你要运行的命令。你可以以下命令

    Shell代码 
    1. crontab -e  

    来打开你的用户所属的crontab文件。第一次用这个命令,会让你选择文本编辑器,我选的是vim。选定的编辑器也可以使用

    Shell代码 
    1. select-editor  

    命令来更改。这点命令行中已经有足够的提示,就不多说了。

    打开后的crontab文件类似这种样子:

    Shell代码 
    1. # m h  dom mon dow   command  
    2. */2  * * * * date >> ~/time.log  

    第二行是我为了测试写的一个定期任务,它的意思是,每隔两分钟就执行 date >> ~/time.log 命令(记录当前时间到time.log文件)。你可以把它加入你的crontab中,然后保存退出。

    保存了crontab之后,我们还需要重启cron来应用这个计划任务。使用以下命令:

    Shell代码 
    1. sudo service cron restart  

    查看cron 服务状态:

    service cron status

    启动cron:

    service cron start

    停止cron:

    service cron stop

    下面稍微解释下crontab中每行的含义。crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:

    分钟          0 - 59

    小时          0 - 23

    天              1 - 31

    月              1 - 12

    星期          0 - 6       0表示星期天

    除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:

    星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)

    逗号          可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟

    斜线          一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。所以 */1 和 * 没有区别

                      */2 可以看成是能被2整除的任意值。

    以下是一些例子(省略了命令部分):

    Crontab代码 
    1. * * * * *                  # 每隔一分钟执行一次任务  
    2. 0  * * * *                  # 每小时的 0 点执行一次任务,比如 6 : 00  10 : 00   
    3. 6 , 10  *  2  * *            # 每个月 2 号,每小时的 6 分和 10 分执行一次任务  
    4. */3 ,*/ 5  * * * *          # 每隔 3 分钟或 5 分钟执行一次任务,比如 10 : 03  10 : 05  10: 06   

    以上就是在cron中加入计划任务的基本知识。因为cron中的任务基本就是执行命令行,所以当然也会有权限问题。以上例子中的任务就是以你当前登录用户的权限执行的,如果你需要以root用户执行某个任务,可以在crontab前加上sudo。

    Shell代码 
    1. sudo crontab -e  

    顺带一提,crontab文件对每个用户都是不同的,所以刚才设置的定期看时间的任务,在这里是看不到的。因为我们没有为root用户增加这样的计划任务。

    再顺带一提,不喜欢命令行的童鞋可以去  Ubuntu软件中心   下一个  计划任务   程序。在软件中心中搜索 schedule 就可以搜到。它是一个GUI的程序,做的还蛮傻瓜化的。不过好像没办法设置成使用root用户运行任务。而且,对于要ssl到服务器上进行操作的童鞋来说,命令行还是最好(唯一)的工具。

    用实例告诉你Linux下如何编写计划任务crontab。

    输入crontab -e 编辑crontab 计划任务,Ubuntu里默认编辑器是Nano,如何使用Nano可以参考Nano 快捷键

    # m h dom mon dowcommand

    #分 时 日 月 周 执行命令

    分钟[0,59],小时[0,23],日期[1,31] ,月[1,12],周[0,6],可以使用的参数有“*”,“/”,“-”和“,”。

    * 表示任意取值范围内数字 在分钟里*表示0到59的任意数字

    - 表示选择区域范围内的数字 3-10表示3-10的任意数字,包含3和10

    , 选择数字 2,4,5 选择2,4,5

    / 每多少数字 在分钟里 */2表示每二分钟

    例子:

    每1分钟执行一次command

    * * * * * command

    每小时的第3和第15分钟执行

    3,15 * * * *command

    在上午8点到11点的第3和第15分钟执行

    3,15 8-11 * * *command

    每隔两天的上午8点到11点的第3和第15分钟执行

    3,15 8-11 */2 * *command

    每个星期一的上午8点到11点的第3和第15分钟执行

    3,15 8-11 * * 1command

    crontab可以定时执行任务,在Ubuntu下输入crontab帮助如下

    test@ubuntu:~$crontab

    crontab: usageerror: file name must be specified for replace

    crontab [-u user]file

    crontab [-u user]{ -e | -l | -r }

    -e (edit user'scrontab)

    -l (list user'scrontab)

    -r (delete user'scrontab)

     

    -------------------------------------------------------------------------------------------------------------------

    按照上面的说明,这几天正好在一个项目里面用到,不过发现配置了好久都没有执行,经过n次调试和网上查资料后终于搞定。

    1 1 * * *  cd /home/apache-tomcat-6.0.26/bin/dealLog ;java -jar delLog.jar  >> /dev/null 2>&1

    原来 在linux系统cron系统任务里面,如果执行的是java程序,需要配置环境变量。

    (1)用文本编辑器打开/etc/profile
    (2)在profile文件末尾加入:
    JAVA_HOME=/usr/share/jdk1.5.0_05
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME
    export PATH
    export CLASSPATH
    (3)重新登录

    发现还是无效,系统都重启过了,还是没有生效,晕。

    此时,选择了另一种方法。

    方法一:

    编写了一个运行处理日志的脚本logdeal.sh,存放路径(/home/apache-tomcat-6.0.26/bin/ dealLog / ):
    #!/bin/sh
    JAVA_HOME=/home/bss/jdk1.6.0_13-32
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export CLASSPATH
    PATH=$JAVA_HOME/bin:$PATH
    export PATH
    cd /home/apache-tomcat-6.0.26/bin/dealLog
    java -jar delLog.jar >> /dev/null 2>&1
     
    然后在该用户下配置(执行时间可配)crontab -e
    * */1 * * * sh /home/apache-tomcat-6.0.26/bin/dealLog /logdeal.sh >> /dev/null 2>&1


    保存退出,然后重启crond服务:service crond restart

    执行成功,功能正常。

    参考资料:

    linux服务crond定时运行java程序

    http://edu.codepub.com/2010/0529/23084.php

    linux下crontab自动执行class程序

    http://blog.csdn.net/fishyu0817/archive/2009/07/22/4367425.aspx

  • 相关阅读:
    【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
    【POJ 2152】 Fire (树形DP)
    【POJ 1741】 Tree (树的点分治)
    【POJ 2486】 Apple Tree (树形DP)
    【HDU 3810】 Magina (01背包,优先队列优化,并查集)
    【SGU 390】Tickets (数位DP)
    【SPOJ 2319】 BIGSEQ
    【SPOJ 1182】 SORTBIT
    【HDU 5456】 Matches Puzzle Game (数位DP)
    【HDU 3652】 B-number (数位DP)
  • 原文地址:https://www.cnblogs.com/yi-meng/p/3208973.html
Copyright © 2011-2022 走看看