Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Cronjobs anzeigen [gelöst]

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Cronjobs anzeigen [gelöst]

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      JoergH last edited by JoergH

      Guten Morgen zusammen,

      folgendes Problem: Ich habe ein JS Script mit dem ich cronjobs einrichte. Wenn ich allerdings anschließend versuche die cronjobs anzeigen zu lassen, sagt er mir, dass es keine gäbe, obwohl definitiv eines läuft...woran liegt das?

      Der Code zum Anzeigen sieht so aus:

      log("Zeige alle laufenden Cronjobs:");
      
      const cronJobPrefix = "script.js.common.";  // Prefix für die Cronjobs
      let runningCronjobs = [];
      
      // Alle Cronjobs durchgehen
      for (let i = 0; i < 1000; i++) {  // Überprüfung bis maximal 1000 mögliche Cronjobs
          const cronJobState = `script.js.common.${i}`;
          
          if (existsState(cronJobState)) {
              runningCronjobs.push(cronJobState);
          }
      }
      
      // Wenn laufende Cronjobs gefunden wurden, anzeigen
      if (runningCronjobs.length > 0) {
          log("Laufende Cronjobs:");
          runningCronjobs.forEach(cronJob => {
              log(cronJob);
          });
      } else {
          log("Keine laufenden Cronjobs gefunden.");
      }
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @JoergH last edited by

        @joergh sagte: Der Code zum Anzeigen sieht so aus:

        Es gibt die Funktion getSchedules(true) zur Abfrage laufender CRON-Jobs.

        J 2 Replies Last reply Reply Quote 1
        • J
          JoergH @paul53 last edited by

          @paul53 Ok, danke. Schau ich mal...

          1 Reply Last reply Reply Quote 0
          • J
            JoergH @paul53 last edited by

            @paul53 Kann man den cronjobs keine expliziten Namen geben? Ich erhalte immer nur "0" und "1" zurück....?

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @JoergH last edited by paul53

              @joergh sagte: Ich erhalte immer nur "0" und "1" zurück....?

              Ich erhalte das mit .forEach zurück:

              javascript.0	20:10:05.380	info	script.js.common.Neuer_Test: {"type":"cron","pattern":"* * * * *","scriptName":"script.js.aktiv.Astro","id":"cron_1731831860818_37161"}
              javascript.0	20:10:05.380	info	script.js.common.Neuer_Test: {"type":"cron","pattern":"59 1 * * *","scriptName":"script.js.aktiv.Astro","id":"cron_1731831860866_93802"}
              javascript.0	20:10:05.380	info	script.js.common.Neuer_Test: {"type":"cron","pattern":"* * * * *","scriptName":"script.js.aktiv.Emulation_Leistung","id":"cron_1731831861064_53694"}
              
              J 1 Reply Last reply Reply Quote 0
              • J
                JoergH @paul53 last edited by

                @paul53 Ich habe gestern den ganzen Tag versucht hinzubekommen, dass ich cronjobs mit einem eigenen Namen, den ich an ein JS-Script übergebe anlegen und mit einem anderen gezielt wieder löschen kann. Ich kann zwar welche anlegen, aber es gelingt mir nicht diese auch nur wieder aufzulisten, geschweige denn zu löschen, da er mir immer "unbekannt" bei der ID zurück gibt.

                Wie hast Du denn genau die Abfrage mit getSchedules(true) durchgeführt?

                paul53 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @JoergH last edited by

                  @joergh sagte: Wie hast Du denn genau die Abfrage mit getSchedules(true) durchgeführt?

                  const list = getSchedules(true);
                  list.forEach(schedule => log(JSON.stringify(schedule)));
                  
                  J 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @JoergH last edited by

                    @joergh sagte: mit einem anderen gezielt wieder löschen kann.

                    Du möchtest in einem anderen Skript einen bestimmten Cronjob löschen? Das wird wohl nicht funktionieren, da der Bezeichner und die ID nicht übereinstimmen.

                    J 2 Replies Last reply Reply Quote 0
                    • J
                      JoergH @paul53 last edited by

                      @paul53 Wenn man in Blockly ein cronjob anlegt, gibt man den Namen an und wenn man ihn löschen will, dann nimmt man den gleichen Namen in dem entsprechenden Block. Ich will die dynamisieren, also einrichten können mit einem Namen in einem JS-Script Baustein und mit einem anderen Baustein wieder löschen. Irgendwie müssen die doch identifzierbar sein oder geht das überhaupt nicht?
                      Dann bliebe nur die Einrichtung und Löschung in einem JS-Script anzulegen und über ein Flag von außen zu steuern was er ausführt?

                      1 Reply Last reply Reply Quote 0
                      • J
                        JoergH @paul53 last edited by JoergH

                        @paul53 sagte in Cronjobs anzeigen:

                        @joergh sagte: Wie hast Du denn genau die Abfrage mit getSchedules(true) durchgeführt?

                        const list = getSchedules(true);
                        list.forEach(schedule => log(JSON.stringify(schedule)));
                        

                        Warum kriege ich keinen Wert, wenn ich versuche die Länge abzufragen?

                        const schedulesBefore = getSchedules(true);
                        console.info("Länge der schedulesBefore: ", schedulesBefore.length);
                        

                        [EDIT] - Ist ein Array...habs jetzt...

                        1 Reply Last reply Reply Quote 0
                        • J
                          JoergH @paul53 last edited by JoergH

                          @paul53

                          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...?

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @JoergH last edited by paul53

                            @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.

                            J 2 Replies Last reply Reply Quote 0
                            • J
                              JoergH @paul53 last edited by

                              @paul53

                              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 1 Reply Last reply Reply Quote 0
                              • J
                                JoergH @paul53 last edited by

                                @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?

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @JoergH last edited by

                                  @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.

                                  J 1 Reply Last reply Reply Quote 0
                                  • J
                                    JoergH @paul53 last edited by

                                    @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 😁

                                    paul53 1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @JoergH last edited by paul53

                                      @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
                                      
                                      J 1 Reply Last reply Reply Quote 1
                                      • J
                                        JoergH @paul53 last edited by

                                        @paul53

                                        Super, danke!

                                        Dann kriege ich meine Fenster-Lösung ja vielleicht doch mal hin...

                                        paul53 1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @JoergH last edited by

                                          @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!

                                          J 1 Reply Last reply Reply Quote 0
                                          • J
                                            JoergH @paul53 last edited by

                                            @paul53

                                            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!

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            746
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            20
                                            706
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo