Настройка node-cron для запуска с Hubot

#cron #coffeescript #hubot

#cron #coffeescript #hubot

Вопрос:

Я пытаюсь настроить Hubot для запуска cronjob, но по какой-то причине cronjob с использованием node-cron не запускается. Я прочитал и реализовал несколько разных способов (один пример: 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 работает, а мой код — нет. Есть идеи?

Ответ №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"
  

Это работает для меня. Обратите внимание, что «делать каждую минуту» в отдельной строке необходимо, чтобы избежать жалоб coffeescript на конечную запятую.