Με το cron έχουμε την αυτοματοποίηση ότι μια συγκεκριμένη μέρα/ώρα/μήνα θα εκτελεστεί κάποιο συγκεκριμένο task.
Το task αυτό μπορεί να είναι οτιδήποτε, είτε backup μιας βάσης δεδομένων, ένα import/export δεδομένων, αντιγραφή αρχείων και πολλά άλλα.
Σε αυτό το blog post θα δούμε το cron job ή αλλιώς WP Cron όπου αφορά συγκεκριμένα το WordPress.
Η cron λειτουργία η αλλιώς cron γραμμή εντολών ή cron job, είναι το πρόγραμμα το οποίο μας επιτρέπει στα λειτουργικά συστήματα βασισμένα σε Unix, να τρέξουμε αυτοματοποιημένες διαδικασίες και λειτουργίες χωρίς να χρειάζεται να τις παρακολουθούμε σε μια συγκεκριμένη χρονική στιγμή.
Στο WordPress αυτές οι προγραμματισμένες εργασίες διαχειρίζονται από το WP Cron.
Το wp cron είναι ο τρόπος με τον οποίο το wordpress διαχειρίζεται τις προγραμματισμένες του εργασίες. Πολλές από τις βασικές του λειτουργίες όπως πχ ο έλεγχος για updates, προγραμματισμένες δημοσιεύσεις, εκτελούνται μέσω του wp cron και προσωμειώνει ένα system cron job.
To WP Cron εκτελείται αυτόνομα μόνο του από το wordpress core και δεν χρειάζεται να δηλωθεί στο cron service του λειτουργικού συστήματος.
Κάμποσα χρόνια πίσω, όπου οι τεχνολογίες δεν ήταν και τόσο ανεπτυγμένες, πόλλοι πάροχοι υπηρεσιών φιλοξενίας (shared hosting), δεν έδιναν πρόσβαση στους πελάτες τους στα cronjobs. Με το wp cron, το wordpress έλυσε αυτό το πρόβλημα, καθώς μπορούσε να εκτελέσει τις απαραίτητες λειτουργίες αυτόνομα χωρίς την ανάγκη του system cron.
Στις μέρες μας πλέον αυτό δεν συμβαίνει, αλλά το wp cron έχει παραμείνει ως μέρος του wp core για πολλούς λόγους.
Ανάλογα με τον όγκο της wordpress ιστοσελίδας μας, το πλήθος των εγκατεστημένων plugins το wp cron (wp-cron.php) μπορεί να επιβαρύνει αρκετά το wordpress μας και την συνολική απόδοση του.
Θα δούμε πως μπορούμε εύκολα να απενεργοποιήσουμε το wp cron (wp-cron.php) και να το αντικαταστήσουμε με ένα system cron για πολύ καλύτερη απόδοση.
WP-Cron is triggered when the site receives a visit. In the scenario
where a site may not receive enough visits to execute scheduled tasks
in a timely manner, this file can be called directly or via a server
cron daemon for X number of times.
Πρέπει να καταλάβουμε ότι το wp-cron δεν είναι ένα πραγματικό cronjob, απλά μιμείται την λειτουργία του system cronjob όπου στην πράξη αυτό σημαίνει ότι σε μια ιστοσελίδα υψηλής επισκεψιμότητας θα δημιουργήσει σημαντικό πρόβλημα.
Το wp cron δεν τρέχει συνεχόμενα. Εκτελείται μετά από κάθε page load. Δηλαδή μετά από κάποια επίσκεψη στην ιστοσελίδα.
Αν ο server ή το hosting πακέτο μας δεν διαθέτει αρκετούς πόρους ή αρκετούς php workers, όταν χρειάστεί να εκτελεστεί το wp cron, το wordpress θα προσπαθήσει να το εκτελέσει αλλά δεν θα μπορέσει, καθώς οι php workers θα είναι ήδη κατειλημμένοι, και το wp cron απλά θα περιμένει τον πρώτο διαθέσιμο για να μπορέσει να εκτελεστεί.
Το ανάποδο σενάριο ισχύει επίσης. Αν μια ιστοσελίδα δεν έχει αρκετή επισκεψιμότητα, τα αυτόματα crons του wp-cron δεν θα εκτελεστούν στην ώρα τους, καθώς το wp-cron εκτελείτε μετά από page visit.
Η πιό σωστή προσέγγιση είναι να απενεργοποιήσουμε το wp-cron και να το αντικαταστήσουμε με ένα system cron. Με αυτήν την μέθοδο οι εσωτερικές εργασίες του wordpress θα εκτελεστούν σε προκαθορισμένο χρόνο και συνιστάται από το plugin handbook του wordpress.
Για να απενεργοποιήσουμε το wp-cron, πρέπει να πούμε στο ίδιο το wordpress να σταματήσει να το εκτελεί.
Βρίσκουμε το wp-config.php από το document root του wordpress και πριν την γραμμή που γράφει “That’s all, stop editing! Happy blogging.” προσθέτουμε την παρακάτω γραμμή
define('DISABLE_WP_CRON', true);
Αν έχεις μια shared hosting υπηρεσία στην WebHosting|4U, τότε μπορείς εύκολα να το ενεργοποιήσεις μέσα από το controlpanel σου.
Kάνουμε login στον hosting λογαριασμό μας.
Από το μενού δεξιά επιλέγουμε WordPress
Από την επιλογή Tools κάνουμε κλικ στο “Take over wp-cron.php”
To wordpress toolkit του controlpanel έχει κάνει όλες τις απαραίτητες ενέργειες για εμάς.
Αν πάμε στα scheduled tasks θα δούμε ότι έχει προστεθεί ένα system cronjob ενώ ταυτόχρονα στο wp-config.php έχει απενεργοποιηθεί το wp-cron.
Πατάμε από το μενού αριστέρα Websites & Domains και από το δεξιά column επιλέγουμε Scheduled Tasks
Θα δούμε ότι υπάρχει ένα cronjob με την περιγραφή “Running wp-cron.php for WordPress at https://mydomain.tld“
Δεν απαιτείται κάποια άλλη ενέργεια. Αν θεωρηθεί σκόπιμο μπορούμε να αλλάξουμε το χρονοδιάγραμμα για το πότε να εκτελείτε το cronjob.
Έναν πιο λεπτομερή οδηγό μπορείτε να βρείτε εδώ.