zoukankan      html  css  js  c++  java
  • linux 自动执行 crontab学习笔记

    在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。
    以某一频率执行任务
    linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
    crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
    cron的调度文件有以下几个:
    1. crontab
    2. cron.d
    3. cron.daily
    4. cron.hourly
    5. cron.monthly
    6. cron.weekly
    如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。
    示例:
    每隔一分钟执行一次脚本 /opt/bin/test-cron.sh
    可以在cron.d新建脚本 echo-date.sh
    内容为
    */1 * * * * root  /opt/bin/test-cron.sh
    在指定的时间运行任务
    也可以通过at命令来控制在指定的时间运行任务
    如:
    at -f test-cron.sh -v 10:25
    其中-f 指定脚本文件, -v 指定运行时间
    quote:ea946d690b="lophyxp"]首先用
    contab -l >contabs.tmp
    导出contab的配置。
    然后编辑contabs.tmp文件。以一下格式添加一行:
    分钟 小时 天 月 星期 命令
    比如
    10 3 * * 0,6 hello
    就是每周六、周日的3点10分执行hello程序。
    15 4 * * 4-6 hello
    就是从周四到周六的4点15点执行hello程序。
    然后用
    contab contabs.tmp
    命令导入新的配置。
    一般不建议直接修改/etc/下的相关配置文件。
    启动cron进程的方法:/etc/init.d/crond start
    开机就启动cron进程的设置命令:chkconfig --add crond
    方法二:
    把cron加入到启动脚本中:
    # rc-update add vixie-cron default
    crontab -l #查看你的任务
    crontab-e#编辑你的任务
    crontab-r#删除用户的crontab的内容
    实例讲解二:
    系统cron设定:/etc/crontab
        通过 /etc/crontab 文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限
    0 7   *    *   *    root    mpg123 ~/wakeup.mp3
    分 时 日 月 周
    示例:
    0 4  * * 0     root emerge --sync && emerge -uD world              #每周日凌晨4点,更新系统
    0 2 1 * *     root   rm -f /tmp/*                                                    #每月1号凌晨2点,清理/tmp下的文件
    0 8 6 5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐
    假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过 “ / ” 和 “ , ” 来设置:
    */2   *   *   *   *           root      ...............      #每两分钟就执行........
    0 6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........
    每两个小时
    0 */2 * * * echo "have a break now." >&gt; /tmp/test.txt
    晚上11点到早上8点之间每两个小时,早上八点
    0 23-7/2,8 * * * echo "have a good dream:)" &gt;&gt; /tmp/test.txt
    每个月的4号与每个礼拜的礼拜一到礼拜三的早上11点
    0 11 4 * 1-3 command line
    1月1日早上4点
    0 4 1 1 * command line
    收获:可以把经常要做的一些事放到其中,简化工作量,如每周一检查服务器的运行状态,查看报告,杀掉一些进程等等……


    关于 Crontab ,维基百科上的词条 Crontab非常好。可惜这个地址在国内不用代理访问不到。

    虽然关于 Crontab 的介绍到处都是,详细读了一遍这个词条,收获还是有的。Crontab 这个名字来自 "chronos",一个古希腊语, “时间”的意思.

    常见陷阱

    每个SA、DBA 或者是普通的 Unix 用户,在第一次使用 Crontab 的时候都会遇到问题. 运行 Crontab 的常见错误包括如下几种:

    1) 出于测试目的新创建了一条 Cron JOB, 时间间隔必须超过两分钟,否则 JOB 将调度不到。如果必须忽略这两分钟的载入配置时间差,可以通过重新启动 Cron Daemon 做到。

    2) 从 Crontab 中启动 X Window 程序需要注意的事项:所以要么在程序前初始化 "DISPLAY=:0.0", 要么在应用程序后面追加参数 --display :0.0

    3) 命令中的 % 必须做转义处理: \% .我个人的意见是不要在命令行里带这个参数,干脆写到脚本里,然后调度该脚本即可。

    其实我倒是认为使用 Crontab 最常见的一个问题往往是因为环境变量不对。经常会看到论坛里有人问:为什么我的 Crontab 创建了不执行? 准备创建一条 Cron JOB 的时候,很多人都喜欢在命令行下运行一遍,因为这个时候环境变量是随着 Shell 自动带进来,在 Crontab 中则可能因为找不到正确的环境变量,JOB 就不能执行。这个小问题就像出天花,一次教训之后就都记得了。

    必须使用的一则技巧

    每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

    附: Crontab 的格式说明如下:

    * 逗号(',') 指定列表值。如: "1,3,4,7,8"
    * 中横线('-') 指定范围值 如 "1-6", 代表 "1,2,3,4,5,6"
    * 星号 ('*') 代表所有可能的值

    Linux(开源系统似乎都可以)下还有个 "/" 可以用. 在 Minute 字段上,*/15 表示每 15 分钟执行一次. 而这个特性在商业 Unix ,比如 AIX 上就没有.

    # Use the hash sign to prefix a comment 
    # +---------------- minute (0 - 59)
    # | +------------- hour (0 - 23)
    # | | +---------- day of month (1 - 31)
    # | | | +------- month (1 - 12)
    # | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
    # | | | | | # * * * * * command to be executed
     

  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/end/p/2361741.html
Copyright © 2011-2022 走看看