Πως λειτουργεί το Crontab

slackware | Σάβ, 09/14/2013 - 10:19 | 8' | 13

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
Δώσε αστέρια!

MO: 4 (ψήφοι: 1)

Σχόλια

Αhoj slackware! 

Λίγες διευκρινήσεις

Στο παράδειγμα που είσαι στον φάκελλο Rocky δεν κατάλαβα τίποτα.Απλά μας δείχνεις ότι δεν υπάρχει ρυθμισμένο crontab?

και στο τέλος στέλνεις τα αποτελέσματα στο /dev/null για πρακτικούς λόγους; πχ να μην γεμίσει το τερματικο;

 

Ναι ακριβως οτι ειναι αδειο τοσο για τον χρηστη root οσο και για τον χρηστη komodino.

Οταν τρεχει κατι με το cron δεν θες να εμφανιζεται στην οθονη τα αποτελεσματα.

Αλλωστε για αυτο βαζεις μια διεργασια / ενα script στο cron γιατι ξερεις τα αποτελεσματα και δεν χρειαζεται να τα βλεπεις...

Αν σε ενδιαφερουν μπορεις να τα γραφεις σε αρχειο ή να τα στελνεις με email

Ρίξε λίγο φως στην υπόθεση.

Απλά για να το δοκιμάσω είπα στο cron να τρέχει κάθε μέρα στις 13:26 τον midori

 

Έδωσα λοιπόν

n30s@Laptopi ~ $ crontab -e
no crontab for n30s - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]: 2
crontab: installing new crontab
"/tmp/crontab.MrPiMR/crontab":25: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n) y
crontab: installing new crontab
"/tmp/crontab.MrPiMR/crontab":24: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n) n
crontab: edits left in /tmp/crontab.MrPiMR/crontab

Για το ιστορικό τα λάθη εδώ είναι επειδή δεν έγραφα σωστά στο αρχείο.

Εγραφα μόνο midory και περίμενα να τρέξει.  blush

Πάμε στο σωστό (ελπίζω)

n30s@Laptopi ~ $ crontab -e
no crontab for n30s - using an empty one
crontab: installing new crontab
n30s@Laptopi ~ $

 

 

και οι πρώτες γραμμές του αρχείου

# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

#run midori at 13:20
26 13 * * * midori > /dev/null

 

Η πρώτη δοκιμή  αντι midori > dev/null    ήταν    midori &

Dεν ετρεξε καμία φορά.

Στην αρχή του tutorial λες ότι δεν πρέπει ο χρήστης να είναι στο  cron.deny

το manual μιλάει και για το cron.allow  εγώ δεν έχω κανένα από αυτά.

 

n30s@Laptopi ~ $ ls /etc | grep cron
anacrontab
cron.d
cron.daily
cron.hourly
cron.monthly
crontab
cron.weekly
n30s@Laptopi ~ $ 

Να δημιουργήσω λες cron.deny ή cron.allow

 

 

 

Α και κάτι βασικό είμαι σε mint και το crontab το βρήκα στημένο δεν έκανα εγώ την εγκατάστασή του.

slackware]

 

Αν σε ενδιαφερουν μπορεις να τα γραφεις σε αρχειο ή να τα στελνεις με email

 

Σε αρχείο να το γράψω, σε mail όμως πως το στέλνω;

Θα ήθελα πολύ να μάθω   smiley

1) Αυτο ειναι ενα tutorial για το πως δουλευει ο cron σε ενα *nix συστημα.

2) Για ποιον λογο να βαλεις ενα φυλομετρητη σε αυτοματη εκτελεση?? Δεν βγαζει νοημα.

Ποιο ευκολο ειναι να φτιαξεις ενα script το οποιο γραφει σε αρχειο παρα αυτο.

Αν δεις οτι δεν τρεχει δες τα logs για να δεις τι δεν παει καλα

To mailx ειναι μια καλη λυση

1)O οποίος μου έμαθε κάτι που δεν ήξερα καν ότι υπάρχει στον υπολογιστή μου

Σε ευχαριστώ για αυτό  yes 

 

2) Be cause i can

Είμαι ο μέσος ανήσυχος χρήστης.

Τον υπολογιστή τον έχω για ιντερνετ ταινίες μουσική και πειραματα με το λίνουξ.

Η μόνη εφαρμογή που μπορεί να έχει το κρον σε εμένα είναι να το βάλω να κάνει αυτόματα  backup δεν θα κάνω από την αρχή κάτι τέτοιο θα δοκιμάσω πρώτα με κάτι απλό.Ο midiri μου ήρθε στο μυαλό ε με αυτόν έπαιξα

"Αν δεις οτι δεν τρεχει δες τα logs για να δεις τι δεν παει καλα"

 

Αν βρω που είναι κρυμμένα. Γενικά τα logs που βρίσκονται;

 

Σε γενικες γραμμες ειναι στο /var/log .

Αν δεν βρισκεις εκει κατι τοτε η find ειναι η φιλη σου... :-)

 

πχ sudo find / -name "cron*" -type f -print

 

H mailx απαιτει το sendmail για να στειλει e-mail αλλιως μονο διαβαζει

δωσε απλά select-editor

 

 

n30s@Laptopi ~ $ select-editor

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]: 2                    Εδώ πατας το νουμερο που αντιστοιχει στην επιλογή σου για nano πατας 2 και enter
n30s@Laptopi ~ $ 

 

Σε περίπτωση που τρέχεις για πρώτη φορά το crontab -e θα σε ρωτήσει ποιον εδιτορ θες.

 

Helix]

Πώς μπορώ να ορίσω default editor για το crontab το nano;

 

λογικά πρέπει απλά να φτιάξεις την μεταβλητή EDITOR

οπότε δοκίμασε να πας στο αρχείο ~/.bashrc και να προσθέσεις την γραμμή

export EDITOR=nano

 

τού χρήστη που σε ενδιαφέρει ή αν θέλεις σε όλους τους χρήστες τότε στο /etc/profile