Ich habe derzeit einen laufenden 'Cron' Server. Es soll alle zeitlich befohlenen Befehle ausführen, die in der Zukunft ausgeführt werden müssen. Dies ist das einzige, was der Server tut.Cron-Server wird um mehrere Minuten verzögert mit setTimeout()
Was funktioniert: Die Funktionen auf meinem eigenen Laptop ausführen, alles wird rechtzeitig ausgeführt.
Was ist kaputt: Laufende Funktionen über mehrere Tage auf dem Server.
Mein Code ist alles in einem ausdrücklichen Projekt (Node) platziert, so können Anrufe von anderen Servern vorgenommen werden mehr
Ordner-Layout 'crons' hinzuzufügen:
app.js
-api/
--crons/
---router.js
---functions.js
--.../
In den Funktionen meine Funktionen Datei ein cron hinzuzufügen und auszuführen wird beibehalten.
const _ = require('lodash');
const Crons = [];
const moment = require('moment');
const functions = {
addCron: (toExecute, dateTime, id, name) => {
console.log('Cron', dateTime, name, id);
const now = new Date().getTime();
const then = new Date(dateTime).getTime();
const diff = Math.max(then - now, 0);
let cronJob;
if (diff >= Math.pow(2, 31)) {
if(functions.get(name)) {
}
cronJob = setTimeout(() => {
functions.remove(name);
functions.addCron(toExecute, dateTime, id, name);
}, diff);
Crons.push({
name: name,
job: cronJob
});
} else {
if(functions.get(name)) {
functions.remove(name);
}
cronJob = setTimeout(() => {
console.log(`Started cron: ${name} at ${new Date()}`);
toExecute(id);
functions.remove(name);
}, diff);
Crons.push({
name: name,
job: cronJob
});
}
}
};
module.exports = functions;
Derzeit meine Protokolle, wenn ich diese zeigen mir lokal ausgeführt, dass alle Funktionen zu spät etwa 1 Millisekunde ausgeführt werden (was in Ordnung ist). Und die Logs auf dem Live-Server zeigen mir, dass Funktionen 7 Minuten länger täglich laufen.
Die Protokolle
1|cronserver | 2017-06-30 18:00:07.195000000: Cron 2017-07-01T17:00:00.000Z YQkWN6BmX8eqzQHC9startCheck YQkWN6BmX8eqzQHC9
1|cronserver | 2017-06-30 18:00:07.195000000: Cron 2017-07-01T17:30:00.000Z 7c2yPyfjKDuujKQjhstartCheck 7c2yPyfjKDuujKQjh
1|cronserver | 2017-06-30 18:00:07.196000000: Cron 2017-07-02T17:00:00.000Z PQKoboRpSkWeTufSdstartCheck PQKoboRpSkWeTufSd
1|cronserver | 2017-06-30 18:00:07.196000000: Cron 2017-07-02T17:30:00.000Z yLFaAjACB9uNPd4YvstartCheck yLFaAjACB9uNPd4Yv
1|cronserver | 2017-06-30 18:00:07.199000000: Cron 2017-07-01T17:30:00.000Z YQkWN6BmX8eqzQHC9start YQkWN6BmX8eqzQHC9
1|cronserver | 2017-06-30 18:00:07.199000000: Cron 2017-07-01T18:00:00.000Z 7c2yPyfjKDuujKQjhstart 7c2yPyfjKDuujKQjh
1|cronserver | 2017-06-30 18:00:07.199000000: Cron 2017-07-02T17:30:00.000Z PQKoboRpSkWeTufSdstart PQKoboRpSkWeTufSd
1|cronserver | 2017-06-30 18:00:07.199000000: Cron 2017-07-02T18:00:00.000Z yLFaAjACB9uNPd4Yvstart yLFaAjACB9uNPd4Yv
1|cronserver | 2017-07-01 17:07:32.253000000: Started cron: YQkWN6BmX8eqzQHC9startCheck at Sat Jul 01 2017 17:07:32 GMT+0000 (UTC)
1|cronserver | 2017-07-01 17:37:33.160000000: Started cron: 7c2yPyfjKDuujKQjhstartCheck at Sat Jul 01 2017 17:37:33 GMT+0000 (UTC)
1|cronserver | 2017-07-01 17:37:33.161000000: Started cron: YQkWN6BmX8eqzQHC9start at Sat Jul 01 2017 17:37:33 GMT+0000 (UTC)
1|cronserver | 2017-07-01 18:07:34.070000000: Started cron: 7c2yPyfjKDuujKQjhstart at Sat Jul 01 2017 18:07:34 GMT+0000 (UTC)
1|cronserver | 2017-07-02 17:14:24.678000000: Started cron: PQKoboRpSkWeTufSdstartCheck at Sun Jul 02 2017 17:14:24 GMT+0000 (UTC)
1|cronserver | 2017-07-02 17:44:25.587000000: Started cron: yLFaAjACB9uNPd4YvstartCheck at Sun Jul 02 2017 17:44:25 GMT+0000 (UTC)
1|cronserver | 2017-07-02 17:44:25.588000000: Started cron: PQKoboRpSkWeTufSdstart at Sun Jul 02 2017 17:44:25 GMT+0000 (UTC)
1|cronserver | 2017-07-02 18:14:26.496000000: Started cron: yLFaAjACB9uNPd4Yvstart at Sun Jul 02 2017 18:14:26 GMT+0000 (UTC)
Das einzige, was dieser Server die Funktionen laufen tut, ist. Jede Hilfe würde sehr geschätzt werden.
TL; DR Meine setTimout-Funktionen laufen zu spät. Wie kann ich dieses Problem lösen
Verwenden Sie node.js? – pokeybit
Ja, das tue ich jetzt als Tag. – mitchken
was ist 'functions.remove'? Leerst du jemals 'Crons'? Ihr aktueller Code erhöht es ohne Limit: es würde alles langsam verlangsamen ... – dfogni