Οι ιστότοποι μπορούν να εκτελούν προγραμματισμένες εργασίες με Cron

ρολόι

Έχουμε πολλά πλεονάζοντα συστήματα παρακολούθησης στην εργασία που εκτελούν τακτικά διαδικασίες. Μερικοί τρέχουν κάθε λεπτό, κάποιοι μία φορά τη νύχτα ανάλογα με το τι κάνουν. Για παράδειγμα, ενδέχεται να εκτελέσουμε ένα σενάριο που εξάγει όλους τους πελάτες που δεν έχουν πραγματοποιήσει αγορά σε 30 ημέρες για να τους στείλουν ένα κουπόνι.

Αντί να προσπαθείτε να παρακολουθείτε όλα αυτά με το χέρι, είναι πολύ πιο εύκολο να δημιουργήσετε εργασίες που προγραμματίζονται και εκτελούνται αυτόματα. Σε συστήματα που βασίζονται σε Unix, αυτό επιτυγχάνεται με το Cron. Για εσάς που ξέρετε τι κάνετε, μη διστάσετε να εκπαιδεύσετε εμένα και τους αναγνώστες εάν ρίξω οποιαδήποτε παραπληροφόρηση.

Είναι ατυχές, αλλά ο τυπικός προγραμματιστής ιστού δεν γνωρίζει καθόλου το Cron. Ακόμα κι αν είναι, οι εταιρείες φιλοξενίας ιστοσελίδων συχνά δεν παρέχουν πρόσβαση ή υποστήριξη στο Cron. Ο οικοδεσπότης μου είναι ένας από τους τελευταίους - σας επιτρέπουν να το χρησιμοποιήσετε, αλλά δεν το υποστηρίζουν.

Τι είναι το Cron;

