GVKun编程网logo

计算何时执行cron作业,然后下次执行(根据cron表达式计算上一次次执行时间)

26

本篇文章给大家谈谈计算何时执行cron作业,然后下次执行,以及根据cron表达式计算上一次次执行时间的知识点,同时本文还将给你拓展1个30任务的Cron作业30个Cron作业每个执行1个任务、AWSG

本篇文章给大家谈谈计算何时执行cron作业,然后下次执行,以及根据cron表达式计算上一次次执行时间的知识点,同时本文还将给你拓展1个30任务的Cron作业30个Cron作业每个执行1个任务、AWS Glue - 如果行号存在差异,我可以先编写脚本来比较 2 个数据库,然后再执行 cron 作业吗?、crontab 执行过慢,上次未执行完,下次就来了,加锁处理、crontab定时执行c二进制文件问题等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

计算何时执行cron作业,然后下次执行(根据cron表达式计算上一次次执行时间)

计算何时执行cron作业,然后下次执行(根据cron表达式计算上一次次执行时间)

我有一个时间表“时间定义”

1 * * * * (every hour at xx:01)2 5 * * * (every day at 05:02)0 4 3 * * (every third day of the month at 04:00)* 2 * * 5 (every minute between 02:00 and 02:59 on fridays)

而且我有一个Unix时间戳。

有什么明显的方法可以找到(计算)下一次(在给定的时间戳之后)要执行的作业?

我正在使用PHP,但是问题应该与语言无关。

[更新]

类“ PHP Cron Parser
”(由Ray推荐)将计算应该执行CRON作业的最后时间,而不是下一次。

使其变得更容易:在我的情况下,cron时间参数仅是绝对值,单个数字或“ *”。没有时间范围,也没有“ * / 5”间隔。

答案1

小编典典

基本上,这与检查当前时间是否符合条件相反。所以像这样:

//Totaly made up languagenext = getTimeNow();next.addMinutes(1) //so that next is never nowdone = false;while (!done) {  if (cron.minute != ''*'' && next.minute != cron.minute) {    if (next.minute > cron.minute) {      next.addHours(1);    }    next.minute = cron.minute;  }  if (cron.hour != ''*'' && next.hour != cron.hour) {    if (next.hour > cron.hour) {      next.hour = cron.hour;      next.addDays(1);      next.minute = 0;      continue;    }    next.hour = cron.hour;    next.minute = 0;    continue;  }  if (cron.weekday != ''*'' && next.weekday != cron.weekday) {    deltaDays = cron.weekday - next.weekday //assume weekday is 0=sun, 1 ... 6=sat    if (deltaDays < 0) { deltaDays+=7; }    next.addDays(deltaDays);    next.hour = 0;    next.minute = 0;    continue;  }  if (cron.day != ''*'' && next.day != cron.day) {    if (next.day > cron.day || !next.month.hasDay(cron.day)) {      next.addMonths(1);      next.day = 1; //assume days 1..31      next.hour = 0;      next.minute = 0;      continue;    }    next.day = cron.day    next.hour = 0;    next.minute = 0;    continue;  }  if (cron.month != ''*'' && next.month != cron.month) {    if (next.month > cron.month) {      next.addMonths(12-next.month+cron.month)      next.day = 1; //assume days 1..31      next.hour = 0;      next.minute = 0;      continue;    }    next.month = cron.month;    next.day = 1;    next.hour = 0;    next.minute = 0;    continue;  }  done = true;}

我可能已经写了一些倒退。如果不是在每个主记录中都只是将当前时间等级加1,然后将较小的时间等级设置为0,然后继续,则它可能会更短,而不是在每个主要项目中都执行大于检查的步骤。但是,那么您将循环更多。像这样:

//Shorter more loopy versionnext = getTimeNow().addMinutes(1);while (true) {  if (cron.month != ''*'' && next.month != cron.month) {    next.addMonths(1);    next.day = 1;    next.hour = 0;    next.minute = 0;    continue;  }  if (cron.day != ''*'' && next.day != cron.day) {    next.addDays(1);    next.hour = 0;    next.minute = 0;    continue;  }  if (cron.weekday != ''*'' && next.weekday != cron.weekday) {    next.addDays(1);    next.hour = 0;    next.minute = 0;    continue;  }  if (cron.hour != ''*'' && next.hour != cron.hour) {    next.addHours(1);    next.minute = 0;    continue;  }  if (cron.minute != ''*'' && next.minute != cron.minute) {    next.addMinutes(1);    continue;  }  break;}

1个30任务的Cron作业30个Cron作业每个执行1个任务

1个30任务的Cron作业30个Cron作业每个执行1个任务

运行1个Cron作业执行30个任务对30个Cron作业每个执行1个在服务器负载上有什么不同? 或者将这两个条件在服务器上创build相同的负载?

如何让CRON调用正确的path

创build通过当前date备份命名的tar文件永远不会运行

Windows任务调度程序在几秒钟内执行任务

bash:$ _在cronjob中是空的

为什么从cron作业调用PHP_SAPI不等于“cli”?

运行一个执行30个任务的cron作业效率更高。

