【问题标题】:Setting up node-cron to run with Hubot设置 node-cron 以与 Hubot 一起运行
【发布时间】:2017-02-26 23:17:40
【问题描述】:

我正在尝试设置 Hubot 以运行 cronjob,但由于某种原因,使用 node-cron 的 cronjob 没有触发。我已经以几种不同的方式阅读并实现了一些东西(一个例子:https://leanpub.com/automation-and-monitoring-with-hubot/read),但似乎没有任何效果。目前我使用的代码是

module.exports = (robot) ->
  cronJob = require('cron').CronJob
  tz = 'America/Los_Angeles'
  pattern = '*/1 * * * *'
  cronjob = new cronJob(pattern, everyMinute, null, true, tz)

  console.log "reading cron"
  room = "#testing"
  robot.messageRoom room, 'startup message'

  everyMinute = ->
    robot.messageRoom '#testing', 'I will nag you every minute'
    console.log "every minute should be executed"

我看到了启动消息,但 everyMinute 中的消息没有出现在房间或日志中。我尝试了不同的模式格式,但没有任何运气。

奇怪的是 hubot-cron (https://github.com/miyagawa/hubot-cron) 工作正常。我可以设置一个作业并查看来自 cronjob 的输出消息,所以我知道它可以工作。如果我查看 hubot-cron 源代码,我会看到

start: (robot) ->
    @cronjob = new cronJob(@pattern, =>
      @sendMessage robot
    , null, false, @timezone)
    @cronjob.start()

这看起来像我正在做的,但是 hubot-cron 可以工作,而我的代码却不能。有什么想法吗?

【问题讨论】:

    标签: cron coffeescript hubot


    【解决方案1】:

    事实证明,node-cron 不喜欢我传递该函数的方式。看起来将函数传递给 node-cron 的正确方法是

    module.exports = (robot) ->
      cronJob = require('cron').CronJob
      tz = 'America/Los_Angeles'
      pattern = '* * * * *'
      new cronJob(pattern, (->
        do everyMinute
      ), null, true, tz)
    
      everyMinute = ->
        console.log "every minute should be executed"
    

    这对我有用。请注意,有必要将“do everyMinute”放在单独的行上,以避免咖啡脚本抱怨尾随逗号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2014-07-07
      • 2014-08-07
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多