2016-04-24 9 views
2

Ich versuche, das benutzerdefinierte Clock-Prozessmodell zu implementieren, das von Heroku für benutzerdefiniertes Cron-Scheduling vorgeschlagen wird, gefunden here.[Heroku] [Node.js] Wie können benutzerdefinierte Uhrprozessaufträge lokal ausgeführt werden?

Mein procfile mit dem identisch ist in der Verbindung vorgeschlagen:

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

Meine App Leben in index.js, und ich kann erfolgreich ausgeführt werden, dass mit heroku local web und meine Inhalte durch http://localhost:5000 sehen. Das Problem ist jedoch, dass einige Aktionen in meiner App die Planung eines Cron-Jobs zur Folge haben, und es ist dieser Teil, mit dem ich im Moment nicht erfolgreich arbeiten kann. Ich inspiriere diesen Code aus dieser tutorial.

Meine clock.js Datei sieht wie folgt aus:

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" 
    }); 
} 

Das Ziel dieses wie in einer Art und Weise von meiner App zu nennen wäre:

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

Derzeit bot.js wie folgt aussieht:

module.exports = { 
    setupJob: function() { /* do stuff */ 
    console.log("start background job"); 
    } 
}; 

Die erste Frage wird alles benötigt? Mein Endziel ist einfach, einen Cron-Job einzurichten, der eine benutzerdefinierte Anzahl von Malen ausführen wird, aber der Heroku Scheduler ist nicht stark genug für meine Bedürfnisse, von meiner Erkundung.

Die eigentliche Frage ist, wenn ich versuche, den Arbeitsprozess neben der Uhr und App, entweder heroku local ODER foreman start, ich sofort eine SIGTERM für alle Prozesse zu laufen. Es scheint so, als ob der Worker-Prozess sofort beendet wird, aber bedeutet das, dass ich ihn auf einen Port hören lassen muss? Würde das nicht den Zweck besiegen, dass es ein gesponnener Arbeitsprozess ist, der nur aktiv ist, wenn es gebraucht wird?

Antwort

1

führen Sie es einfach mit node clock.js

Sie einzelne Stücke des Codes testen können (ersetzen clock.js mit index.js oder bot.js), aber kann nicht sie alle zusammen laufen.

Stellen Sie sicher, dass Sie den Cronjob in etwas ändern, das jede Minute oder was auch immer Sie vor dem Ausführen ausführen clock.js

Verwandte Themen