この記事は公開されてから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とは関係ありません。
参考サイトなど
- node-cron(github): https://github.com/ncb000gt/node-cron
- node-time(github): https://github.com/TooTallNate/node-time