毎回忘れるので自分用メモです。
Node Cronを使います。
準備
$ npm init -y
$ npm i node-cron
Cronの書式
# ┌────────────── 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指定してハマってたので気をつけましょう笑
随時サンプルアップデートしたい