Χρονοπρογραμματισμός Ενεργειών/Εργασιών στο Pegasus Web App - Πως λειτουργεί;

Σκοπός:

Η μελέτη εξηγεί την βασική λειτουργία του module [Χρονοπρογραμματισμένες Εργασίες] και παραθέτει παραδείγματα χρήσης.

Προϋποθέσεις:

Αρχικά, θα πρέπει να έχετε δει το κείμενο Scheduler - Βασική παραμετροποίηση και λειτουργία όσον αφορά το στήσιμο.

Πως εκτελούνται οι Χρονοπρογραμματισμένες Εργασίες;

Ανάλογα με τις ρυθμίσεις που κάνετε στο tab [Χρονοπρογραμματισμός] μιας εργασίας, θα δημιουργηθούν εγγραφές στη λίστα του [Ιστορικού Εκτέλεσης εργασιών] (μενού [Toolbox->Προγραμματισμένες Εργασίες->Εκτέλεση Εργασιών]). Οι εγγραφές αυτές θα έχουν συγκεκριμένο χρόνο εκτέλεσης.

Εκκινώντας την εκτέλεση των εργασιών, γίνεται ένας έλεγχος στην παραπάνω λίστα και ανάλογα με:

  • την ώρα που έχει οριστεί
  • αλλά και την τρέχουσα ώρα

αποφασίζεται αν η κάθε εγγραφή θα εκτελεστεί ή θα μπει σε εκκρεμότητα.

Το πόσο συχνά γίνεται αυτός ο έλεγχος εξαρτάται:

  1. Από την τιμή που εμφανίζεται στο πεδίο [χρόνος επόμενης εκτέλεσης (σε δευτερόλεπτα)] (εξ ορισμού ειναι 300 - δηλαδή 5 λεπτά - )

    Είναι η λογική να έχετε ανοιχτό το παράθυρο της [Εκτέλεσης Εργασιών] μόνιμα ώστε να εκτελείται απρόσκοπτα.

  2. ή από τη συχνότητα που θα ορίσετε να εκτελείται μέσω REST services (είτε με .bat είτε μέσω cronjob - βλ. αρχική μελέτη και παράγραφο [Εκτέλεση Ενεργειών] (υποπαράγραφοι Β και Γ))

    Είναι η πιο αυτόνομη λογική, χωρίς να χρειάζεται να έχετε ανοιχτό το παράθυρο της [Εκτέλεσης Εργασιών]. Ουσιαστικά είναι σαν να πατάτε το PLAY στην οθόνη αυτή, χωρίς ομως το [χρόνο επόμενης εκτέλεσης]. Το πότε θα εκτελεστεί ξανά εξαρτάται από τη συχνότητα που θα ορίσετε εσείς.

Επομένως και όσον αφορά τη 2η περίπτωση, δεν έχει νόημα να ορίσετε πχ:

  • μια εργασία να εκτελείται ανά 5 λεπτά
  • και η [εκτέλεση εργασιών] να γινεται ανά μια ώρα

Σε αυτή την περίπτωση, θα γίνει μεν ο έλεγχος στο [ιστορικό εκτέλεσης εργασιών], όμως ουσιαστικά θα "μαζέψει" όσες εγγραφές δημιουργήθηκαν ανά 5 λεπτά για την προηγούμενη ώρα και θα τις στείλει τότε (και όχι ανά 5 λεπτά όπως θα περιμενε κανονικά ο χρήστης).

Αντίστοιχα, δεν έχει νόημα να ορίσετε πχ:

  • μια εργασία να εκτελείται ανά 30 λεπτά
  • και η [εκτέλεση εργασιών] να γίνεται ανά 1 λεπτό

Σε αυτή την περίπτωση, ο έλεγχος στο [ιστορικό εκτέλεσης εργασιών] θα γίνεται πολύ συχνά (πράγμα αχρείαστο, καθώς η επόμενη εγγραφή στη λίστα θα έχει χρόνο εκτέλεσης μετά από 30 λεπτά). Υπενθυμίζουμε ότι η υπερβολική συχνότητα εκτέλεσης μπορεί να προκαλέσει προβλήματα στον server της εγκατάστασης.

Ως εκ τούτου, προτείνουμε η συχνότητα εκτέλεσης μιας εργασίας μέσα από τον [Χρονοπρογραμματισμό] της και η πυροδότηση της [εκτέλεσης εργασιών] μέσω REST services να έχουν:

  • παρόμοια συχνότητα
  • η πυροδότηση να έπεται χρονικά προγραμματισμένης ώρας εκτέλεσης πχ 1 λεπτό μετά (ώστε να εντοπίσει την εκκρεμή εκτέλεση εργασίας όσο το δυνατόν νωρίτερα)

