Κεφάλαιο 15 · 15.1
Cron Jobs: εργασίες αυτόματα σε προκαθορισμένο χρόνο
Δείτε το σε ένα σύντομο βίντεο
Ένα cron job (ή cronjob) είναι μια εντολή που ο server εκτελεί για εσάς σε συγκεκριμένες χρονικές στιγμές. Για παράδειγμα κάθε νύχτα ένα script που καθαρίζει παλιά δεδομένα, κάθε ώρα μια σύνδεση με τη λογιστική σας εφαρμογή, ή οι προγραμματισμένες εργασίες του WordPress ή του Laravel. Αυτό το ρυθμίζετε στις Cron Jobs, κάτω από τις Advanced Features.

Κανόνες στην WebOké
Ένας server τον μοιράζεστε με άλλους ιστοτόπους. Γι' αυτό ισχύουν κανόνες για τα cron jobs:
- Αφήστε μια εργασία να ξεκινά το πολύ μία φορά κάθε 10 λεπτά. Αυτό ζητάμε από όλους τους πελάτες μας. Ο server δεν το επιβάλλει, αλλά μια εργασία που εκτελείται πιο συχνά επιβραδύνει τον server για εσάς και για τους άλλους. Αν έχετε περισσότερες εργασίες, μην τις ξεκινάτε όλες την ίδια στιγμή.
- Κρατήστε μια εργασία σύντομη. Αν πρέπει να γίνουν πολλά, μοιράστε την εργασία σε περισσότερους γύρους.
Δημιουργία μιας εργασίας
- Στο DirectAdmin, κάτω από τις Advanced Features, κάντε κλικ στο Cron Jobs.
- Κάντε κλικ στο CREATE CRON JOB.
- Συμπληρώστε στα πεδία Minute, Hour, Day of Month, Month και Day of Week πότε πρέπει να εκτελείται η εργασία (1). Ένας αστερίσκος * σημαίνει "κάθε".
- Κάτω από τα πεδία χρόνου βλέπετε στο Cron job will run: (2) σε απλή γλώσσα πότε εκτελείται η εργασία. Ελέγξτε το.
- Πληκτρολογήστε στο Command (3) τι πρέπει να συμβεί, με πλήρεις διαδρομές (δείτε παρακάτω).
- Δεν θέλετε να λαμβάνετε e-mail μετά από κάθε εκτέλεση; Κάντε κλικ στο PREVENT E-MAILS (4).
- Κάντε κλικ στο CREATE (5).

Η εργασία εμφανίζεται έπειτα στη λίστα. Αν θέλετε να τη διαγράψετε, επιλέξτε τη (1) και κάντε κλικ στο Διαγραφή.

