node.js cron実行 node-cronを使い定期的に呼ぶ

node.js node-cronで定期実行 nodejs

最初はcrontabで設定すればいいのかな?と思って node.js cron でググっていたら、パッケージがあるとのこと。というわけで、node-cronパッケージを使ってみます。

node.js内で同じ処理を何回も定期実行するのにちょうど良いですね。
あとはこのスクリプトをトリガーするcrontabを設定すればOK。

スポンサーリンク

1.node-cronパッケージをインストール

node install node-cron でパッケージをインストール。

node-cron
A simple cron-like task scheduler for Node.js. Latest version: 3.0.3, last published: 4 months ago. Start using node-cron in your project by running `npm i node...

2. 使い方

使い方は簡単。 node-cronを読み込み、scheduleを設定するだけ。


var cron = require('node-cron');

cron.schedule('* * * * *', () => {
  console.log("走ってます");
});

2.1 秒 分 時 日 月 曜日 の6種類だが、秒はオプションなので5種類

6つ、半角スペースで区切れば最初は秒が適用され
5つ、半角スペースで区切れば秒は無視で分からの設定になるようです。

2.1.1 カンマ , でその項目に指定した時間を複数設定

1,2 * * * * とすれば、分に1と2が設定されているので、毎時1分と2分に実行。

2.1.2 10-15 とハイフンだと10~15毎分

10-15 * * * * だと、毎時10,11,12,13,14,15分に実行

2.1.3 何分間隔は */2 2分毎に行う

*/3だと3分毎。1-10/2 だと、2,4,6,8,10。割り切れないのは無視。

2.2 関数を呼ぶ

実際はconsole.log()とかではなく、関数を呼ぶと思います。
何かしら完了した時にはprocess.exit();でプロセス完了しています。自分は。

cron.schedule('* * * * *', () => {
  do_func();
});

async function do_func()
{
  try {
   mycon = await mysql.createConnection(db_setting);
   if( !mycon ){
    process.exit(1);
   }
  } catch(e){
    process.exit(1);
  }
  .....
}

3. crontabと組み合わせる

例えば、scrape.jsがあったとして、このファイルではデータベースから読み込むurlを取得しスクレイピングする。今日読み込むページがなくなったらprocess.exit()で終了。

crontabは毎日一回、node scrape.jsを実行する という組み合わせで、データベースにurlを登録すれば毎日〇時にscrape.jsが呼ばれ、scrape.jsがスクレイピングしてくれるという形になります。

0 10 * * * /usr/bin/node /home/user/test/scrape.js > /home/user/test/log.log 2>&1

コメント

  1. nodokamome より:

    >node install node-cron でパッケージをインストール。

    すみません、たぶんnpm install node-cronの間違いかと思いました。

タイトルとURLをコピーしました