• crond定时任务服务


    一、crond定时任务概述

    1、什么是crond

      crond服务时Linux系统用来定期执行命令或者指定程序任务的一种服务或者软件。一般在Centos5/Centos6系统中默认安装。crond服务默认是每分钟检查系统中是否有定期执行的定时任务,如果有就会根据预先编写的程序来执行这个定时任务。

    2、为什么需要crond

    服务器上有很重要的数据需要备份通过crond执行定时任务可以进行备份,另外还可以执行一些需要定时执行的脚本。

    3、定时任务的分类

    • 系统定时执行任务
    • 用户定时执行任务
    # 系统定时任务
    [root@localhost ~]# ll /etc/|grep cron
    -rw-------.  1 root root      541 Mar 31  2016 anacrontab
    drwxr-xr-x.  2 root root       36 Oct 11 22:19 cron.d
    drwxr-xr-x.  2 root root       42 Oct  1 14:30 cron.daily
    -rw-------.  1 root root        0 Mar 31  2016 cron.deny
    drwxr-xr-x.  2 root root       22 Oct  1 14:29 cron.hourly
    drwxr-xr-x.  2 root root        6 Jun 10  2014 cron.monthly
    -rw-r--r--.  1 root root      485 Oct 13 22:24 crontab
    -rw-r--r--.  1 root root      451 Oct 13 22:24 crontab.ori
    drwxr-xr-x.  2 root root        6 Jun 10  2014 cron.weekly
    
    # 用户执行的定时任务会创建在用户的目录下通过crontab -l 可以查看

    下面主要介绍用户自定义的定时任务。

    二、crond定时任务使用

    crond是应用的程序,而crontab命令则是设置crond定时服务规则的命令。

    (一)crontab命令

    通过--help命令可以查看其用法:

    [root@localhost ~]# crontab --help
    crontab: invalid option -- '-'
    crontab: usage error: unrecognized option
    Usage:
     crontab [options] file
     crontab [options]
     crontab -n [hostname]
    
    Options:
     -u <user>  define user
     -e         edit user's crontab
     -l         list user's crontab
     -r         delete user's crontab
     -i         prompt before deleting
     -n <host>  set host in cluster to run users' crontabs
     -c         get host in cluster to run users' crontabs
     -s         selinux context
     -x <mask>  enable debugging
    
    Default operation is replace, per 1003.2
    View Code
    参数 说明 实例
    -u 指定用户执行定时任务 crontab -u bright -l
    -e 编辑crontab文件内容,e可理解为edit的缩写 crontab -e
    -l 查看crontab文件的内容,l可理解为list的缩写 crontab -l
    -r 删除crontab文件的内容 crontab -r
    -i 删除crontab文件内容前会进行提示 crontab -i

    crontab命令实际上就是在操作/var/spool/cron/当前用户 这样的文件。

      当用户创建完定时任务规则后,这些规则的文件会默认存放到/var/spool/cron下面,其中crontab的配置文件名与用户名称一致,比如root用户的定时任务配置文件会存放在/var/spool/cron/root。

      系统和用户自定义的定时任务书写格式不同。其中用户的定时任务分为6段,每段通过空格进行区分;系统定时任务(/etc/crontab)分为8段,每段也是通过空格进行区分。它们前5段是时间设定段,后面是执行的命令或者脚本。

    [root@localhost ~]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    * */1 * * * ntpdate time.nist.gov

     每段含义:

    说明 取值范围
    第一段 代表分钟 00-59
    第二段 代表小时 00-23
    第三段 代表天 01-31
    第四段 代表月 01-12
    第五段 代表周几 0-7(0和7都表示星期日)

    crontab中特殊符号含义:

    符号 说明
    * 表示任意时间,可以理解为“每”的意思,比如:12 * * * * cmd表示每时的12分执行cmd命令
    - 表示一个时间段,比如:00-12 * * * * cmd表示每时的12分钟前都在执行cmd命令
    表示分割时间段,比如:12 11,12,13 * * * cmd表示每日11、12、13点的12分执行cmd命令
    /n n表示数字,表示每隔n个单位。例如:每隔10min执行一次cmd命令,*/10 * * * * cmd,*/10中的*表示00-59,也可以协程00-59/10

      注意,对于定时任务,如果说到小时级别,最多提到的就是天。对于crontab中规则可按照“分、时、日、月、周”进行记忆。显然对于秒级的任务crond是无能为力的,只能通过其它手段来实现。

    (二)实例

    1、编辑语法

    命令 实际操作 说明
    crontab -e /var/spool/cron/root crontab -e会检查语法,如果通过echo、vim等进行编辑则不会
    visudo /etc/sudoers visudo会检查语法,如果通过echo、vim等进行编辑则不会

    2、实例 

    # 每分钟打印一次名字到/project/temp/bright.log文件中
    crontab -e
    
    * * * * * echo "Bright" >> /project/temp/bright.log
    
    # 每周六、日上午10:00打印日期
    [root@localhost temp]# touch print.sh
    [root@localhost temp]# echo 'date +%F'>print.sh 
    crontab -e
    
    * 10 * * 0,6 /bin/sh /project/temp/print.sh>/dev/null 2>&1

    3、注意事项

    • 定时任务加必须要的注释进行说明
    • 执行shell脚本前加/bin/sh ,这样可以在脚本没有执行权限下进行定时执行
    • 尽量使用crontab -e,这样进行语法检查
    • 定时任务命令结尾加 >/dev/null 2>&1

    (三) >/dev/null 2>&1

      >/dev/null 2>&1等价于1>/dev/null  2>/dev/null,其中,>表示重定向,/dev/null为特殊的字符设备文件,表示黑洞设备或者空设备。2>&1表示让标准错误和标准输出一样。这个命令表示将脚本的正常输出和错误都重定向到/dev/null,不记录任何输出。

    1、重定向

    将数据传到其它地方,这个命令会将本该出现在屏幕上的数据传输到其它地方。

    符号 说明
    >或者1> 输出重定向。把前面的输出输入到后面的文件中,会删除文件原有的内容。
    >>或者1>> 追加重定向。把前面的输出追加到后面的文件中,不会删除文件原有的内容。
    <或者<0 输入重定向。用于改变命令的输入,指定输入内容,后跟文件名。
    <<或者<<0 输入重定向。用来表示“输入结束”,后跟字符串。
    2> 错误重定向。把错误信息输入到后面的文件中,会删除文件原有的内容。
    2>> 错误追加重定向。把错误信息追加到后面的文件中,不会删除文件原有的内容。

    2、注意

      如果定时命令不加>/dev/null 2>&1,可能会有大量的输出信息,时间长了,由于未开启邮件服务导致临时文件目录/var/spool/clientmqueue被占满,从而无可用的innode,系统磁盘被占满。

      使用上面的命令则会解决这个问题,另外如果系统是centos5.8以上的,比如centos6.x一般不会有上述问题。

  • 相关阅读:
    ACM-ICPC SouthWestern Europe Regional Contest 2017题解
    Ubuntu系统Anaconda下载安装与切换源教程
    HZNUOJ开发者学习计划
    Codeforces Round #473 (Div. 2)
    正方教务系统自动评教代码
    QQ空间自动点赞
    妈妈我要当全栈工程师
    基于Koa开发学生导师管理系统
    SSH框架实现登陆界面
    谈ACM生涯总结的经验
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14027394.html
Copyright © 2020-2023  润新知