JavaScript
Node.js
cron
node-cron

Node.jsで定期実行メモ

毎回忘れるので自分用メモです。

Node Cronを使います。


準備

$ npm init -y

$ npm i node-cron


Cronの書式

https://www.npmjs.com/package/node-cron#cron-syntax

 # ┌────────────── second (optional)

# │ ┌──────────── minute
# │ │ ┌────────── hour
# │ │ │ ┌──────── day of month
# │ │ │ │ ┌────── month
# │ │ │ │ │ ┌──── day of week
# │ │ │ │ │ │
# │ │ │ │ │ │
# * * * * * *


  • 6段階あって左から秒,分,時間,日,月,曜日

  • 秒はオプショナルなので5段階設定しておけば動きはします。

らしいです。


試す

公式サンプルが分単位のサンプルばかりで試しづらいので基本は秒単位の試し方を書いてます。


毎秒実行



  • cron.schedule()の*が6つ


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('* * * * * *', () => console.log('毎秒実行'));



毎分実行



  • cron.schedule()の*が5つ

  • 毎秒実行よりも*が少ない


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('* * * * *', () => console.log('毎分実行'));



毎分の1秒、10秒、30秒、55秒に実行


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('1,10,30,55 * * * *', () => console.log('毎分1秒,10秒,30秒,55秒に実行'));



毎分の1秒~10秒に実行


  • 1-10みたいな記述が出来ます。


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('1-10 * * * * *', () => console.log('毎分1秒~10秒に実行'));


実行すると、毎分10回実行されますね。

$ node app.js

毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行
毎分1秒~10秒に実行


3秒ごとに実行


  • */3とすると3秒ごととか3分ごとみたいな指定です。

  • */10だと10分ごと


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('*/3 * * * * *', () => console.log('3秒ごとに実行'));



毎日0時,6時,12時,18時に実行

結構使いそうな間隔


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('0 0 0,6,12,18 * * *', () => console.log('毎日0時,6時,12時,18時に実行'));



3時間おきの指定時間(3,6,9,12,15,18,21)実行

'use strict';

const cron = require('node-cron');
cron.schedule('0 0 0,3,6,9,12,15,18,21, * * *', () => console.log('3時間おきの指定時間実行'));


3時間おき実行

'use strict';

const cron = require('node-cron');
cron.schedule('0 0 */3 * * *', () => console.log('3時間おきの実行'));


23時59分59秒に実行したい


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('59 59 23 * * *', () => console.log('毎日23時59分59秒に実行'));



できなかったネタ


24時は指定できない

毎日24時に実行したくて、こんな指定をすると怒られます。


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('0 0 24 * * *', () => console.log('毎日24時に実行'));


$ node app.js

/Users/n0bisuke/dotstudio/playground/cron-test/node_modules/node-cron/src/pattern-validation.js:54
throw patterns[2] + ' is a invalid expression for hour';
^
24 is a invalid expression for hour

1日は0:00~23:59になるので24時ってのはほんとはダメなんですね。

毎日24時に実行させたい場合は0を指定しましょう。


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('0 0 0 * * *', () => console.log('毎日24時に実行'));



60分や60秒も指定できない

24時同様に60分や60分も指定できません。


app.js

'use strict';

const cron = require('node-cron');
cron.schedule('60 60 0 * * *', () => console.log('60秒や60分の指定'));


怒られますね。

$ node app.js

/Users/n0bisuke/dotstudio/playground/cron-test/node_modules/node-cron/src/pattern-validation.js:50
throw patterns[1] + ' is a invalid expression for minute';
^
60 is a invalid expression for minute


所感

地味に24H指定してハマってたので気をつけましょう笑

随時サンプルアップデートしたい