2016-04-24 22 views
2

私は、herokuがカスタムベースのcronスケジューリングのために提案するカスタムクロックプロセスモデルを実装しようとしています。これはhereです。[Heroku] [Node.js]カスタムクロックプロセスジョブをローカルで実行する方法は?

マイProcfileがリンクに提案したものと同一である:

web: node index.js 
worker: node bot.js 
clock: node clock.js 

私のアプリはindex.jsに住んでいる、と私は正常にheroku local webとのことを実行して、http://localhost:5000を通じて自分のコンテンツを見ることができます。しかし、問題は、私のアプリ上のいくつかのアクションは、予定されているcronの仕事を引き起こすことです、そして、私は今、成功することができていないこの部分です。私はこのコードからこのtutorialを呼び起こしています。

clock.jsファイルには、次のようになります。

var CronJob = require('cron').CronJob; 
var bot = require('./bot.js'); 

function setupJob(cronTimeFormatString) { 
    new CronJob({ 
    cronTime: cronTimeFormatString, 
    onTick: bot.setupJob(), 
    start: true, 
    timeZone: "America/Los_Angeles" 
    }); 
} 

目標は、同様の方法で私のアプリからこれを呼び出すために、次のようになります。

module.exports = { 
    setupJob: function() { /* do stuff */ 
    console.log("start background job"); 
    } 
}; 
bot.jsは次のようになり、現在

var clock = require('./clock.js'); 
clock.setupJob('00 00 11 * * 1-5'); // this is a job that runs on weekdays at 11am 

最初の質問はすべてこれが必要ですか?私の最終目標は、ユーザーが定義した回数だけ実行するcronジョブを設定するだけですが、Heroku Schedulerは、私の探索から私のニーズに十分強力ではありません。

実際の質問は、heroku localまたはforeman startのいずれかを使用して、ワーカープロセスを時計とアプリケーションの上で実行しようとしたときに、すべてのプロセスに対して直ちにSIGTERMを取得します。それは、ワーカープロセスがすぐに終了するためですが、それはポートで聞く必要があるということですか?それが必要なときにのみ活動するスピンアップ作業者プロセスであるという目的を破ることはできないでしょうか?

答えて

1

ちょうどあなたが(index.jsまたはbot.jsでclock.jsを置き換える)コードの個々の部分をテストすることができますが、一緒にそれらすべてを実行するカントnode clock.js

でそれを実行します。

cronjobをclock.jsを実行する前に毎分または何らかの方法で実行するものに変更してください。

関連する問題