NEWS
Cronjobs anzeigen [gelöst]
-
Wenn ich mit einem Blockly Element einen erzeuge, dann nutzt er doch den Namen um zu identifizieren welcher Job das ist.
schedule1 = schedule('* * * * *', async () => { console.info('test'); });
Was wird denn an schedule1 übergeben? Wenn ich das mit JS abfrage, erhalte ich immer eine leere consolen-Ausgabe.
Wenn ich den cronjob hinterher mit einem anderen Blockly stoppen möchte, dann benutze ich doch den gleichen Namen erneut...speichert er hier nicht eine Referenz oder ein Objekt o.ä. ab?
(() => { if (schedule1) { clearSchedule(schedule1); schedule1 = null; }})();
Irgendwie muss er doch den cronjob identifizieren...?
-
@joergh sagte: speichert er hier nicht eine Referenz oder ein Objekt o.ä. ab?
Es wird ein komplexes Objekt in
schedule1
gespeichert, das u.a. das Attribut_ioBroker
enthält:const sched1 = schedule('0 12 * * *', function() { log('12:00 Uhr'); }); log(sched1._ioBroker);
Log-Ausgabe:
javascript.0 15:46:18.560 info script.js.common.Neuer_Test: { type: 'cron', pattern: '0 12 * * *', scriptName: 'script.js.common.Neuer_Test', id: 'cron_1731941178560_46833' }
Gesamter Inhalt von
sched1
:<ref *1> Job { pendingInvocations: [ Invocation { job: [Circular *1], fireDate: [CronDate], endDate: undefined, recurrenceRule: [CronExpression], timerID: null } ], job: [Function (anonymous)], callback: false, running: 0, name: '<Anonymous Job 21 2024-11-18T14:47:48.946Z>', trackInvocation: [Function (anonymous)], stopTrackingInvocation: [Function (anonymous)], triggeredJobs: [Function (anonymous)], setTriggeredJobs: [Function (anonymous)], deleteFromSchedule: [Function (anonymous)], cancel: [Function (anonymous)], cancelNext: [Function (anonymous)], reschedule: [Function (anonymous)], nextInvocation: [Function (anonymous)], _ioBroker: { type: 'cron', pattern: '0 12 * * *', scriptName: 'script.js.common.Neuer_Test', id: 'cron_1731941268946_41631' } }
Ich habe keine Ahnung, was davon verwendet wird, um clearSchedule(sched1) den richtigen Schedule löschen zu lassen.
-
Aha, danke.
Wenn ich das abspeichern will, kann ich dazu dann ein Datenpunkt manuell als Typ Objekt anlegen und die variable sched1._iobroker da einfach reinschreiben und dann sind die hier aufgelisteten Werte drin?
Wenn das geht, reicht es dann diese Daten beim Löschen des cronjobs wieder anzugeben, oder benötige ich das komplette Objekt?
Wenn ich das komplette Objekt benötige, kann ich dieses dann einfach in den Datenpunkt speichern oder gibt es da irgendwelche Zugriffsprobleme, wenn ich das aus einem JS-Script aus Blockly versuche? -
@paul53 Ok, danke. Das hat sich mit meinem letzten Posting gerade überschnitten...
Also am besten alles speichern und alles wieder zurückgeben, dann sollte es klappen...warum nur sehe ich davon nichts, wenn ich sched1 auf der console ausgebe?
-
@joergh sagte: Wenn ich das komplette Objekt benötige, kann ich dieses dann einfach in den Datenpunkt speichern
Nein, dieses spezielle Objekt kann nicht "stringifiziert" werden.
@joergh sagte in Cronjobs anzeigen:
sched1._iobroker da einfach reinschreiben und dann sind die hier aufgelisteten Werte drin?
Dieses Objekt kann in einem DP gespeichert werden. Ich weiß aber nicht, ob das zum Löschen des richtigen Schedules ausreicht.
-
@paul53 sagte in Cronjobs anzeigen:
@joergh sagte: Wenn ich das komplette Objekt benötige, kann ich dieses dann einfach in den Datenpunkt speichern
Nein, dieses spezielle Objekt kann nicht "stringifiziert" werden.
Ok, das erklärt so manches...bin schon langsam verzweifelt, warum das nicht gehen will...
@joergh sagte in Cronjobs anzeigen:
sched1._iobroker da einfach reinschreiben und dann sind die hier aufgelisteten Werte drin?
Dieses Objekt kann in einem DP gespeichert werden. Ich weiß aber nicht, ob das zum Löschen des richtigen Schedules ausreicht.
Das probiere ich dann mal aus
-
@joergh sagte: Das probiere ich dann mal aus
Gerade getestet: Dieses Objekt genügt anscheinend zum Löschen des richtigen Schedules.
const sched1 = schedule('0 12 * * *', function() { log('12:00 Uhr'); }); const obj = sched1._ioBroker; log(obj); log('Löschen'); clearSchedule(obj); let list = getSchedules(true); list.forEach(schedule => log(JSON.stringify(schedule)));
Log:
javascript.0 16:10:04.538 info script.js.common.Neuer_Test: { type: 'cron', pattern: '0 12 * * *', scriptName: 'script.js.common.Neuer_Test', id: 'cron_1731942604538_1726' } javascript.0 16:10:04.538 info script.js.common.Neuer_Test: Löschen javascript.0 16:10:04.538 info script.js.common.Neuer_Test: {"type":"cron","pattern":"* * * * *","scriptName":"script.js.aktiv.Emulation_Leistung","id":"cron_1731918921222_50447"} javascript.0 16:10:04.538 info script.js.common.Neuer_Test: {"type":"cron","pattern":"* * * * *","scriptName":"script.js.aktiv.Astro","id":"cron_1731926504927_69249"} javascript.0 16:10:04.538 info script.js.common.Neuer_Test: {"type":"cron","pattern":"59 1 * * *","scriptName":"script.js.aktiv.Astro","id":"cron_1731926504930_16594"} javascript.0 16:10:04.539 info script.js.common.Neuer_Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
-
-
@joergh sagte: Dann kriege ich meine Fenster-Lösung ja vielleicht doch mal hin...
Ich habe es mal über Skriptgrenzen mit dem Objekt im Datenpunkt getestet: Leider wird der Cronjob nicht gestoppt!
-
Brauche keine Scriptgrenzen überschreiten, sondern nur in einem Script mehrere JS-Script Funktionen. Hab alles erledigt, sitze nun am nächsten Problem, welches noch einmal kniffliger ist. Dazu mache ich einen neuen Thread auf. Danke Dir jedenfalls! Du hast mir wieder sehr weitergeholfen!