zoukankan      html  css  js  c++  java
  • Linux课程笔记 Crond介绍

    1. 定时任务比较及cron语法

    Linux的任务调度可以分为两类:

    1. 系统自身执行的任务
    2. 用户执行的工作

    Linux系统下另外两种定时任务软件:

    at:适合仅执行一次的调度任务,需要启动一个名为atd的服务

    anacron:这个命令主要用于非7*24小时开机的服务器,anacron并不能指定具体时间执行任务,而是以天为周期或者在系统每次开机后需要执行的任务,它会检测停机期间应该进行,但是并没有进行的crontab任务工作,执行一遍。

    这两种比较少用

    指令语法:

    Crontab  [-u user] file

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

    指令说明:

    通过crontab我们可以在固定的间隔时间执行指定的系统指令或shell脚本,时间间隔可以是分钟、小时、日、月、周及以上的任意组合(日和周不要组合)。

    2. 使用者权限文件

    文件

    说明

    /etc/cron.deny

    该文件所列用户不允许使用crontab命令

    /etc/cron.allow

    该文件所列用户允许使用crontab命令

    /var/spool/cron

    所有用户crontab文件存放的目录,以用户名命名

    3. 指令选项说明含义表

    参数名称

    含义

    指定示例

    -l(字母)

    显示用户crontab文件内容,

    crontab  -l

    -e

    进入vi编辑用户crontab文件

    crontab  -e

    -i

    删除用户crontab文件前确认提示

    crontab  -i

    -r

    从crontab目录中删除用户crontab文件

    crontab  -r

    -u user

    指定使用者

    crontab  –u qinbf –l

    4. 指令的使用格式

          默认情况下,用户所见建立的crontab文件存放于/var/spool/cron文件中,其crontab对应的文件名与用户名一致。

          格式共分为七段,前五段为时间设定段,第六段以哪个用户执行crontab(默认是当前用户),第七段为所要执行的命令段。

    5. Crontab时间段的含义如表:

    含义

    取值范围

    第一段

    分钟

    00-59

    第二段

    小时

    00-23

    第三段

    日期

    01-31

    第四段

    月份

    01-12

    第五段

    星期几

    0-6

    6. 特殊符号含义如下:

    特殊符号

    含义

    *

    表示任意时间都

    -

    减号,表示分隔符,表示一个时间范围段

    逗号,表示分隔时间段的意思

    /n

    n代表数字,“即每隔n单位时间”

    7. crontab依赖的服务:

    chkconfig   --list |grep  crond

    /etc/init.d/crond  status

    8. crontab实例说明

    1) 30  3,12  *  *  * /bin/sh /scripts/oldboy.sh

    2) 30  */6  *  *  * /bin/sh /scripts/oldboy.sh  #--à第二列*/6表示每6个小时,也相当于6,12,18,24

    3)30  8-18/2  *  *  * /bin/sh /scripts/oldboy.sh #-à第二列8-18/2代表早晨8点到下午18点之间每2小时,也相当于8,10,12,14,16,18

    4)*  23-7/1  *  *  *  /application/apachectl restart   #----à实际上的效果是,晚上到早上的7点,每小时的每一分钟都重启apache,如果是想达到每小时才重启的话,前面的分钟段,可以设置为0或者30之类的

    5)服务器时间同步:系统每5分钟同步一次时间

    [root@test2 ~]# crontab -l

    */5 * * * * /sbin/ntpdate time.windows.com  >/dev/dull 2&>1

    9. crontab命令生产环境专业写法

    例1:每一分钟打印一次自己的名字到/server/log/自己的名字命令的文件中。

    答案:

    #print char task by oldboy for programmer A at 2010-12-12

    */1  *  *  *  *  echo  “oldboy” >>/server/log/oldboy.log 2>&1

    例2:每周六、日上午9:00和下午14:00来老男孩linux运维实战培训中心学习(/server/script/oldboy.sh)

    答案:

    #cron  job for ett by oldboy 2010-12-12

    00       09,14  *  *  6,0  /bin/sh /server/script/oldboy.sh >/dev/null 2>&1

    针对以上两生产例子说明:

    1写定时任务要写清注释是个好习惯,比如什么人,什么时间,因为谁,做了什么事

    2执行任务时可以省略用户,在执行脚本时,尽量带上/bin/sh,否则有可能因为脚本没有执行权限而无法执行

    3需要root权限执行的任务可以登录到root用户下然后设置,如果不需要root权限,可以登录到普通用户下,然后设置,这里要注意不同用户的环境变量问题。

    4定时任务命令的结尾最好加上>/dev/null 2>&1等内容,如果需要打印日志,可以追加到指定日志,不推荐留这种不专业的做法

    如果定时任务不加>/dev/null 2>&1等命令设置,时间长了,可能会导致邮件临时目录/var/spool/clientmqueue文件数猛增,占用大量磁盘空间inode节点。

    5在开发定时任务程序或脚本时,在调试好脚本程序后,应尽量把DEBUG及屏幕输出的内容命令去掉,如果还需要,可定向到日志里。

    10. crontab生产解决案例

    案例1:No  space  left  on  device故障1

    在设置crontab时,提示No  space  left  on device。用df –k检查还有空间,用df –i显示/var已占用100%,如果inode耗尽,则系统上下将不能创建文件。

    在/var/spool/clientmqueue/下有超多的文件ls半天没反应,用rm  -fr  *会自动跳出root,然后用xargs来配合解决。cd  /var/spool/clientmqueue&& ls |xargs rm –f

    最后清理了该目录的内容。当然,如果文件数超多,执行ls |xargs rm –f也会长时间无反应,此时也可以直接cd /var/spool/&&rm –rf clientmqueue,然后mkdir clientmqueque && chmod 770 clientmqueue &&chown smmsp,smmsp  -R /var/spool/clientmqueue。

    原因分析:系统中,cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就会产生这些文件。

    解决办法:开启邮件服务,并将crontab里面的命令后面加上>/dev/null 2>&1,在做定时脚本时,把屏幕输出定向到日志中。

    案例2:No space left on device故障2

    (1) when you create a new directory of file,system will say :No space left on device

    [ett@linux /var]#mkdir ett

    Mkdir:cannot create directory ett’:No space left on device

    (2) when create crontab for account ett,you will receive error information as follows;

    Crotab:installing new crontab

    Cron/tmp.6655:No space left on device

    Crontab:edits left in /tmp/crontab.6655

    解决过程

    1检查分区使用率,df  -h

    2检查/var/lock下的文件,删除/var/lock/subsys/nfx,touch /var/ett,成功创建文件,删除/var/ett

    3发现删除/var/lock下的任意一个文件后,都可以成功创建一个文件,再创建就会失败。

    4将检查扩大到/var/下的其他目录

    5怀疑分区/var/de inode用尽导致上述问题,检查inode使用率

    6分区/var/没有配置quota

    7发现/var/spool/clientmqueue下面有太多的文件,由于系统的邮件服务配置有问题,导致系统发出的邮件堆积在队列目录中,占用大量的inode节点。

    处理方法:确认/var/spool/clientmqueue下的文件已经无用,删除之,如果文件数量太大,无法使用rm -f * 直接删除,可以选择ls |xargs rm -f 或者直接删除上级目录,然后重建该目录,并赋予正确的属主和权限。

    最好的解决办法是重新设置系统邮件,使其能正常发送或找到发邮件的源头,如本文的crontab任务。

    结论:分区/var/的 inode全部用尽,free inode为0,导致无法创建新的文件或目录,以后遇到类似的问题要注意用df  -li检查inode的使用情况。

     

    11. 生产场景如何调试crontab定时任务

    1. 在调试时,把任务执行频率调大一点,如:每分钟、每5分钟执行一次;
    2. 用正确的执行任务时间,设置完成后,可以修改下系统当前时间;
    3. 在脚本中加入日志输出,然后把输出打印到指定的日志中,然后观察日志内容,看是否执行正确;
    4. 注意:*/1  *  *  *  *  echo “==” >> /tmp/oldboy.log  >/dev/null  2>&1这种隐蔽的无法正确执行的任务配置;
    5. 执行脚本中>>或者>后的文件名要加上绝对路径。
    6. 注意环境变量导致的定时任务故障,比如运行java程序的时候,环境变量要在脚本中重新export一下。
    1. 通过定时任务日志查看调试定时任务

    12. 定时任务生产问题8条箴言

    1. 环境变量问题,典型的是如java程序运行案例
    2. 任务路径问题,脚本要用绝对路径
    3. 脚本权限问题,最好带上/bin/bash,防止忘了为脚本赋予执行的权限带来问题
    4. 时间变量问题,%号在crontab中被认为是newline,需要用转义,crontab中有“date +%Y%m%d”,必须替换为“date +\%Y\%m\%d”,但写在脚本中就不需要了,这也是老师推荐用脚本文件的原因之一。
    5. >/dev/null 2>&1问题
    6. 定时任务加注释
    7. 使用脚本程序代替命令
    8. 避免不必要的程序输出

      

     13. 定时清理垃圾文件

      

    crontab  -l |tail -2

    #del clientmqueue  files  by oldboy at 2010-09-26

    00 00  *  *  0 /bin/bash  /server/scripts/del_sys_file.sh > /dev/null  2>&1

    cat /server/scripts/del_sys_file.sh

    find /var/spool/clientmqueue/  -type  f | xargs  rm  -f

    14. crond章节重点

    1) 用户使用crontab  -e自定义定时任务项目,分为六段,[分、时、日、月、周、指令]。

    2) 系统的/etc/crontab定时任务项目分为7段,[分、时、日、月、周、用户、指令]。

    3) crontab定时任务的5个生产基本要领和7点调试技巧,尤其是学会看服务日志来调试

    4) 生产环境使用crontab定时任务要注意的8点箴言

    5) 重视生产的案例及通过案例为载体来学习巩固技术知识

  • 相关阅读:
    基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
    基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则
    基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则
    基于ABP落地领域驱动设计-01.全景图
    Es6-find&map&filter&reduce
    vue之监听事件
    list map互相转换
    springcloud 返回实体类忽略属性
    Apache NetBeans IDE 12.3 双击无反应怪事
    前端--- 前端调试经验总结
  • 原文地址:https://www.cnblogs.com/fengze/p/6752488.html
Copyright © 2011-2022 走看看