13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Heroku Scheduler でnode.jsを動かす(追記:worker)

Last updated at Posted at 2018-11-22

Heroku Scheduler でnode.jsを動かす

目的

Heroku schedulerでnode.jsの定時実行を行いたい

前提

Heroku Projectの作成、設定

Heroku Projectの作成、設定

node.jsプロジェクトフォルダで heroku create
> heroku create n2-sample-scheduler
Heroku sckedulerのインストール
> heroku addons:create scheduler:standard

package.jsonの作成
> npm init

ジョブ用ソース作成

hello.js

hello.js
# !/usr/bin/env node
function sayHello() {
  console.log('Hello hello.js');
}
sayHello();

npmコマンドの追加
package.json

package.json
  "scripts": {
 +     "job-hello":"node hello.js",

Localで動作テスト

herolo localコマンドでテスト

> heroku local:run npm run job-hello

Deploy to Heroku

Herokuへアップロード

> git add .
> git commit -m "add job-hello"
> git push heroku master

動作確認( Heroku remote)

> heroku run npm run job-hello

ログ確認

> heroku logs 

Heroku Schedulerの設定

Heroku Schedulerの設定


> heroku addons:open scheduler
  • [Add new Job] > "npm run job-hello"を設定
  • FREQENCY = Every 10 minutes
  • [Save]

10分後に実行されているかログを確認する

> heroku logs

その他(随時追記)

[mongoose] scheduleがスキップされることがある

  • 原因
    mongooseの接続が残っっていてプロセスが次のスケジュールまでに終わらない。

  • 対策
    Job終了時に接続を閉じること

var mongoose = require("mongoose") 
// いろいろ処理される
//最後に切断
mongoose.disconnect()

workerとcronを使ってもっと柔軟に実行したい

下記参考
worker Dynoを利用してNode.jsバッチを実装する

  • procfile にworkerを定義
  • cron パッケージを利用する
Procfile
worker: node worker.js
worker.js
var CronJob = require('cron').CronJob;

var workerJob = new CronJob({
  cronTime: '*/10 * * * * *', //毎10秒実行
  onTick: function() {
    //ここに実行したい処理を書く
    console.log('Hoge !');
  },
  start: true, //newした後即時実行するかどうか
  timeZone: 'Asia/Tokyo'
});
workerJob.start();

デプロイ後 workerを有効にする

heroku scale worker=1

ログ確認

heroku logs

2018-12-13T16:20:30.016441+00:00 app[worker.1]: Hoge !
2018-12-13T16:20:40.008675+00:00 app[worker.1]: Hoge !
2018-12-13T16:20:50.010855+00:00 app[worker.1]: Hoge !
2018-12-13T16:21:10.008725+00:00 app[worker.1]: Hoge !
13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?