NodeJSでCron処理を実現し、デーモン化させる。

NodeJSで作ったプログラムをCronのように動かしたい。

どうやらnode-cronというモジュールがあるらしい。

Node.jsで特定の処理を指定日時、あるいは特定のパターンの日時に繰り返し実行する方法: node-cronを使う

上記サイトを参考に、関連モジュールをnpmでインストール。

$ npm install cron
$ npm install time

サンプルコード内のjob.stop();をコメントアウトさせ、いつものように $ node crontest.js と実行させると、1秒毎にHelloが表示される。

// Stops your job.
// job.stop();  コメントアウト

Ctr + C で終了。

次に、過去に作ったNodeJSプログラムをCronで動かしたい。
サンプルコードをみるとonTickの中にで過去のプログラムを動かせばよさそうだ。

…
 onTick: function() {
    console.log('Hello.');
  }
…

下記のサイトを参考に外部ファイル化させ、上記メソッド内で実行させるとOK。

node.jsで外部ファイルのJavaScriptを呼び出す

※NodeJSに限らず、Cronのような処理を行うときは、プログラム内のファイルへのパスを絶対パスで記述しないと動かないので注意。

次にCronをデーモン化させる。

foreverモジュールを利用。グローバルインストールさせないとなぜかコマンドが認識されないので下記のようにインストール。

$ npm install -g forever

下記のコマンドでデーモン化。

$ forever start crontest.js

稼働中のデーモン一覧を見る時は

$ forever list 

どうやらログファイルも自動生成されるようで、プログラム内のエラーやconsole.logがそのログに記録されていく。

停止させるときは

$ forever stop (listで確認したuid)

以上。

NodeJSでMAMPのMySQLにアクセスする。

mysqlモジュールをnpmでインストール後、下記のようなコードでMySQLにアクセスできるといろんなサイトに掲載されているが、MacのMAMPだと失敗する。

var connection = mysql.createConnection({
    host: 'localhost',
    database: 'dbname',
    user: 'username',
    password: 'password'
});

下記のようにMAMP内のMySQLサーバーのポートである8889を指定するとアクセスすることができる(念のためMySQLのポートはMAMPの設定から確認してほしい)。

var connection = mysql.createConnection({
    host: 'localhost',
    database: 'dbname',
    user: 'username',
    password: 'password',
    port:8889
});

以上。