Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
71
Help us understand the problem. What is going on with this article?
@n0bisuke

Node.jsで定期実行メモ

More than 1 year has passed since last update.

毎回忘れるので自分用メモです。
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指定してハマってたので気をつけましょう笑

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

71
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
n0bisuke
プロトタイピング専門スクール「プロトアウトスタジオ」で教えたりしてます。 プロフ -> https://dotstud.io/members/n0bisuke
dotstudio
全ての人がモノづくりを楽しむ世界を目指して活動しています。 ( https://dotstud.io ) プロトタイピングスクールの運営をしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
71
Help us understand the problem. What is going on with this article?