Cron | Τρέχουμε αυτόματα εντολές και εφαρμογές με τη βοήθεια του


Στο τελευταίο άρθρο μάθαμε πώς να γράφουμε script εντολών για να αυτοματοποιήσουμε τις καθημερινές μας εργασίες και είπαμε ότι "ο καλός ο Λινουξάς από τα script του φαίνεται". Όταν όμως φτάσουμε στο σημείο να έχουμε καμιά δεκαριά από αυτά, πρέπει πλέον να θυμόμαστε να τα τρέχουμε σε τακτά χρονικά διαστήματα. Εδώ λοιπόν έρχεται το Cron να μας λύσει τα χέρια, η δουλειά του οποίου είναι να προγραμματίζει αυτόματα την εκτέλεσή τους.

Με το Cron μπορούμε να τρέξουμε από μία εντολή έως ένα ολόκληρο script και να κάνουμε από μία επανεκκίνηση, έως ένα πλήρες backup των αρχείων μας σε εξωτερικό σκληρό δίσκο. Το μόνο λοιπόν που χρειάζεται να κάνουμε είναι να δηλώσουμε την εντολή που θέλουμε να τρέξει και να του δώσουμε τις χρονικές παραμέτρους που θέλουμε.

Η λογική του Cron


Τα Cronjob μοιάζουν κάπως έτσι:

* * * * * εντολή

Στους πέντε αστερίσκους βάζουμε τις χρονικές προδιαγραφές και στη συνέχεια την εντολή ή το script που θέλουμε να τρέξουμε. Ένα παράδειγμα είναι αυτό:

58 16 15 8 *  /home/pi/backup.sh

Εδώ το script "backup.sh" που βρίσκεται στο φάκελο "home" του χρήστη "pi", θα τρέξει στις 15 Αυγούστου στις 16:58 η ώρα.

  • Το πρώτο νούμερο (58) λοιπόν είναι το λεπτό στο οποίο θα τρέξει η εντολή και δέχεται αριθμούς από το 0 έως το 59.
  • To δεύτερο (16) είναι η ώρα και δέχεται αριθμούς από το 0 έως το 23.
  • Το τρίτο (15) είναι η μέρα του μήνα και δέχεται αριθμούς από το 1 έως το 31.
  • Το τέταρτο (8) είναι ο μήνας και δέχεται αριθμούς από το 1 έως το 12.
  • Το πέμπτο το οποίο δεν το έχουμε ορίσει (*) είναι η μέρα της εβδομάδας και δέχεται αριθμούς από το 0 έως το 7 (το 1 και το 7 είναι η Κυριακή).


Γνωρίζοντας λοιπόν όλα τα παραπάνω, αν θέλουμε να τρέχει το script μας κάθε μέρα στις δύο η ώρα το πρωί, θα δώσουμε το εξής:

0 2 * * * /home/pi/backup.sh

Αν θέλουμε να τρέχει μία φορά την εβδομάδα και συγκεκριμένα κάθε Κυριακή στις έξι το απόγευμα, δίνουμε το εξής:

0 18 * * 7 /home/pi/backup.sh

Τέλος αν θέλουμε να τρέχει μία φορά το μήνα και συγκεκριμένα την πρώτη του μηνός και στις τρεις το πρωί, δίνουμε το εξής:

0 3 1 * * /home/pi/backup.sh

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


Αφού μάθαμε τι είναι το Cron πρέπει τώρα να δούμε πώς θα το ρυθμίσουμε στο σύστημά μας. Ο εύκολος τρόπος είναι να εγκαταστήσουμε το "Gnome Schedule" με την εντολή:

sudo apt install gnome-schedule

Θα το βρούμε στη λίστα των εφαρμογών μας ως "Scheduled Tasks" και πραγματικά είναι πολύ απλό στη χρήση.


Όσοι προτιμούμε το τερματικό στον υπολογιστή μας ή είμαστε αναγκασμένοι να το χρησιμοποιήσουμε λόγω απομακρυσμένης SSH σύνδεσης, θα πρέπει να επεξεργαστούμε το "crontab" (cron table) για να προσθέσουν τα δικά μας cronjob. Ανοίγουμε λοιπόν ένα τερματικό και δίνουμε την εντολή:

crontab -e

Προσθέτουμε το cronjob που θέλουμε, για παράδειγμα:

0 2 * * * /home/pi/update.sh

Αποθηκεύουμε και κλείνουμε το τερματικό. Για να δούμε τέλος μία λίστα με τα cronjob που έχουμε ήδη φτιάξει, δίνουμε την εντολή:

crontab -l

#Pro tip:
Αν θέλουμε να τρέχουμε μία συγκεκριμένη εντολή σε κάθε επανεκκίνηση, μπορούμε να αντικαταστήσουμε τους αριθμούς που και τους αστερίσκους με το "@reboot". Για παράδειγμα:

@reboot /home/pi/update.sh

#Pro tip 2:
Αν θέλουμε η εντολή μας να τρέχει στο παρασκήνιο, χρειάζεται απλά να προσθέσουμε ένα "&" στο τέλος της. Για παράδειγμα:

@reboot /home/pi/update.sh &

7 Likes

Όταν έχουμε εντολές εγκατάστασης που αφορούν μια διανομή θα πρέπει να λέγεται. Αυτό αφορά το Ubuntu. Εντελώς κατανοητό ότι μια παρεμβολή με το τι κάνουμε σε κάθε διανομή είναι ανεπιθύμητη αλλά πρέπει να πούμε ότι αφορά το Ubuntu και γιατί όχι να έχει λίγο χώρο για παραπομπές για τις άλλες. Πχ για το Arch https://wiki.archlinux.org/index.php/cron

1 Like

Έχεις δίκιο, ωστόσο στατιστικά οι αρχάριοι/νέοι χρήστες προτιμούν τις debian based διανομές. Κάποιος που χρησιμοποιεί Arch ή κάποια πιο προχωρημένη διανομή, δεν έχει ανάγκη το παρόν άρθρο.

1 Like

Το χρησιμοποιώ κατά κόρον (κρόνορ ; :smile: ). Για αυτοματοποιημένες ενημερώσεις στις διανομές της οικογένειας Debian πάντως υπάρχει το πακέτο unattended-upgrades , αρκετά χρήσιμο για servers.

2 Likes