Παραδείγματα χρόνων
| Minute | Hour | Day of Month | Month | Day of Week | Σημασία |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Κάθε μέρα στις 03:30 |
| */10 | * | * | * | * | Κάθε 10 λεπτά |
| 0 | * | * | * | * | Κάθε ολόκληρη ώρα |
| 15 | 8 | * | * | 1-5 | Τις εργάσιμες ημέρες στις 08:15 (1 είναι Δευτέρα, 0 ή 7 είναι Κυριακή) |
| 0 | 2 | 1 | * | * | Την πρώτη ημέρα κάθε μήνα στις 02:00 |
Μπορείτε να διαχωρίσετε τιμές με κόμματα (1,15,30), να ορίσετε ένα εύρος με παύλα (5-7) και ένα διάστημα με */ (*/2 είναι κάθε δεύτερο). Επιλέξτε κατά προτίμηση μια ήσυχη, τυχαία χρονική στιγμή, όπως 03:17 αντί για ακριβώς τα μεσάνυχτα.
Η εντολή: πλήρεις διαδρομές
Ένα cron job δεν γνωρίζει σε ποιον φάκελο πρέπει να ξεκινήσει. Γι' αυτό χρησιμοποιείτε πάντα πλήρεις διαδρομές. Το πακέτο σας βρίσκεται στον server στο /home/ ακολουθούμενο από το όνομα χρήστη DA σας (δείτε Το όνομα server και το User Name DA σας βρίσκετε).
Εκκίνηση ενός PHP script:
/usr/local/bin/php /home/gebruikersnaam/domains/jouwdomein.nl/public_html/taak.php
Αυτό χρησιμοποιεί την ίδια έκδοση PHP με τον ιστότοπό σας, δηλαδή την έκδοση από το Select PHP version (δείτε Η επιλογή της έκδοσης PHP (Select PHP version)).
Κλήση μιας διεύθυνσης ιστού (για παράδειγμα αν το λογισμικό σας δίνει ένα cron URL):
curl --silent https://www.jouwdomein.nl/cron.php > /dev/null
WordPress: Το WordPress ξεκινά τις προγραμματισμένες εργασίες του εξ ορισμού όταν έρχεται ένας επισκέπτης. Σε έναν ιστότοπο με πολλή κίνηση ή έναν ιστότοπο με λίγη επισκεψιμότητα, είναι καλύτερο να το κάνετε αυτό με ένα cron job. Τότε βάλτε στο wp-config.php define('DISABLE_WP_CRON', true); και δημιουργήστε μια εργασία που κάθε 15 λεπτά εκκινεί το /usr/local/bin/php /home/gebruikersnaam/domains/jouwdomein.nl/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/gebruikersnaam/domains/jouwdomein.nl/artisan schedule:run. Προσέξτε: το schedule:run εκτελεί μόνο εργασίες που πέφτουν ακριβώς τη στιγμή του cron. Αν το cron εκτελείται κάθε 10 λεπτά, τότε μια εργασία που είναι προγραμματισμένη για τις 08:05 δεν εκτελείται ποτέ.
E-mail μετά από κάθε εργασία
Αν μια εργασία παράγει έξοδο (κείμενο ή ένα μήνυμα σφάλματος), ο server μπορεί να την στείλει με e-mail. Αυτό συμβαίνει μόνο αν έχετε ρυθμίσει μια διεύθυνση. Έχετε τρεις δυνατότητες:
- E-mail σε δική σας διεύθυνση: κάντε κλικ στο SEND ALL CRON OUTPUT TO E-MAIL, συμπληρώστε μια διεύθυνση e-mail και κάντε κλικ στο SAVE. Αυτό ισχύει για όλες τις εργασίες σας. Αν αφήσετε το πεδίο κενό, δεν θα λαμβάνετε e-mail.
- Χωρίς e-mail για μία εργασία: κατά τη δημιουργία κάντε κλικ στο PREVENT E-MAILS. Τότε προστίθεται >/dev/null 2>&1 στο τέλος της εντολής σας και η έξοδος αυτής της εργασίας εξαφανίζεται, ακόμα και αν έχετε ρυθμίσει μια διεύθυνση.
- Έξοδος σε αρχείο καταγραφής: βάλτε στο τέλος της εντολής σας >> /home/gebruikersnaam/cron-log.txt 2>&1. Έτσι βλέπετε αργότερα στο File Manager τι έκανε η εργασία. Καθαρίζετε ένα τέτοιο αρχείο από καιρό σε καιρό.

Συμβουλή: Ρυθμίστε μια διεύθυνση όσο δοκιμάζετε μια νέα εργασία. Έτσι βλέπετε αμέσως αν λειτουργεί. Μετά απενεργοποιήστε την ή στείλτε την έξοδο σε αρχείο καταγραφής. Τα e-mail από cron jobs προσμετρούνται στο όριο αποστολής του πακέτου σας (δείτε Verzendlimieten en de melding 'message limit reached').
Συχνές ερωτήσεις
Η εργασία μου εμφανίζει "Could not open input file".
Η διαδρομή προς το script δεν είναι σωστή. Ελέγξτε την πλήρη διαδρομή στο File Manager: ξεκινά με /home/gebruikersnaam/domains/.
Το script μου λειτουργεί στο πρόγραμμα περιήγησης, αλλά όχι ως cron job.
Ένα script που εκτελείται μέσω cron δεν γνωρίζει κάτω από ποιον ιστότοπο εκτελείται: οι μεταβλητές $_SERVER['SERVER_NAME'] και $_SERVER['DOCUMENT_ROOT'] είναι κενές και οι σχετικές διαδρομές στο include λειτουργούν διαφορετικά. Χρησιμοποιήστε στο script πλήρεις διαδρομές, ή καλέστε το script μέσω curl με τη διεύθυνση ιστού.
Μπορώ να δω πότε εκτελέστηκε μια εργασία;
Το DirectAdmin δεν το καταγράφει αυτό για εσάς. Γι' αυτό αφήστε την εργασία να γράφει την έξοδό της σε αρχείο καταγραφής, με την ημερομηνία μέσα (για παράδειγμα date >> /home/gebruikersnaam/cron-log.txt ως πρώτη εντολή, με ; ανάμεσα).
Τι κάνει το Run on @reboot;
Τότε η εργασία εκτελείται μόνο όταν ο server επανεκκινεί, και όχι σε σταθερές χρονικές στιγμές. Αυτό σπάνια το χρειάζεστε σε έναν ιστότοπο.
