`
xiaoheliushuiya
  • 浏览: 416015 次
文章分类
社区版块
存档分类
最新评论

Liunx Crontab 定时的逻辑

 
阅读更多


在做活动项目时需要对时间的限制 就写模仿 crontab 写了一个


# utf-8

# '* * * * *'     -> 分 时 日 月 周
# '* * * 1-3 *'   -> 分 时 日 月 周
# '* * * 1,2,3 *' -> 分 时 日 月 周
# 01-59 01-23, 01-31, 01-12, 0-6

# simple :  CrontabUtil.new("20 09 * 04 2").check_time?
# simple :  CrontabUtil.new("20,21,40 * 29 04 2").check_time?
# simple :  CrontabUtil.new("20-40 09 29 04 2").check_time?
# return :  boolean 
class CrontabUtil
  attr_accessor :date, :minute, :hour, :day, :month, :week

  def initialize(cron_str, date=nil)
    return nil if cron_str.blank?

    init_data(cron_str)

    @date = date || Time.now
  end

  def check_time?
    check_minute? && check_hour? && check_day? && check_month? && check_week?
  end

  def check_minute?
    relatively(@date.strftime("%M"), @minute)
  end

  def check_hour?
    relatively(@date.strftime("%H"), @hour)
  end

  def check_day?
    relatively(@date.strftime("%d"), @day)
  end

  def check_month?
    relatively(@date.strftime("%m"), @month)
  end

  def check_week?
    relatively(@date.strftime("%w"), @week)
  end

  private
    def init_data(cron_str)
      cron_arr = cron_str.to_s.split(' ')
      return if cron_arr.size < 5

      @minute = cron_arr[0]
      @hour   = cron_arr[1]
      @day    = cron_arr[2]
      @month  = cron_arr[3]
      @week   = cron_arr[4]
    end

    def relatively(num,arr_str)
      return true if arr_str == '*'

      # 1. ','
      if arr_str.index ','
        return arr_str.split(',').include? num
      end
      # 2. '-'
      if arr_str.index('-')
        return (arr_str.split('-')[0]..arr_str.split('-')[1]).include? num
      end

      # 0. Integer
      if is_integer?(arr_str)
        return arr_str == num
      end

      return true
    end

    def is_integer?(str)
      begin
        return str.to_i.is_a? Integer
      rescue Exception => e
        return false
      end
      false
    end
end







分享到:
评论

相关推荐

    易语言 Crontab 定时任务执行模块 v1.2 支持单位秒 也可做计时器源码

    Crontab 是一种在 Linux 系统中广泛使用的定时任务管理机制,用于按照预设的时间表执行命令或脚本。这个易语言 Crontab 定时任务执行模块 v1.2 则是将这种功能移植到了易语言环境中,让开发者能够方便地在易语言程序...

    Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路

    在Linux系统中,`crontab`是一个非常实用的工具,用于设置周期性被执行的任务,常用于自动化运维工作。然而,在使用`crontab`定时执行Shell脚本时,可能会遇到一些问题,特别是在执行包含特定命令(如Java应用)的...

    Go开发的crontab 代替linux原生crontab.zip

    在嵌入式Linux开发中,经常需要进行定时任务的管理,传统的解决方案是利用Linux的原生`crontab`工具。然而,在某些情况下,如在资源有限的嵌入式设备上,可能需要更轻量级的替代方案。"Go开发的crontab 代替linux...

    Linux中使用Crontab定时监测维护Tomcat应用程序的方法

    ### Linux中使用Crontab定时监测维护Tomcat应用程序的方法 #### 概述 在现代IT运维工作中,确保关键业务系统的高可用性和稳定性至关重要。本文档详细介绍了一种利用Linux下的Crontab工具来定时监测并维护运行在...

    利用Crontab实现对Oracle数据库的定时备份.rar

    Crontab是Linux系统中的任务调度工具,能帮助我们自动化执行包括数据库备份在内的各种任务。本教程将详细阐述如何利用Crontab来实现Oracle数据库的定时备份。 首先,我们需要理解Oracle数据库的备份类型。Oracle...

    linux mysql定时备份脚本

    1. **打开crontab编辑器**:使用`crontab -e`命令打开定时任务配置文件。 2. **添加定时任务**:在编辑器中,你可以根据需要设置备份的时间,例如每天凌晨1点执行备份: ``` 0 1 * * * /bin/bash /path/to/mysql...

    Linux服务器利用crontab+workerman实现PHP定时向页面端推送消息

    首先以守护进程方式开启push.php:php push.php -d,然后再data.php中写出你的逻辑,放在推送数据$data['data']里,crontab定时任务跑data.php。 注:push.php开启后,页面端websocket中ws的链接与端口要与服务器地址...

    仿制Linux中定时任务Crontab v1.0-易语言

    总结来说,"仿制Linux中定时任务Crontab v1.0-易语言"是一个易语言环境下的定时任务管理模块,它复制了Linux Crontab的语法,允许用户以类似的方式设置秒级的定时任务。通过提供的源码,用户可以学习、定制和优化这...

    Django crontab定时任务模块操作方法解析

    - **删除定时任务**:使用`python manage.py crontab remove`命令可以删除所有的crontab定时任务。如果你想删除特定任务,你需要先了解该任务的ID,然后使用`python manage.py crontab remove &lt;ID&gt;`。 - **运行任务...

    linux下远程定时备份oracle数据库

    编辑`crontab -e`命令打开定时任务编辑器,然后根据需要设置备份频率,例如每天凌晨1点执行备份: ```bash 0 1 * * * /path/to/your/backup_script.sh ``` `backup_script.sh`是包含上述expdp命令的脚本,别忘了...

    Java编写的linux下定时通过ftp上传文件

    在终端中,使用`crontab -e`命令编辑定时任务文件。 - 添加一条定时任务,例如每小时执行一次Java程序: ``` 0 * * * * java -jar /path/to/your/app.jar ``` 这里的`/path/to/your/app.jar`应替换为实际的Java...

    Linux下定时启动CDC预定脚本

    ### Linux下定时启动CDC预定脚本 #### 概述 在Linux环境中,为了实时或定期地监控数据库变更数据(Change Data Capture,简称CDC),我们常常需要编写自动化脚本来实现这一功能。本文将详细介绍如何在Linux环境下...

    基于thinkphp框架的定时器(定时执行任务)

    在Linux终端中,使用`crontab -e`命令编辑Crontab配置。根据你的需求,设置定时执行的时间规则。例如,如果你希望每天凌晨1点执行一次任务,可以添加以下行: ``` 0 1 * * * ...

    Linux Crontab Shell脚本实现秒级定时任务的方法

    在Linux系统中,Crontab 是一种强大的定时任务调度工具,通常用于按设定的时间间隔执行特定的任务。然而,Crontab 默认的精度只到分钟,无法实现秒级定时任务。要实现在Linux中进行秒级定时任务,我们需要通过编写...

    Linux下定时备份MySQL数据库的Shell脚本.pdf

    4. **定时任务配置**:若希望定时执行备份,可以在`/etc/crontab`文件中添加相应的定时任务。例如,以下命令表示每天凌晨3点执行备份脚本: ``` 0 3 * * * root /usr/sbin/DataBackup ``` #### 四、注意事项 - *...

    thinkphp 5.1 定时任务,Crontab 计划任务-think-cron.zip

    Crontab是Linux系统中用于调度周期性任务的命令,它可以按照设定的时间间隔运行指定的脚本或程序。Crontab配置文件包含一系列规则,每条规则定义了一个任务的执行时间及要执行的命令。 三、配置ThinkPHP 5.1的...

    linux-运用crontab检测程序是否在运行可通过检测进程或检测端口

    在Linux系统管理中,定期执行任务是不可或缺的一部分,而`crontab`工具就是实现这一功能的核心组件。它允许用户设定定时任务,按照预设的时间间隔执行特定的命令或者脚本。在标题和描述中提到的场景,我们将讨论如何...

    linux下定时备份ORALCE数据库

    然后,通过`crontab -e`编辑crontab配置,添加定时任务。例如,如果希望每天凌晨0点执行备份,可以在crontab文件中添加一行`0 0 * * * /bin/bash /path/to/oracle_backup.sh`,这样就能确保脚本按计划执行。 总结来...

    linux下mysql定时备份

    ### Linux下MySQL定时备份知识点详解 #### 一、概述 在Linux环境中,为了确保数据的安全性和可用性,定期对MySQL数据库进行备份是非常重要的。本文将详细介绍如何在Linux系统下设置MySQL数据库的定时备份,包括...

    Linux cron定时执行jar

    最后,`crontab_test工程.rar`可能是一个包含Java项目源代码的压缩文件,解压后可以查看源代码,理解程序逻辑,也可以用于重新构建或调试`jar`文件。 总结,使用Linux `cron`定时执行`.jar`程序涉及以下步骤: 1. ...

Global site tag (gtag.js) - Google Analytics