本篇文章给大家谈谈计算何时执行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表达式计算上一次次执行时间)
- 1个30任务的Cron作业30个Cron作业每个执行1个任务
- AWS Glue - 如果行号存在差异,我可以先编写脚本来比较 2 个数据库,然后再执行 cron 作业吗?
- crontab 执行过慢,上次未执行完,下次就来了,加锁处理
- crontab定时执行c二进制文件问题
计算何时执行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个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 作业吗??
就像标题一样,我的老板要求我在半夜做一些清晰度检查之类的事情。
所以有一些事情,目前,我不知道该怎么做
-
构建源(或本地 cron)以连接到 AWS 胶水(我不知道该怎么做,也不知道如何设置以进行连接)
-
如何使用 AWS 胶来检查 2 个表的行,(不使用数据库驱动程序)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
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二进制文件问题
当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二进制文件问题等相关内容,可以在本站寻找。
本文标签: