Παρακολούθηση cron job

Μάθετε αμέσως πότε οι προγραμματισμένες εργασίες σας σταματούν να εκτελούνται. Αντίγραφα ασφαλείας, queue workers, εργασίες ETL, συγχρονισμοί ανά ώρα - όλα παρακολουθούνται αθόρυβα.

Προσθήκη παρακολούθησης heartbeat →

Παρακολούθηση διαθεσιμότητας - DiagnoSEO

Πρόβλημα με προγραμματισμένες εργασίες

Το σκληρό χαρακτηριστικό των cron είναι ότι όταν σταματάνε, κανείς δεν στο λέει. Η web εφαρμογή συνεχίζει να δέχεται αιτήματα, η αρχική σελίδα φαίνεται ΟΚ, το monitoring είναι πράσινο – αλλά κάπου στον server, το νυχτερινό backup δεν τρέχει εδώ και δύο εβδομάδες. Ο queue worker έπεσε μετά το deploy και τα εκκρεμή jobs συσσωρεύονται. Ο συγχρονισμός κάθε ώρα αθόρυβα χάνει γραμμές λόγω δικαιωμάτων. Το μαθαίνεις μόνο όταν κάτι downstream τελικά καταρρεύσει – συνήθως ακριβώς όταν το χρειάζεσαι περισσότερο. Η ομάδα δεδομένων θέλει export, το support την ουρά e-mail, οι ops το backup. Τότε είναι ήδη αργά.

Η τυπική παρακολούθηση uptime αυτό δεν το πιάνει, γιατί δεν υπάρχει κάτι για ping. To cron δεν προσφέρει HTTP endpoint, δεν ανοίγει port, δεν ξεκινά server. Εκκινεί, τελειώνει, τέλος. Αν σταματήσει να λειτουργεί – δεν υπάρχει σήμα της απουσίας του μέχρι να το ψάξεις.

Αντίστροφο pattern: παρακολούθηση heartbeat

Η παρακολούθηση heartbeat (γνωστή και ως "dead man's switch" ή "παρακολούθηση cron") αντιστρέφει τη ροή. Αντί να εμείς ελέγχουμε τη δική σου υπηρεσία, η δική σου υπηρεσία δηλώνει παρουσία σε εμάς. Προσθέτεις μία γραμμή στο cron – curl σε ένα μοναδικό URL που δημιουργούμε – και αυτό το URL καταγράφει ένα timestamp σε κάθε χτύπημα. Εμείς ελέγχουμε για απουσία αυτών των pings. Αν το URL δεν λάβει hit στο αναμενόμενο διάστημα (συν περιθώριο), το θεωρούμε ως παραλειφθείσα εκτέλεση και στέλνουμε ειδοποίηση.

Το μοντέλο είναι απλό, αξιόπιστο και ανεξάρτητο γλώσσας. Ό,τι μπορεί να κάνει HTTP request, ενσωματώνεται. Bash μέσω curl, Python μέσω requests, Node μέσω fetch, PHP μέσω curl_init, Task Scheduler στα Windows μέσω Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, προγραμματισμένα γεγονότα Lambda – οτιδήποτε. Χωρίς SDK, χωρίς agent, χωρίς daemon για εγκατάσταση.

Πώς να το ρυθμίσετε

Στο DiagnoSEO Uptime Monitoring, κάντε κλικ στο "Προσθήκη monitor", επιλέξτε τύπο "Heartbeat / cron". Το εργαλείο δημιουργεί ένα μοναδικό URL με token – κάτι σαν https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9. Ορίστε το αναμενόμενο διάστημα (κάθε πόσο συχνά να εκτελείται το job, σε λεπτά) και το περιθώριο (πόσο καθυστέρηση θεωρείται ΟΚ πριν σημάνει συναγερμός). Αποθηκεύστε.

Τώρα τροποποιήστε το cron, ώστε να κάνει ping στο URL μετά από κάθε επιτυχή εκτέλεση. Τρία στυλ ανάλογα με το περιβάλλον:

# Bash cron - ping μόνο μετά από επιτυχία
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Ή αν είναι ΟΚ η μερική επιτυχία
0 3 * * * /usr/bin/backup.sh; curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Python
import requests
def main():
    do_the_work()
    requests.get('https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9', timeout=5)

# GitHub Actions
- name: Notify heartbeat
  if: success()
  run: curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9

Από εκείνη τη στιγμή, κάθε επιτυχής εκτέλεση μας κάνει ping και εμείς καταγράφουμε το timestamp. Αν δεν δούμε ping εντός διάστημα + περιθώριο λεπτών, ανοίγεται incident και αποστέλλονται ειδοποιήσεις σε όλα τα ενεργά κανάλια: Email, Telegram, Slack, Discord, SMS.

Επιλογή διαστήματος και περιθωρίου

Το διάστημα πρέπει να ταιριάζει ακριβώς με το πρόγραμμα του job. Νυχτερινό backup στις 3:00 – διάστημα 1440 λεπτά (24 ώρες). Συγχρονισμός κάθε ώρα – 60. Worker που τσεκάρει κάθε 5 λεπτά – 5.

Το περιθώριο καλύπτει το φυσικό jitter. Τα cron δεν εκκινούν κυριολεκτικά στη νανοσεκόντα – είναι σε ουρά, περιμένουν να τελειώσει το προηγούμενο, κάνουν back-off σε παροδικά σφάλματα. Ένα job 24 ωρών με περιθώριο 1 ώρα δίνει άνετο buffer δίχως καθυστέρηση ειδοποιήσεων. Ένας worker κάθε 5 λεπτά με περιθώριο 2 λεπτών εντοπίζει γρήγορα αληθινούς θανάτους, χωρίς false positive από στιγμιαία διακοπή 30 δευτερολέπτων. Κατά προσέγγιση: βάλτε το περιθώριο στο 10-50% του διαστήματος, ανάλογα με το πόσο "ασταθές" είναι το job.

Προτεινόμενα patterns

  • Ping μόνο μετά από επιτυχία. Χρησιμοποιήστε && στο bash – εκτέλεση που απέτυχε δεν κάνει ping. Εμείς θα εντοπίσουμε την απουσία ping και θα ειδοποιήσουμε.
  • Ping σε κάθε επανάληψη βρόχου. Για worker μεγάλου χρόνου εκτελέστε ping εντός του βρόχου μετά από κάθε επιτυχή μονάδα εργασίας, όχι στο τέλος. Έτσι, ένας κολλημένος worker εντοπίζεται κατά τη διάρκεια της εκτέλεσης.
  • Ένα heartbeat ανά λογικό job, όχι ανά script. Αν τρία scripts αποτελούν μαζί ένα νυχτερινό pipeline, κάντε ping μία φορά στο τέλος της αλυσίδας. Αυτό δίνει καθαρό σήμα "ζει το pipeline;".
  • Συνδυάστε με τα logs. Το heartbeat δείχνει ότι το job ξεκίνησε. Τα logs της εφαρμογής δείχνουν τι έκανε. Μαζί παρέχουν πλήρη εικόνα.

Τι συμβαίνει όταν το heartbeat χαθεί

Ένα incident ανοίγει τη στιγμή που περνάει το deadline. Το dashboard δείχνει το monitor με κόκκινο και σφάλμα "Καμία heartbeat για Χ λεπτά". Ειδοποιήσεις αποστέλλονται σε όλα τα ενεργά κανάλια. Μόλις έρθει νέο heartbeat, ο monitor επιστρέφει αυτόματα σε up – γίνεται πράσινος, το incident κλείνει και (αν έχεις ενεργό recovery alert) λαμβάνεις ειδοποίηση "back online".

Όλα αυτά λειτουργούν όπως σε άλλα monitors – heatmap, uptime ποσοστό, ιστορικό, tags, αναζήτηση, export. Από πλευράς dashboard, ένα heartbeat monitor είναι απλά άλλη μία γραμμή, sortable και filtrable δίπλα σε HTTP, ping, port και API.

Λίστα ελέγχου

Προσθέστε monitor → τύπος Heartbeat → αντιγραφή παραγόμενου URL → προσθήκη σε cron / worker / scheduler → ορίστε διάστημα και περιθώριο → αποθήκευση → έτοιμο. Τώρα θα γνωρίζετε αμέσως αν μια προγραμματισμένη εργασία σταματήσει – κάτι που είναι μακροπρόθεσμα από τις πιο κρίσιμες αποφάσεις για το monitoring που μπορείτε να πάρετε.

Συχνές ερωτήσεις

  • Αντίστροφο monitoring — η προγραμματισμένη εργασία σου κάνει ping στο URL μας όταν εκκινεί με επιτυχία. Αν δεν λάβουμε σύνδεση εντός του αναμενόμενου παραθύρου, ειδοποιούμε. Λύνει το πρόβλημα των αθόρυβων αποτυχιών: ένα χαλασμένο cron job δεν παράγει σφάλμα και δεν ενεργοποιεί το κλασικό alert uptime.

  • Προσθέστε curl -fsS <heartbeat_url> στο τέλος της εντολής cron. Αν αποτύχει η προηγούμενη εντολή, το curl δεν εκτελείται και το heartbeat λείπει. Ή κάντε ping στην αρχή ΚΑΙ στο τέλος με διαφορετικά μονοπάτια — δίνει χωριστά σήματα "ξεκίνησε" και "ολοκληρώθηκε".

  • Περίπου 2–3x τον τυπικό χρόνο εκτέλεσης του job. Αν το ημερήσιο backup σου διαρκεί 30 λεπτά, όρισε grace στα 90 λεπτά — καλύπτει επιβραδύνσεις χωρίς ψευδείς συναγερμούς. Για jobs με μεταβλητό χρόνο εκτέλεσης, ορίστε γενναιόδωρα και χρησιμοποιήστε το dashboard για να βρείτε outliers.

  • Ναι – ορίστε το διάστημα ανάλογα (π.χ. 60 λεπτά αναμενόμενο με 15 λεπτά grace). Ο monitor περιμένει ping τουλάχιστον κάθε 75 λεπτά. Αν το job τρέχει συχνότερα (κάθε 5 λεπτά), το heartbeat URL το υποστηρίζει επίσης – απλά προσαρμόστε το διάστημα.

  • Ναι. Προσθέστε outgoing HTTP request στο heartbeat URL στο τέλος της Lambda function. Ο monitor το χειρίζεται ακριβώς όπως το cron heartbeat – τα ίδια alerts, το ίδιο grace period. Πολύ χρήσιμο για προγραμματισμένες Lambdas όπου τα alarm του CloudWatch δεν πιάνουν σιωπηλές αποτυχίες εκτέλεσης.

Προσθήκη παρακολούθησης heartbeat →

Ξεκλειδώστε υψηλότερες κατατάξεις και ποιοτική επισκεψιμότητα

Αναπτύξτε την επιχείρησή σας με το #1 λογισμικό SEO και marketing περιεχομένου με τεχνητή νοημοσύνη.

Αναβάθμιση σε Advanced