您好,我想知道如果我们关闭服务器两天,计划每 24 小时运行一次的议程作业会发生什么情况?当我们重新启动服务器时,它能够从中断的地方继续吗?或者是什么?
似乎找不到这方面的文档,所以在服务器重新启动时我正在做的是删除任务然后重新创建它......但不确定这是否是有效的方法。
我目前正在使用 Quartz 来执行作业调度任务,方法是通过文件jobs.xml中的以下行进行配置:quartz.properties
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
Run Code Online (Sandbox Code Playgroud)
现在,我想将我的工作存储在数据源中。我已将quartz.properties文件更改如下:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
Run Code Online (Sandbox Code Playgroud)
我还在数据库中进行了所有其他配置更改quartz.properties,并使一切正常工作。问题是,我所有的作业和触发器都已写入jobs.xml,我需要以某种方式将它们导入数据库。
我能想到的唯一解决方案是通过 Java 代码创建作业和触发器并重新安排一切。但是,如果有像通过读取jobs.xml文件将所有作业和触发器导入数据库之类的东西,那就太好了。
有谁知道是否有类似的事情?我知道我可以编写一个程序来执行此操作,但如果已经有一个已实现的程序,我仍然想利用它。
谢谢
我是议程作业( https://github.com/rschmukler/agenda )的新手,无法理解如何安排作业在每天的给定时间运行。我已经尝试过以下方法:
agenda.every('everyday at 00:01', ...)- 仅运行一次。agenda.schedule('at 00:01', ...)然后job.repeatEvery('1 day')但没有太大效果。Agenda 内部使用受日期启发的Human Interval。我在这里检查了日期演示,发现它已被接受,但无法很好地与议程一起使用。everyday at 00:00
任何帮助将不胜感激。谢谢。
我正在研究调度优化问题,其中我们有一组需要在特定时间范围内完成的任务。
每个任务都有一个时间表,指定可以执行该任务的时间段列表。每个任务的时间表可能因工作日而异。
这是小样本(减少了任务和时间段的数量):
task_availability_map = {
"T1" : [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"T2" : [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"T3" : [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"T4" : [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我收到了这个面试练习题。
实现一个作业调度程序,它接受函数 f 和整数 n,并在 n 毫秒后调用 f。
我有一个非常简单的解决方案:
import time
def schedulerX(f,n):
time.sleep(0.001*n)
f
Run Code Online (Sandbox Code Playgroud)
然而,建议的解决方案更加详细,如下所示。我不明白所有这些额外代码背后的目的是什么。请赐教。
from time import sleep
import threading
class Scheduler:
def __init__(self):
self.fns = [] # tuple of (fn, time)
t = threading.Thread(target=self.poll)
t.start()
def poll(self):
while True:
now = time() * 1000
for fn, due in self.fns:
if now > due:
fn()
self.fns = [(fn, due) for (fn, due) in self.fns if due > now]
sleep(0.01)
def delay(self, f, n):
self.fns.append((f, time() * 1000 + …Run Code Online (Sandbox Code Playgroud) 是否存在与MS SQL Server作业和作业调度相当的MySQL?或者这种事情在MySQL世界中被认为是一个应用层事物?
我是oracle工作脚本的新手.我写了一些清除程序来清理所有旧数据并保留最近3个月的数据...程序执行成功.我也在手动调用时工作.程序如下:
CREATE OR REPLACE PROCEDURE Archive
IS
v_query varchar2(2048);
v_tablename VARCHAR2(50);
v_condition varchar2(50);
TYPE cur_typ IS REF CURSOR;
c cur_typ;
BEGIN
OPEN c for 'select tablename,columnname from pseb.purge_tables';
FETCH c INTO v_tablename,v_condition;
LOOP
EXIT WHEN c%NOTFOUND;
if(v_tablename ='cfw.DCTBLPERFCUMULATIVEMASTER') then
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB3MAINREG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB4TODENERG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90'; …Run Code Online (Sandbox Code Playgroud) 这是我运行的工作的一个例子.如果它退出,我想收到通知,因为它保持不变是很重要的.
(我知道php不是最好的工具,但它是别人的代码,所以,无论如何)
/etc/init/watchdog.conf
# Events
start on startup
stop on shutdown
# Automatically respawn
respawn
respawn limit 20 5
# Run the script!
script
exec $PHP_PATH/php -f $WD_PATH/index.php wd_run
end script
Run Code Online (Sandbox Code Playgroud) 我已经通过使用Hangfire库安排了一个Job.我的预定代码如下.
BackgroundJob.Schedule(() => MyRepository.SomeMethod(2),TimeSpan.FromDays(7));
public static bool DownGradeUserPlan(int userId)
{
//Write logic here
}
Run Code Online (Sandbox Code Playgroud)
现在我想稍后在某个事件上删除此计划作业.
我想知道在通过作业执行过程时以及完成之前发生的事情是该作业调用该过程的下一次执行的时间。这是我创建的工作:
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => x
,what => 'BEGIN PKG_DISTRIBUIDOR_SCHEDULER.PRC_DISTRIBUYE_TRANSACCIONES(5000); END;'
,next_date => to_date(sysdate,'dd/mm/yyyy hh24:mi:ss')
,interval => 'SYSDATE+30/86400'
,no_parse => FALSE
);
DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
如您所见,作业每30秒执行一次。因此,如果我的过程(PRC_DISTRIBUYE_TRANSACCIONES)延迟超过30秒,那么在这种情况下该工作做什么?