• Linux:crond(crontab)定时任务


    一、、定义

    Crond 是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件。一般在安装完系统时,crond会默认存在。

    crond默认每分钟会检查系统中是否有需要执行的定时任务。如果有,则会根据实现定义好的 规则执行这个定时任务

    秒级任务:crond实现不了,,一般自己写shell守护进程

    二、为什么需要定时任务

    定时任务可以帮我们实现自动备份。

    window定时任务:

    开始-附件-系统工具-任务计划程序-创建基本任务

    linux定时任务:分为两种,

    1、系统自身定期执行的任务 /etc/cron

    2、用户执行的定时任务

    三、定时任务分类

    1)at    适合执行一次就结束的定时任务。一般不怎么用,依赖服务atd

    2)anacron  适合非7*24h开机的服务器准备。一般以天为周期,或每次开机后执行的。检测停机期间没有执行的任务,在开机后一次性执行一遍。

    3)crond  默认每分钟检查是否有要执行的任务,有的话执行。crond是一个定时任务的守护进程。crontab时一个命令,是用户来设置定时任务规则的

    四、常用命令

    crontab -l  查看crontab内容(内容在 /var/spool/cron/root  文件中,其中root是用户的名字。)   该命令=======cat /var/spool/cron/root

    crontab -e  编辑crontab内容,且可以帮助检查语法。如果语法有错会无法保存。该命令=======vi /var/spool/cron/root   ,vi不会检查语法

    crontab -i  删除crontab内容,删除前会确认提示(用的很少)

    crontab -r  删除crontab内容

    crontab -u user  指定使用的用户执行任务

    五、定时任务指令的使用格式

    用户的定时任务分为6段,每段之间用空格分开,前5段为时间的设定段。第6段为所要执行的命令或脚本任务。系统的定时任务分为8段

    时间段的格式:

    01 * * * * cmd  命令

    02 * * * * /bin/sh xx.sh  脚本文件

    第一列:分钟,minnite 数值在0-59,如果*,表示每分

    第二列:小时,hour  数值在0-23,如果*,表示每小时

    第三列:日,day 数值1-31,如果*,表示每日

    第四列:月,month 数字1-12,如果*,表示每月

    第五列:星期 day of week 数字0-7(sunday=0或者7)

    语法中的符号:

    *   表示任意时间都。假设00 23 * *  * cmd   表示每天23点00做cmd任务。日月周都用*代替

    -  表示一个时间范围,假设00 17-19 * * * cmd 表示每天的17-19点整点做cmd任务,也就是17,18,19点做

    ,  分割时间段,假设30 17,18,19 * * * cmd,表示每天的17点30,18点30,19点30,执行cmd任务

    /n  每隔n单位, n表示数字。假设 */10 * * *  * cmd表示每隔10min执行一次cmd

    /etc/init.d/crond stats   查看crond服务状态

    实例:

    创建一个定时任务,每分钟向一个文件中增加内容

    1、编辑定时任务,crontab -e   写定时任务命令   * * * * * echo zy >> /server/log/zy.log 每分钟向zy.log文件输入zy

    2、保存

    3、查看定时任务  crontab -l 

    4、tail -f /server/log/zy  实时监控,看是否实行了定时任务

    脚本文件以.sh结尾。执行脚本文件   sh xxx.sh

    创建要给定时任务,放到sh文件中,执行。

    crontab -e ,或者操作/var/spool/cron/root

    echo "00 09,14 * * 6,7 /bin/sh /server/scripts/zy.sh" >> /var/spool/cron/root >/dev/null 2>&1

     

    定时任务结尾要加上  >/dev/null 2>&1  等价于1>/dev/null       2>/dev/null  ,意思就是把所有输出都追加到/dev/null中。

    2>&1就是把标准错误重定向到标准输出(>&)

    1>  正确的结果追加进后面的文件

    2>  错误的结果追加进后面的文件

    echo aaa 1>a.log 2>b.log 结果,会发现aaa追加进入了a.log中,因为前面echo aaa没有错误,正确,所以追加到1>a.log中

    ech aaa  1>a.log 2>b.log 结果,会发现aaa追加进入了b.log中,因为前面ech aaa有错误

    如果不加 >/dev/null 2>&1   邮件服务/var/spool/clientmqueue/ 文件数会过多,导致inode被耗尽。当定时任务被执行时,会给系统发邮件,系统默认的时sendmail服务经常是关闭的,所以定时任务发送的邮件就会临时堆在/var/spool/clientmqueue/.时间久了,文件数就会很多。

    当过多时,可以进入目录中,删除   ls | xargs rm -rf 

    rpm -qa | grep sendmail 查看是否安装了这个邮件服务。然后看 var/spool/是否有这个clientmqueue 目录。如果都没有,那执行定时任务的时候也就不会发邮件,不会出现满的现象

    如果sendmail服务启动,/etc/init.d/sendmail start ,则就会把/clientmqueue/目录下的文件发送出去,可以查看下,就没有了

    六、给指定用户创建定时任务

    crontab -u zy -e 创建定时任务。成功后,会再/var/spool/cron/下生成一个zy文件,可查看定时任务

    七、系统定时任务

    /var/log/messages

    /var/log/secure

    /var/log/maillog

    /var/log/spooler

    /var/log/boot.log

    /var/log/cron

    八、环境变量导致定时任务失败

    定时任务脚本中,如果有系统或者用户环境变量,会不识别。需要重新定义,或者加载下放环境变量的文件

    九、定时任务的log在/var/log/cron可看

  • 相关阅读:
    PowerDesigner使用教程(一)
    为自己的博客园增加打赏功能[只需五步]
    [Python自学] DRF (4) (权限组件和频率组件)
    [Python自学] DRF (3) (认证组件)
    [Python自学] DRF (2) (视图类的封装)
    [踩坑] Django "OverflowError: Python int too large to convert to C long" 错误
    [Python自学] DRF (1)
    [Python自学] 设计模式之单例模式
    [Python自学] Django的admin组件
    [Python自学] Django的认证系统
  • 原文地址:https://www.cnblogs.com/bendouyao/p/10084104.html
Copyright © 2020-2023  润新知