ちょっと話題の記事

node.jsのいろいろなモジュール14 – node-cronでcron的にプログラムを実行する

2013.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

cronをnode.jsで実行

指定した日時や定期的に実行したいスクリプトがある場合、UNIX系OSの場合はcronを使用することが多いとおもいます。
cronとは、スクリプトを自動実行するためのデーモンプロセスで、crontabファイルに特定の書式で記述をすることにより、
指定した日時/定期日時にプログラムを実行することができます。
今回紹介するcronモジュールは、node.jsプログラム内で任意の処理をcrontabと同じ書式を使って記述することができます。
ではモジュールのインストールからサンプル作成をやってみましょう。

環境構築

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • Node.js : v0.8.15
  • npm : 1.1.66

適当なディレクトリを作成し、そこでnpmを使用してインストールしましょう。

% mkdir cron
% cd cron
% npm install cron time
% touch app.js //このファイルにサンプルプログラムを記述

cronモジュール使用時にタイムゾーンを指定したい場合等、timeモジュールが必要なので、いっしょにインストールしています。

node-cronサンプル

では早速サンプルプログラムを作成します。 cronの使い方はシンプルです。モジュールをロードしてCronJobをインスタンス化し、
start関数でcron開始、stop関数で終了します。

var cronJob = require('cron').CronJob;

// 毎秒実行
var cronTime = "* * * * * *";

// 一度だけ実行したい場合、Dateオブジェクトで指定も可能
// var cronTime = new Date();

var job = new cronJob({
  //実行したい日時 or crontab書式
  cronTime: cronTime

  //指定時に実行したい関数
  , onTick: function() {
    console.log('onTick!');
  }

  //ジョブの完了または停止時に実行する関数 
  , onComplete: function() {
    console.log('onComplete!')
  }

  // コンストラクタを終する前にジョブを開始するかどうか
  , start: false
  
  //タイムゾーン
  , timeZone: "Japan/Tokyo"
})

//ジョブ開始
job.start();
//ジョブ停止
//job.stop();

上記サンプルプログラムを実行すると、コンソールに文字列が1秒毎に表示されます。

まとめ

今回はnode.jsでcrontab書式が使えるnode-cronを紹介しました。
定期処理をするのに簡単に使えていいのではないしょうか。
ちなみに、このモジュールはOSが持っているcronとは関係ありません。

参考サイトなど