• 定时任务crond生产实战经验


    1.什么是定时任务
    crond是linux下用来定期执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完 成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。有点类似于闹钟。

    特殊需求:crond服务搞不定了,一般工作中写脚本守护程序执行。
    Linux下的任务调度分为两类,系统任务调度和用户任务调度。(守护进程:持续运行的程序)

    类似的定时任务还有:at,anacron,但这两个生产工作中很少使用,可以忽略

    1.1 系统任务调度:

    系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。

    在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
    /etc/crontab文件包括下面几行:

    SHELL=/bin/bash

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

    MAILTO=root

    HOME=/

    run-parts

    01 * * * * root run-parts /etc/cron.hourly

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

    22 4 * * 0 root run-parts /etc/cron.weekly

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

    2.2 用户任务调度:

    用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。

    用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

    2.crontab工具的使用
    (1)crontab的使用格式

    crontab常用的使用格式有如下两种:
    crontab [-u user] [file]
    crontab [-u user] [-e|-l|-r |-i]

    选项含义如下:

    • -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
    • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
    • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
    • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab内容。
    • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
    • -i:在删除用户的crontab文件时给确认提示。

    PS : crontab [-e|-l|-r |-i]其实就是操作/etc/spool/cron/下的用户文件

    (2)crontab文件的含义

    wKiom1eYsuLhMftxAAGHfSDjyBc388.jpg-wh_50

    用户所建立的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:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    在以上各个字段中,还可以使用以下特殊字符:

    • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
    • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
    • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
    • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

    同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

    (3)crontab文件举例

    0 */3 * * * /usr/local/apache2/apachectl restart

    表示每隔3个小时重启apache服务一次。

    30 3 * * 6 /webdata/bin/backup.sh

    表示每周六的3点30分执行/webdata/bin/backup.sh脚本的操作。

    0 0 1,20 * * fsck /dev/sdb8

    表示每个月的1号和20号检查/dev/sdb8磁盘设备。

    10 5 */5 * * echo "">/usr/local/apache2/log/access_log

    表示每个月的5号、10号、15号、20号、25号、30号的5点10分执行清理apache日志操作。

    PS:周和日尽量不要同时用,否则可能达不到想要的效果

    例:每周日,上午9点听课

    00 09 * * 0 听课

    3.crontab实战步骤及注意事项
    3.1crontab打包实战

    1)进入打包文件或目录的上级目录进行打包

    2)定时任务是按小时,打包里的日期也要精确到小时

    3)确保命令执行正确,然后写到脚本(复制)

    4)定时任务命令或程序最好写到脚本里执行

    5)测试脚本正确性(定时任务怎么写,命令行就怎么测试)

    6)脚本测试好了,命令行的命令也要复制

    7)脚本的路径是要有规范

    8)定时打包或处理其他工作,不要再屏幕输出,可以打到日志文件里

    3.2工作中调试定时任务的方法

    1)增加执行任务频率调试任务

    每分钟或者系统时间之后5分钟执行,看看结果对不对

    某些任务不能用于生产环境,没有测试机会

    代码,配置变更发布流程:

    个人开发环境--办公测试环境--IDC机房测试环境--IDC正式环境(分组,灰度发布)

    2)调整系统时间调试任务(不能直接用于生产环境)保持5分钟

    3)通过脚本日志输出调试定时任务

    4)注意一些任务命令带来的问题

    tar zcvf echo 123 >a.log

    5)注意:环境变量导致定时任务故障(jave)

    6)通过crond定时任务服务日志调试定时任务(/var/log/cron)

    7)其他方法

    3.3crontab注意事项

    1)为定时任务规则加必要的注释

    2)执行shell脚本任务前加/bin/sh

    3)定时任务命令或脚本结尾加>/dev/null 2>&1

    4)定时任务命令或程序最好写到脚本里执行

    5)在指定用户下执行相关的定时任务

    6)生产任务程序不要随意打印输出信息

    tar zcvf echo 123 >a.log
    

    7)定时任务执行的脚本要规范路径(/server /scripts)

    8)配置定时任务规范操作过程

    PS:“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null因此标准错误也会重定向到/dev/null,避免邮件日志问题

  • 相关阅读:
    数字精确运算BigDecimal经常用法
    C3P0数据库连接池使用
    Theano学习笔记(四)——导数
    Leetcode--Merge Intervals
    1191 数轴染色
    P1021 邮票面值设计
    P1032 字串变换
    P1294 高手去散步
    P1832 A+B Problem(再升级)
    P1332 血色先锋队
  • 原文地址:https://www.cnblogs.com/yihr/p/12963067.html
Copyright © 2020-2023  润新知