Crontab tutorial
================
Τι ειναι?
O crontab ειναι απο τα πιο χρησιμα εργαλεια που μας δινει ενα *nix συστημα.
Στην ουσια ελεγχει τι θα τρεξει, και ποτε μειωνοντας ετσι τον φορτο εργασιας
για τους διαχειριστες συστηματων/εφαρμογων.
Πως λειτουργει?
Ο καθε χρηστης εχει το δικο του crontab στο οποιο μπορει να βαλει εντολες η δικα του
script να τρεχουν οποτε του πουν η οταν το θελει αυτος.Φυσικα οι εντολες που μπορει να
τρεξει εξαρτονται απο τα δικαιοματα που εχει στο OS.
Για να βαλουμε μια εντολη η εφαρμοφη στο crontab θα πρεπει:
1) να μην ειμαστε στο cron.deny
2) να μπορεσουν να γραψουμε στον crontab
Για να γραψουμε υπαρχουν 2 τροποι:
1) με redirect απο αρχειο...Δηλαδη crontab << cron_file
*) To cron_file εχει τα script/εφαρμογες (στη μορφη που διαβαζει ο contab) που θελουμε να βαλουμε στον crontab
2) με την εντολη crontab -e
*) η εντολη αυτη μας ανοιγει τον crontab μορφη επεξεργασιας... και για μαντεψτε ποιον
editor χρησιμοποιει ο cron???
Ελατε... για προσπαθηστε.... λιγο ακομη...
ΟΚ θα σας το πω....
VI φυσικα.
Οποτε για να σωσετε οτι εχετε γραψει το ESC :wq! ειναι ο φιλος σας.
Δομη του crontab
================
Ας δουμε την δομη του crontab για να καταλαβουμε με τι εχουμε να κανουμε...
# .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
To πρωτο αστερακι ( * ) ειναι για τα λεπτα της ωρας.
Παραδειγμα:
Θελουμε να τρεχει στα 5 πρωτα λεπτα καθε ωρας το script m_report.sh οποτε θα το γραψουμε
05 * * * * /usr/local/bin/m_repost.sh > /dev/null
Αν θελουμε να εχουμε ανα τεταρτο αναφορα τοτε θα ειναι
00,15,30,45 * * * * /usr/local/bin/quorter_report.sh
To δευτερο αστερακι ειναι τα την ωρα
Θελουμε να τρεχει μια φορα την μερα στης 09:00 το πρωι μια αναφορα τοτε γραφουμε:
00 09 * * * /usr/local/bin/h_report.sh
Αν θελουμε να τρεχει μια στις 09:00 το πρωι και μια στις 17:00 το απο απογεμα τοτε γραφουμε:
00 09,17 * * * /usr/local/bin/h_report.sh
To τριτο αστερακι ειναι για τις μερες του μηνα απο 1 - 31 η οσες μερες εχει ο καθε μηνας.
Το τεταρτο αστερακι ειναι για τους 12 μηνες.
Εστω οτι θελουμε να στελνουμε στις 09:00 καθε 25 Δεκεμβρη και 1 Γεναρη ευχετηριες καρτες στο προσωπικο τοτε γραφουμε
#Sent merry christmas mail to all 00 09 25 12 * /usr/local/bin/merry_christmas.sh #Sent Happy new year mail to all 00 09 1 1 * /usr/local/bin/happy_new_year.sh
σσ: επειδη δεν ξερουμε ποτε θα ειναι 25 και 1 βαζουμε * στις μερες ωστε να τρεχει μια φορα το χρονο ανεξαρτητα ποτε
ποια μερα ειναι 25 και 1.
Το πεμπτο αστερακι ειναι για την μερες της εβδομαδας
Το αφεντικο μας ζηταει "Καθε Παρασκευη στις 09:00 και καθε 1 καθε μηνα να εχω μια αναφορα καταστασης στο email μου. Αν δεν την εχω παραιτησου"
Ο crontab θα ειναι σε αυτη την περιπτωση:
00 09 * * 5 /usr/local/bin/report.sh
και
00 09 1 * * /usr/local/bin/report.sh
Παραδειγματα:
[komodino@creta ROCKY 1 (SYLVESTER STALLONE - 1976)]$ crontab -l #Δεν υπαρχει κατι στο δικο μου crontab no crontab for komodino [komodino@creta ROCKY 1 (SYLVESTER STALLONE - 1976)]$ sudo crontab -l #Δεν υπαρχει κατι στου root crontab no crontab for root [komodino@creta ROCKY 1 (SYLVESTER STALLONE - 1976)]$ sudo crontab -h #Επιλογες που εχουμε crontab: invalid option -- 'h' crontab: usage error: unrecognized option usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] crontab -n [ hostname ] crontab -c (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -n (set host in cluster to run users' crontabs) -c (get host in cluster to run users' crontabs) [komodino@creta ROCKY 1 (SYLVESTER STALLONE - 1976)]$ sudo crontab -l -u komodino #Δεν υπαρχει κατι στο δικο μου crontab ( σαν root) no crontab for komodino [komodino@creta ROCKY 1 (SYLVESTER STALLONE - 1976)]$
Ενα ολοκληρομενο crontab για αναφορες θα ειναι
00 09 * * 5 /usr/local/bin/report.sh > /dev/null 00 09 1 * * /usr/local/bin/report.sh > /dev/null #Sent Happy new year mail to all 00 09 1 1 * /usr/local/bin/happy_new_year.sh > /dev/null #Sent merry christmas mail to all 00 09 25 12 * /usr/local/bin/merry_christmas.sh > /dev/null 05 * * * * /usr/local/bin/m_repost.sh > /dev/null 00,15,30,45 * * * * /usr/local/bin/quorter_report.sh > /dev/null 00 09 * * * /usr/local/bin/h_report.sh > /dev/null 00 09,17 * * * /usr/local/bin/h_report.sh > /dev/null
- Συνδεθείτε ή εγγραφείτε για να σχολιάσετε
Σχόλια
Αhoj slackware!
Λίγες διευκρινήσεις
Στο παράδειγμα που είσαι στον φάκελλο Rocky δεν κατάλαβα τίποτα.Απλά μας δείχνεις ότι δεν υπάρχει ρυθμισμένο crontab?
και στο τέλος στέλνεις τα αποτελέσματα στο /dev/null για πρακτικούς λόγους; πχ να μην γεμίσει το τερματικο;
Ναι ακριβως οτι ειναι αδειο τοσο για τον χρηστη root οσο και για τον χρηστη komodino.
Οταν τρεχει κατι με το cron δεν θες να εμφανιζεται στην οθονη τα αποτελεσματα.
Αλλωστε για αυτο βαζεις μια διεργασια / ενα script στο cron γιατι ξερεις τα αποτελεσματα και δεν χρειαζεται να τα βλεπεις...
Αν σε ενδιαφερουν μπορεις να τα γραφεις σε αρχειο ή να τα στελνεις με email
Ρίξε λίγο φως στην υπόθεση.
Απλά για να το δοκιμάσω είπα στο cron να τρέχει κάθε μέρα στις 13:26 τον midori
Έδωσα λοιπόν
Για το ιστορικό τα λάθη εδώ είναι επειδή δεν έγραφα σωστά στο αρχείο.
Εγραφα μόνο midory και περίμενα να τρέξει.
Πάμε στο σωστό (ελπίζω)
και οι πρώτες γραμμές του αρχείου
Η πρώτη δοκιμή αντι midori > dev/null ήταν midori &
Dεν ετρεξε καμία φορά.
Στην αρχή του tutorial λες ότι δεν πρέπει ο χρήστης να είναι στο cron.deny
το manual μιλάει και για το cron.allow εγώ δεν έχω κανένα από αυτά.
Να δημιουργήσω λες cron.deny ή cron.allow
Α και κάτι βασικό είμαι σε mint και το crontab το βρήκα στημένο δεν έκανα εγώ την εγκατάστασή του.
Σε αρχείο να το γράψω, σε mail όμως πως το στέλνω;
Θα ήθελα πολύ να μάθω
1) Αυτο ειναι ενα tutorial για το πως δουλευει ο cron σε ενα *nix συστημα.
2) Για ποιον λογο να βαλεις ενα φυλομετρητη σε αυτοματη εκτελεση?? Δεν βγαζει νοημα.
Ποιο ευκολο ειναι να φτιαξεις ενα script το οποιο γραφει σε αρχειο παρα αυτο.
Αν δεις οτι δεν τρεχει δες τα logs για να δεις τι δεν παει καλα
To mailx ειναι μια καλη λυση
1)O οποίος μου έμαθε κάτι που δεν ήξερα καν ότι υπάρχει στον υπολογιστή μου
Σε ευχαριστώ για αυτό
2) Be cause i can
Είμαι ο μέσος ανήσυχος χρήστης.
Τον υπολογιστή τον έχω για ιντερνετ ταινίες μουσική και πειραματα με το λίνουξ.
Η μόνη εφαρμογή που μπορεί να έχει το κρον σε εμένα είναι να το βάλω να κάνει αυτόματα backup δεν θα κάνω από την αρχή κάτι τέτοιο θα δοκιμάσω πρώτα με κάτι απλό.Ο midiri μου ήρθε στο μυαλό ε με αυτόν έπαιξα
"Αν δεις οτι δεν τρεχει δες τα logs για να δεις τι δεν παει καλα"
Αν βρω που είναι κρυμμένα. Γενικά τα logs που βρίσκονται;
Σε γενικες γραμμες ειναι στο /var/log .
Αν δεν βρισκεις εκει κατι τοτε η find ειναι η φιλη σου... :-)
πχ sudo find / -name "cron*" -type f -print
H mailx απαιτει το sendmail για να στειλει e-mail αλλιως μονο διαβαζει
Πώς μπορώ να ορίσω default editor για το crontab το nano;
δωσε απλά select-editor
Σε περίπτωση που τρέχεις για πρώτη φορά το crontab -e θα σε ρωτήσει ποιον εδιτορ θες.
λογικά πρέπει απλά να φτιάξεις την μεταβλητή EDITOR
οπότε δοκίμασε να πας στο αρχείο ~/.bashrc και να προσθέσεις την γραμμή
Στο ~ του root ή του απλού χρήστη;
τού χρήστη που σε ενδιαφέρει ή αν θέλεις σε όλους τους χρήστες τότε στο /etc/profile
Πολύ καλό το tutorial...thanks a lot