zoukankan      html  css  js  c++  java
  • 手把手教你crontab排障

     crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux下的任务调度分为两类,系统任务调度和用户任务调度。系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

    crontab-tshoot01

    crontab 配置文件
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    # .—————- 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
    # | | | | |
    # m h dom mon dow command
    # * * * * * command will be executed
    

    例如:

    */5 * * * * root /usr/libexec/atrun
    

    minute(m) : 代表一小时内的第几分,范围 0-59。
    hour (h) : 代表一天中的第几小时,范围 0-23。
    mday (dom) : 代表一个月中的第几天,范围 1-31。
    month(mon) : 代表一年中第几个月,范围 1-12。
    wday (dow) : 代表星期几,范围 0-7 (0及7都是星期天)。
    who : 要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。
    command(command):所要执行的指令。

    crond 开机启动
    crond 启动/关闭脚本
    /etc/init.d/crond help
    Usage: /etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
    
    crond 加入到开机启动
    chkconfig crond on
    

    crontab定时任务不执行问题

    crontab定时任务不执行问题

    排查原因步骤如下:

    首先,确认服务器是否开启定时任务计划服务,只有root用户才能对crond服务进行开启和关闭

    [root@mimvp-bj script]# service crond status
    crond is stopped
    [root@mimvp-bj script]# service crond start
    Starting crond: [ OK ]
    [root@mimvp-bj script]# service crond status
    crond (pid 24577) is running…
    

    请确保crond状态为 is running…

    如果crond状态为 crond is stopped ,则定时任务服务不会生效故无法执行,我遇到的crontab不执行就是这个原因

    crontab 常见错误的几个问题

    编辑 crontab :

    crontab -e
    
    # m h dom mon dow command
    SHELL=/bin/bash
    30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh
    

    Ctrl + O (写入)——》 Enter键(保存文件名)——》 Ctrl + X(退出)

    输入查看命令:

    crontab -l
    
    # m h dom mon dow command
    SHELL=/bin/bash
    30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推荐用此方式)
    
    如果遇到shell语法错误
    Syntax error: "(" unexpected
    

    解决方法:

    需指定shell解释器命令:SHELL=/bin/bash(请参见上面 crontab编辑示例 SHELL=/bin/bash)

    或者参见: LINUX – BASH Syntax Error

    如果遇到路径错误

    在 /var/spool/crontab/yanggang 中,添加了如下命令,在日志文件 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路径

    30 * * * * /home/barry/top800/top10/top10_fruits/top10_all.sh

    30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh

    这是因为你在crontab中使用了绝对路径执行脚本 top10_all.sh,因此在脚本 top10_all.sh 中引用的其它脚本也都需要使用绝对路径,才能被crontab找到并执行。

    那么该如何避免绝对路径呢,推荐采用如下格式:

    30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推荐用此方式)

    先进入该目录,然后在执行脚本;否则,执行脚本中的其它脚本都需要加绝对路径

    本文转载地址:https://www.linuxprobe.com/crontab-tshoot.html

  • 相关阅读:
    从开发人员角度对软件测试的些许理解
    ObjectiveC的语法
    HttpModule与HttpHandler使用
    我为什么学习HASKELL?
    Linux下C语言编程环境Make命令和Makefile
    一个简单的验证框架
    程序员之路
    ObjectiveC语法之ObjectiveC语言和IOS系统(简介,语法,系统结构)
    Teamcity
    Python进阶 错误处理
  • 原文地址:https://www.cnblogs.com/linuxprobe/p/5880313.html
Copyright © 2011-2022 走看看