Herokuでcron的なことをやりたいと思って調べてみると2種類あることがわかりました。
ひとつは「Heroku Schedule」アドオン、もう一つは 「Worker dyno」を使ったバックグランドジョブです。
「Heroku Scheduler」アドオン
「Heroku Scheduler」というアドオンを使って、cron的にやる方法です。
10分ごと、1時間ごと、1日ごと(30分ごとの時間指定)に起動するスクリプトを指定することができます。これ以外の起動タイミングを選ぶことはできないようです。
このスクリプトでかかった実行時間は、無料dyno時間を消費します。

詳しい手順は以下を参照してください。

Heroku Scheduler でnode.jsを動かす(追記:worker) - Qiita
Heroku Scheduler でnode.jsを動かす目的Heroku schedulerでnode.jsの定時実行を行いたい前提動作確認環境Windows10, VSCodeNode v8.11...
「Worker dyno」を使ったバックグランドジョブ
Worker dynoを使ってバックグランドジョブを作成する方法です。
Worker dynoは24時間常駐となるため、その分だけ無料dyno時間を消費します。
私のようにプロジェクトの中に24時間稼働の「Web dyno」が常駐している場合は、残り1日8時間程度しか余裕がないので、workerを選択することはできません。
逆に、workerだけのプロジェクトであれば、この方法も良いと思います。
タイマー管理を自前でやってもよいのですが、cron的な設定で書けるNodeモジュール「node-cron」が便利なのでインストールします。
%npm i node-cron
%npm list
├── node-cron@3.0.1
サンプル書いて試しに実行してみるとエラーがでました。
uuidモジュールがないとのことなので、uuidモジュールもインストール。
worker.js
const cron = require('node-cron');
cron.schedule('* * * * *', () => console.log('毎分実行'));
% node worker.js
node:internal/modules/cjs/loader:959
throw err;
^
Error: Cannot find module 'uuid'
% npm i uuid
added 1 package, and audited 131 packages in 513ms
% npm list
├── node-cron@3.0.1
└── uuid@8.3.2
無事実行できました。
% node worker.js
毎分実行
毎分実行
node-cronの書き方は以下が参考になります。

Node.jsで定期実行メモ - Qiita
毎回忘れるので自分用メモです。Node Cronを使います。準備$ npm init -y$ npm i node-cronCronの書式 # ┌────────────── second (option...
Worker Dynoについてはこちらの公式ページが詳しいです。
Worker dyno、バックグラウンドジョブ、キューイング | Heroku Dev Center
キューイングは、スケーラブルな Web アプリを構築するための鍵です。重い処理を Web プロセスから切り離し、アイテムをバックグラウンドプロセスのキューに入れます。
どっちを使ったか
workerを常駐するには無料dyno時間が足りないので、schedulerを採用しました。
コメント