Παραδείγματα για εκτέλεση μέσω REST services

1. Εκτέλεση εργασίας που επαναλαμβάνεται ανά μισή ώρα

Έστω ότι έχετε ορίσει 1 εργασία, η οποία θέλετε να επαναλαμβάνεται ανά μισή ώρα, ξεκινώντας από τις 10.00.

  • θα βάλετε στα REST services αρχικά να εκτελείται σίγουρα λίγο μετά τις 10.00 (πχ 10.05)
  • θα εκτελεστεί στις 7.05 και θα βρει το instance που έπρεπε να εκτελεστεί στις 10.00 και θα το πυροδοτήσει. Αυτόματα θα φτιαχτεί η επόμενη εγγραφή για εκτέλεση που θα έχει χρόνο εκτέλεσης 10.30 (θα το βρει από το πεδίο [εκτελείται κάθε (λεπτά)]
  • το REST θα πρέπει να ξαναμπεί λίγο μετά τις 10.30 (πχ 10.35) ώστε να βρει την εγγραφή που περιγράψαμε πριν. Εφόσον αυτή έχει σεταριστεί για τις 10.30 (χρόνος που έχει παρέλθει τότε), θα εκτελεστεί. Αυτόματα θα φτιαχτεί και η επόμενη εγγραφή με χρόνο εκτέλεσης 11.00 (με την ίδια λογική που περιγράψαμε πριν)
  • τα βήματα θα επαναλαμβάνονται ανάλογα με την εργασία και το πεδίο [διάρκεια(σε ώρες)]

Ως εκ τούτου, θα μπορούσατε να ορίσετε το REST να εκτελείται:

  • ανά μισή ώρα
  • ξεκινώντας την πρώτη του εκτέλεση στις 10.05 (ώστε να ψάξει να βρει αν υπάρχουν εγγραφές που έχει παρέλθει ο χρόνος στις 10.05 - 10.35 - 11.05 - 11.35 κ.ο.κ)

θα μπορούσατε να το βάλετε να εκτελείται πχ ανά 10 λεπτά, όμως θα ψάχνει αν βρει αν υπάρχουν εγγραφές που έχει παρέλθει ο χρόνος στις 10.05 - 10.15 - 10.25 - 10.35 - 10.45 - 10.55 - 11.05 - 11.15 κ.ο.κ), επομένως θα έχετε αχρείαστες κλήσεις στο REST.

2. Εκτέλεση εργασιών με εκκίνηση σε συγκεκριμένη ώρα

Έστω ότι έχετε ορίσει 3 εργασίες, οι οποίες θέλετε να εκτελούνται για μια φορά στις 7.00, 15.00 και 23.00.

  • θα βαλετε στα REST services αρχικά να εκτελείται σίγουρα λίγο μετά τις 7.00 (πχ 7.05)
  • θα εκτελεστεί στις 7.05 και θα βρει το instance που έπρεπε να εκτελεστεί στις 7.00 και θα το πυροδοτήσει. Αυτόματα θα φτιαχτεί η επόμενη εγγραφή για εκτέλεση που θα έχει χρόνο εκτέλεσης 15.00 (θα τη βρει από τη 2η εργασία)
  • το REST θα πρέπει να ξαναμπεί λίγο μετά τις 15.00(πχ 15.05) ώστε να βρει την εγγραφή που περιγράψαμε πριν. Εφόσον αυτή θα έχει σεταριστεί για τις 15.00 (χρόνος που έχει παρέλθει τότε), θα εκτελεστεί. Αυτόματα θα φτιαχτεί και η τελευταία εγγραφή της ημέρας που θα έχει χρόνο εκτέλεσης 23.00
  • με την ίδια λογική, το REST θα πρέπει να ξαναμπεί λίγο μετά τις 23.00 (πχ 23.05) ώστε να βρει την εγγραφή και να την εκτελέσει

Ως εκ τούτου, θα μπορούσατε να ορίσετε το REST να εκτελείται:

  • στις 7.05, στις 15.05 και στις 23.05
  • ή να ξεκινάει την εκτέλεση στις 7.05 και να επαναλαμβάνεται πχ ανά 2 ώρες (ώστε να ψάξει να βρει αν υπάρχουν εγγραφές που έχει παρέλθει ο χρόνος εκτέλεσης στις 9.05 - 11.05 - 13.05 - 15.05 -17.05 - 19.05 - 21.05 - 23.05 )
Τελευταία Αλλαγή: 02/04/2026