既然我假设他们都会同时运行,那么你只需要绑定一个进程而不是30个不同的进程。

虽然这不是原来的问题的一部分 – 保持30个不同的脚本将是一个头痛的问题。 更容易对一个脚本进行更改,正如下面的mu指出的那样。

这取决于所有任务是否必须是同步的,或者是否可以连续运行。

如果他们必须全部同步,那么你将不得不同时运行它们,因此将需要30个单独的工作,导致服务器上的尖峰。 如果能够一个接一个地运行,最好把它们安排成一个单一的cron工作。

如果你计划了30个cron作业,即使它们已经被序列化了,这也会导致你的服务器资源不必要的耗尽,因为现在即使它们不需要被同步,也有29个额外的进程争取ram, cpu,网络资源。

另外,如果任务完全相似,我更喜欢1个单独的cron脚本,脚本单独调用任务,而不必在crontab中维护30个单独的cron条目。

总结

以上是小编为你收集整理的1个30任务的Cron作业30个Cron作业每个执行1个任务全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

AWS Glue - 如果行号存在差异,我可以先编写脚本来比较 2 个数据库,然后再执行 cron 作业吗?

AWS Glue - 如果行号存在差异,我可以先编写脚本来比较 2 个数据库,然后再执行 cron 作业吗?

如何解决AWS Glue - 如果行号存在差异,我可以先编写脚本来比较 2 个数据库,然后再执行 cron 作业吗??

就像标题一样,我的老板要求我在半夜做一些清晰度检查之类的事情。

所以有一些事情,目前,我不知道该怎么做

  1. 构建源(或本地 cron)以连接到 AWS 胶水(我不知道该怎么做,也不知道如何设置以进行连接)

  2. 如何使用 AWS 胶来检查 2 个表的行,(不使用数据库驱动程序)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

crontab 执行过慢,上次未执行完,下次就来了,加锁处理

crontab 执行过慢,上次未执行完,下次就来了,加锁处理

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import logging
import os
import time
from os.path import dirname, abspath

import requests

PROJECT_DIR = dirname(dirname(dirname(abspath(__file__))))
print PROJECT_DIR
import sys

sys.path.insert(0, PROJECT_DIR)

if len(sys.argv) > 1:
    if sys.argv[1] == ''pro'':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings_pro")
    else:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings_test")
else:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings_test")

import django
from django.conf import settings

''''''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren''t loaded yet.
''''''
if django.VERSION >= (1, 7):  # 自动判断版本
    django.setup()

logger = logging.getLogger(''bss'')

pidfile = ''logs/bss.pid''


def clean():
    try:
        logger.info(''删除锁文件%s'', pidfile)
        if os.path.exists(pidfile):
            os.remove(pidfile)
        logger.info(''删除锁文件%s成功'', pidfile)
        return 1
    except Exception as e:
        msg = "删除锁文件%s失败" % e
        logger.error(msg, exc_info=True)
        return 0


def lock():
    try:
        logger.info(''创建锁文件%s'', pidfile)
        file(pidfile, ''w+'').write(''%s\n'' % os.getpid())
        logger.info(''创建锁文件%s成功'', pidfile)
    except Exception as e:
        msg = "创建锁文件%s失败" % e
        logger.error(msg, exc_info=True)
        sys.exit(0)


class BssService(object):
    def __init__(self):
        self.period_url = settings.BILLING_ALL_URL

    def build(self):
        logger.info("billing task begin>>>>>>>>>>>>>>>>>>")
        # do something
        logger.info("billing task   end>>>>>>>>>>>>>>>>>>")


if __name__ == "__main__":
    if not os.path.exists(pidfile):
        lock()
        bs = BssService()
        bs.build()
        status = clean()
        n = 10
        while status == 0 and n > 0:
            time.sleep(1)
            status = clean()
            n -= 1
    else:
        logger.info("其他进程正在执行!")

 

crontab定时执行c二进制文件问题

crontab定时执行c二进制文件问题

当c源文件编译成功后, 比如AUTOBATCH

直接输入AUTOBATCH就可以执行了,但是写入crontab定时任务中时,就执行不了了,因为crontab是不识别环境变量的,因此

需要把环境变量写入一个sh脚本文件中,然后把AUTOBATCH执行条件也写入该sh中

我写的是AUTOBATCH.sh

内容如下:

#! /bin/bash

#############################

.  ~/.bash_profile

.   /etc/profile

#############################


cd /home/appuser/project/bin

AUTOBATCH

然后crontab定时 :

38 11 * * * /home/appuser/project/bin/AUTOBATCH.sh

38 11 * * * echo ''autobatch end up''

就可以了,主要是 环境变量的问题与路径的问题!

关于计算何时执行cron作业,然后下次执行根据cron表达式计算上一次次执行时间的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于1个30任务的Cron作业30个Cron作业每个执行1个任务、AWS Glue - 如果行号存在差异,我可以先编写脚本来比较 2 个数据库,然后再执行 cron 作业吗?、crontab 执行过慢,上次未执行完,下次就来了,加锁处理、crontab定时执行c二进制文件问题等相关内容,可以在本站寻找。

本文标签: