标签: agenda

锁定作业在议程 Node.js 中如何工作?

我们已经在 Node.js 服务器中使用议程一段时间了,并且对议程中的作业锁定机制如何工作感到困惑。

  • 有时我们会看到数据库中作业的“lockedAt”字段具有非空值,并且突然变为空值。
  • 有时,“lockedAt”值保持为 null 并且作业会卡住。
  • 有时,10 分钟后“lockedAt”值会更新,但作业仍然卡住。

如果我重新启动 node.js 服务器,所有锁定的作业都会被解锁并正确执行。

为什么需要这种锁定机制?它有什么作用 ?

jobs locking node.js agenda

6
推荐指数
1
解决办法
3377
查看次数

如何在Node Agenda中以编程方式定义多个具有相同名称的作业

我正在使用节点议程模块启动用户创建的各种作业/事件。我希望能够创建Jobs,以便通过一个函数回调来处理所有Job,并根据事件参数区分每个Event。下面的示例代码

var mongoConnectionString = "mongodb://127.0.0.1/agenda";
var Agenda = require('agenda');
var agenda = new Agenda({db: {address: mongoConnectionString}});

agenda.define('user defined event', function(job,done) {
    var eventParams = job.attrs.data;
    if(eventParams.params === "Test"){
        handleEvent1();
    } else if (eventParams.params === "Test 2") {
        handleEvent2();
    } else {
        handleEvent3();
    }

    done();
});

agenda.on('ready', function() {
  console.log("Ok Lets get start");
  agenda.start();
});

// some how we get our call back executed. Note that params is the unique to each job.
var userEvent = function(params) {
    // Handle a …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js agenda

5
推荐指数
1
解决办法
642
查看次数

使用左侧的 org 文件和右侧的议程启动 Emacs

我想全屏打开 Emacs,垂直拆分两个窗口。我希望我的 todo.org 文件在左侧打开,而我的议程视图在右侧打开。

类似的问题出现在本网站的其他几个问题中,但它们并不完全相同和/或我无法使用/理解他们的答案来完全解决我的挑战。

我已经非常接近我的 custom-init.el 文件中的以下内容:

;; Windows layout setup
(add-to-list 'default-frame-alist '(fullscreen . maximized))
(split-window-right)
(setq initial-buffer-choice "~/emacs/Org/todo.org")
(setq org-agenda-window-setup 'current-window)
(add-hook 'after-init-hook (lambda () (org-agenda nil "u")))
(add-hook 'after-init-hook (lambda () (org-agenda-list 1)))
Run Code Online (Sandbox Code Playgroud)

这会正确格式化屏幕,并按照我的需要显示窗口位置和大小。它还会打开我的待办事项文件并根据需要将其放在左侧,但我在右侧打开了暂存缓冲区。议程已正确创建和格式化,并且是缓冲区列表中的第三项(scratch、todo.org、议程,然后是我在启动时打开的所有其他组织文件。)

如此接近,但经过几天的思考和尝试不同的事情,我只是没有到达那里。

windows emacs startup org-mode agenda

4
推荐指数
1
解决办法
1044
查看次数

`agenda.js` 如何计算 `every()` 操作的时区

agenda.js在我的 Node 项目中使用它,由 MongoDB 数据库支持,来处理我们需要运行的批处理过程。这运作良好。不过,我确实有一个关于时区的问题。当我使用该every()操作时,它似乎接受作业名称和时间表。所以我一直在数据库中播种作业,如下所示:

  for (let job of dbJobs) {
    await agenda.every(schedule, job.name);
  }
Run Code Online (Sandbox Code Playgroud)

请注意,上面的内容schedule采用 cron 格式 - 00 05 * * 1-5

这有效。然而,据我所知,every()不接受 的争论repeatTimezone。那么在这些情况下它是如何计算时区的呢?

澄清一下,当我使用 添加作业后查看数据库中的文档时every(),该repeatTimezone属性存在,但其值设置为null

其他agenda操作(例如repeatEvery()确实接受时区参数,如下所示:

job.repeatEvery('0 6 * * *', {
  timezone: 'America/New_York'
});
Run Code Online (Sandbox Code Playgroud)

自从我使用 以来every(),我一直通过首先使用 播种数据库every(),然后运行 ​​MongoupdateMany()将 timzeone 显式添加到所有作业来管理此操作:

async function addTimezoneToJobs() {
  try {
    const …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js agenda

0
推荐指数
1
解决办法
2106
查看次数

标签 统计

agenda ×4

node.js ×3

mongodb ×2

emacs ×1

javascript ×1

jobs ×1

locking ×1

org-mode ×1

startup ×1

windows ×1