cron ονομάζεται για την ελληνική λέξη Χρόνος, που σημαίνει ώρα. Το Cron τρέχει σε συνεχή βρόχο για να εκτελεί εργασίες που συσσωρεύονται από το Crontab (ίσως ονομάζεται για αυτίέλκος. Αυτές οι εργασίες αναφέρονται συνήθως ως Cronjobs και μπορούν να αναφέρουν σενάρια στον ιστότοπό σας.

Επεξήγηση διαγράμματος Cron

Πώς μπορώ να ρυθμίσω το Crontab

Η εκτέλεση του Cron στην πραγματικότητα μπορεί να είναι δύσκολη, οπότε εδώ έμαθα και πώς το έκανα Εάν απορροφήσει:

  1. Ρύθμισα το σενάριό μου για να ελέγξω τα Twitter API για να δούμε αν κάποιος είχε απαντήσει @ifsuck. Συγκρίνω αυτά τα μηνύματα με τα μηνύματα που έχω ήδη αποθηκεύσει στον ιστότοπο, εισάγοντας νέα.
  2. Μόλις το σενάριο λειτουργούσε, ενεργοποίησα δικαιώματα για τον χρήστη να εκτελέσει το σενάριο (744) και πρόσθεσα την αναφορά σεναρίου στο αρχείο Cronjob μου - περισσότερα σε αυτό αργότερα.
  3. Στη συνέχεια έπρεπε να συνδεθώ στον ιστότοπό μου μέσω SSH. Σε Mac, πήρε το άνοιγμα του τερματικού και την πληκτρολόγηση SSH username@domain.com όπου το όνομα χρήστη ήταν το όνομα χρήστη που ήθελα να χρησιμοποιήσω και ο τομέας ήταν ο ιστότοπος. Στη συνέχεια μου ζητήθηκε και έδωσα τον κωδικό πρόσβασης.
  4. Στη συνέχεια προσπάθησα να εκτελέσω το σενάριο απευθείας από τη γραμμή εντολών πληκτρολογώντας το όνομα αρχείου και τη σχετική διαδρομή στον διακομιστή: /var/www/html/myscript.php
  5. Μόλις το έκανα να λειτουργεί σωστά, πρόσθεσα τον απαραίτητο κωδικό Unix στην πρώτη γραμμή του αρχείου: #! / usr / bin / php -q . Πιστεύω ότι αυτό απλά λέει στο Unix να χρησιμοποιήσει την PHP για να εκτελέσει το σενάριο.
  6. Στη γραμμή εντολών Terminal, πληκτρολόγησα crontab (άλλοι μπορεί να χρειαστεί να πληκτρολογήσουν crontab -eκαι πατήστε enter… και αυτό ήταν το μόνο που χρειαζόταν!

Σύνταξη για το αρχείο Cronjob

Όσον αφορά το # 2 παραπάνω, το Cron χρησιμοποιεί ένα έξυπνο σχήμα για να καθορίσει πότε θα εκτελεστούν τα σενάρια σας. Στην πραγματικότητα, μπορείτε πραγματικά να το αντιγράψετε και να το επικολλήσετε στο Cronfile (στον κεντρικό υπολογιστή μου, βρίσκεται στο / var / καρούλι / cron / με το όνομα αρχείου ίδιο με το όνομα χρήστη μου).

# + —————- λεπτό (0 - 59)
# | + ————- ώρα (0 - 23)
# | | + ———- ημέρα του μήνα (1 - 31)
# | | | + ——- μήνας (1 - 12)
# | | | | + —- ημέρα της εβδομάδας (0 - 6) (Κυριακή = 0 ή 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Τα παραπάνω θα εκτελούν το σενάριό μου κάθε λεπτό. Εάν ήθελα να τρέχει μόνο μία φορά την ώρα, θα έβαζα μόνο πόσα λεπτά μετά την ώρα που θα ήθελα να τρέξει, έτσι εάν ήταν στο σήμα των 30 λεπτών:

30 * * * * /var/www/html/myscript.php

Βεβαιωθείτε ότι έχετε ορίσει και τα δικαιώματα σε αυτό το αρχείο ως εκτελέσιμα! Βρήκα ότι η σύνταξη, τα δικαιώματα και η εκτέλεση crontab από το παράθυρο Terminal ήταν οι πιο σημαντικοί παράγοντες. Κάθε φορά που θα αποθηκεύσω ξανά το αρχείο, θα έβρισκα και τα δικαιώματά μου που χρειάζονται επαναφορά!

ΕΝΗΜΕΡΩΣΗ: Εάν θέλετε να βεβαιωθείτε ότι εκτελούνται οι εργασίες, ένας απλός τρόπος είναι να ενημερώσετε ένα πεδίο βάσης δεδομένων με την τελευταία φορά που εκτελέστηκε το σενάριο. Εάν είναι πιο σπάνια, μπορείτε απλώς να γράψετε ένα email που σας στέλνει.

Πρόσθετοι πόροι Cron:

Πόσες εργασίες θα μπορούσατε να αυτοματοποιήσετε χρησιμοποιώντας το Cron;

8 Σχόλια

  1. 1

    Καλώς καλυμμένο άρθρο σχετικά με τη δημιουργία ενός cron, για κάποιον που είναι καινούργιος για το crojobs, το πιο δύσκολο κομμάτι στη δημιουργία ενός cron είναι να υπολογίσει το διάστημα εκτέλεσης του cronjob και είναι πολύ λογικό να πάρει ένα λάθος διάστημα στην πρώτη προσπάθεια. Εάν τα cronjobs σας είναι ευαίσθητα στο χρόνο, είναι καλό να συμπεριλάβετε ορισμένους κωδικούς στο σενάριο για να επαναφέρετε την κατάσταση, ώστε να ενημερώνεστε για την κατάσταση εκτέλεσης της εργασίας.

  2. 2

    Hi Doug,

    Μερικά πράγματα που πρέπει να λάβετε υπόψη όταν εργάζεστε με εργασίες cron

    Πρώτον, μετά από μερικές δεκάδες, θα θέλατε να έχετε ένα UI, μια βάση δεδομένων και μια σύνταξη αγγλικής εμφάνισης 😉

    Δεύτερον, ο cron θα απολύσει την εργασία στον καθορισμένο χρόνο, ανεξάρτητα από το αν η προηγούμενη επίκληση της εργασίας ολοκληρώθηκε. Έτσι, η εκτέλεση μιας εργασίας μία φορά το λεπτό που διαρκεί 2 λεπτά θα οδηγήσει γρήγορα σε πολλές ίδιες εργασίες.

    Στη συνέχεια, δεν υπάρχει αναφορά σφαλμάτων όταν κάτι πάει στραβά, οπότε θα πρέπει να προσθέσετε τη δική σας αναφορά σφαλμάτων.

    Τα έχω αντιμετωπίσει με δύο τρόπους:
    - να ενεργοποιηθεί η εφαρμογή μέσω cron look σε μια βάση δεδομένων για να καθοριστεί τι πρέπει να εκτελεστεί. Εκτελέστε το μία φορά το λεπτό ή την ώρα ανάλογα με το τι θέλετε
    - να δημιουργήσει κάθε σενάριο ένα αρχείο "κλειδώματος" στο / tmp και εάν υπάρχει, μην ξεκινήσετε ξανά, αυτό αποτρέπει διπλές εργασίες αν δεν τις θέλετε
    - εάν το σενάριο εντοπίσει το αρχείο κλειδώματος παλαιότερο από 1 ώρα (ή οτιδήποτε υποδηλώνει ότι έχετε πεθάνει) στείλτε μια ειδοποίηση μέσω email
    - να στείλετε το σενάριο email για αποτυχία της εργασίας, ώστε να γνωρίζετε ότι κάτι πήγε στραβά
    - Κοιτάξτε πλαίσια όπως Flux ή εμπορικούς προγραμματιστές όταν οι ανάγκες σας ξεπερνούν μερικά σενάρια

    chris

  3. 4

    Θα προσθέσω επίσης ότι στα περισσότερα συστήματα Linux / Unix, το "crontab -e" είναι αυτό που χρησιμοποιείτε για να επεξεργαστείτε το crontab σας. Νομίζω ότι ο κεντρικός υπολογιστής σας (Jumpline) χρησιμοποιεί μια τροποποιημένη έκδοση για λόγους ασφαλείας.

  4. 5

    Θυμάμαι ακόμα την πρώτη μέρα που γνώρισα την Cronnie. Είχα ακούσει πράγματα γι 'αυτήν, ότι ήταν αξιόπιστη, πάντα εγκαίρως, αλλά μερικές φορές λίγο μπερδεμένη για τις προθέσεις της.

    Το βρήκα αυτό αληθινό καθώς ήταν ένα απόλυτο μυστήριο για μένα στην αρχή. Αφού ρωτούσα για αυτήν, έπιασα αρκετά γρήγορα το πώς της άρεσε να λειτουργεί. Τώρα, δεν μπορώ να φανταστώ μια μέρα να περνάει χωρίς αυτήν στη ζωή μου. Κάνει το κοσμικό συναρπαστικό και σηκώνει πολλά βάρη από τους ώμους μου.

    Σε όλη τη σοβαρότητα, νιώθω ότι έχω γρατσουνίσει μόνο την επιφάνεια με αυτό που μπορώ να αυτοματοποιήσω με εργασίες cron. Είναι πραγματικά καλύτεροι φίλοι προγραμματιστών. Εάν χρησιμοποιείτε κάποιον όπως το CPanel για τη διαχείριση του διακομιστή σας, παρέχει μια πολύ πιο φιλική διεπαφή για τη δημιουργία crons. Συμπληρώστε με αναπτυσσόμενα μενού για λεπτά, ώρα, ημέρα, μήνα κ.λπ. που δημιουργεί τη γραμμή cron για εσάς.

  5. 7

    Βλέπω σίγουρα ότι αυτό είναι κάτι που πρέπει να χρησιμοποιεί κάθε έμπορος… Υπάρχει κάποιος που μπορεί να παρέχει αυτήν την υπηρεσία επειδή ακούγεται λίγο πολύ «τεχνικός»;

Ποια είναι η γνώμη σας;

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει το spam. Μάθετε πώς επεξεργάζονται τα δεδομένα των σχολίων σας.