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?