• CentOS 下使用 cron crond crontab 执行定时任务


    前言

    crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。其中:

    1. cron是服务名称;
    1. crond是后台进程;
    1. crontab是计划任务表;

    安装

    yum install crontabs
    

    服务命令

    1、/sbin/service crond start          启动服务

    2、/sbin/service crond stop          关闭服务

    3、/sbin/service crond restart       重启服务

    4、/sbin/service crond reload       重新载入配置

    5、/sbin/service crond status       服务是否运行

    crontab 配置文件基本格式

    关于 crontab 设定时间的具体配置请自行搜索,这里不做详细说明

    命令写法:分 时 日 月 周  命令

    第1列表示分钟1~59 每分钟用或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列 表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令

     # Use the hash sign to prefix a comment
    # +—————- 分钟1~59 每分钟用或者 */1表示 
    # | +————- 小时1~23(0表示0点)
    # | | +———- 日期1~31
    # | | | +——- 表示月份1~12 
    # | | | | +—- 星期0~6(0表示星期天)
    # | | | | | +—-要运行的命令 
    # * * * * * command to be executed
    

    使用

    这里我把脚本都放到了 /srv/test 目录下。我们以这个目录讲解

    1. 创建一个 test.sh 文件

    # test.sh 文件内容
    
    echo "Hello World"
    

    2. 给 test.sh 脚本授权

    # 赋予 test.sh 可执行权限
    chmod +x test.sh
    

    3. 创建cron脚本文件,命名为crontest.cron(文件名称可以自定义)

    脚本最后必须要留有一个空行

    # crontest.cron 文件内容
    
    # 每小时运行一遍 test.sh 脚本, 这里 test.sh 是第一步创建的 shell 脚本,我们把想要执行的命令都写到这个脚本里
    0 * * * * /srv/test/test.sh
    
    # --这里命令可以写多个--
    # 每天 0 点 0 分 执行 test1.sh 脚本
    0 0 * * * /srv/test/test1.sh
    
    

    4. 添加/更新 定时任务。执行命令

    crontab crontest.cron
    

    完成

    日志

    查看日志

    cron 的日志目录为: /var/log/cron , 我们可以调用 tail -f /var/log/cron 查看实时日志,也可以调用 tail -n 50 /var/log/cron 查看历史日志

    输出 shell 脚本日志

    有时候我们想要把执行脚本的日志存储到文件中,我们可以这样写

    # 这里需要特别注意 2>&1 是写到后面的。
    * * * * * /srv/test/test.sh >> /srv/test/log.log 2>&1
    

    辅助操作

    查看定时任务是否成功

    方法一

    crontab -l
    

    方法二

    检测/var/spool/cron下是否生成对应cron脚本

    设置秒级别的任务

    crontab最小时间单位是分,如果需要在秒级设置定时任务,可以使用sleep延时

    如果需要每 10 秒执行一次任务,那么一分钟就需要执行 6 次, 我们每分钟同时执行 6 个 crontab 任务,即:

    第一个任务 0 秒执行,第二个任务延时 10 秒执行,第三个任务延时 20 秒执行以此类推,得到

    温馨提示

    提示1 环境变量问题

    crond 的任务计划并不会调用用户设置的环境变量,它有自己的环境变量

    当你用到一些命令时,比如 curl / sh 等需要环境变量的命令,手工执行脚本时是正常的,但用 crond 执行的时候就会有问题

    这里有两种解决办法:

    1. 使用命令的绝对路径,例如: /usr/bin/curl
    2. 将环境变量添加到 /etc/crontab 中。/etc/crontab 是cront的配置文件

    提示2 多命令处理

    ceontab中不方便执行语句繁多的任务,推荐将多条命令写到shell脚本或 python 脚本中进行执行

    提示3 脚本路径问题

    ceontab 中添加的 command 运行脚本必须是全路径命令。不然会找不到脚本

    后记

    crontab 命令很重要,也后有用

    博客中所涉及到的图片都有版权,请谨慎使用
  • 相关阅读:
    我的游戏开发工作生涯要开始了
    关于碰撞检测和物理引擎
    关于havok
    认识多渲染目标(Multiple Render Targets)技术
    无限分级的tree
    运用ThreadLocal解决jdbc事务管理
    盒子模型 计算
    监听域对象
    爱恨原则 就近原则 (LVHA)
    java database connection
  • 原文地址:https://www.cnblogs.com/shuiche/p/14459926.html
Copyright © 2020-2023  润新知