设置node-cron以与Hubot一起运行

时间:2016-10-17 20:50:17

标签: cron coffeescript hubot

我试图设置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"

我看到了启动消息,但每个Minute中的消息都没有出现在房间或日志中。我已尝试过不同的格式,但没有运气。

什么是奇怪的是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有效并且我的代码没有。有什么想法吗?

1 个答案:

答案 0 :(得分: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”,以避免coffeescript抱怨尾随逗号。