Προσπαθώ να αυτοματοποιήσω την ανανέωση του awstats για τον webserver μου και καταλαβαίνω ότι πρέπει να χρησιμοποιήσω το cron για να το ρυθμίσω. Έτσι, κάθε χρήστης έχει ένα αρχείο crontab;
Ακολουθούσα τις οδηγίες εδώ community/AWStats
Και λέει να πάω στο αρχείο στη διεύθυνση: /etc/crontab
Αυτό το αρχείο έχει ήδη κάποιες πληροφορίες σε αυτό. Είναι αυτό το κύριο αρχείο crontab
ή κάτι τέτοιο; Έχω δει κάποιες οδηγίες στο διαδίκτυο για να χρησιμοποιήσω το αρχείο που εμφανίζεται με την εντολή crontab -e
.
Ποιο είναι το κατάλληλο αρχείο που πρέπει να χρησιμοποιήσετε και ποιος είναι ο καλύτερος τρόπος για να το κάνετε αυτό;
Αν προγραμματίσω μια εργασία ως χρήστης μη root, θα εκτελεστεί από μόνη της στο χρονικό διάστημα που έχει καθοριστεί, χωρίς προβλήματα;
Θα χρειαστεί να κάνω επανεκκίνηση του διακομιστή μετά την αποθήκευση της εργασίας cron στο αρχείο crontab
για να αρχίσει να λειτουργεί;
Ποιο είναι το κατάλληλο αρχείο που πρέπει να χρησιμοποιηθεί και ποιος είναι ο καλύτερος τρόπος για να γίνει αυτό;
Το crontab -e
είναι ο καλύτερος τρόπος για να το κάνετε - αυτό θα σας επιτρέψει να επεξεργαστείτε εύκολα τις crontabs ανά χρήστη.
Αν προγραμματίσω μια εργασία ως χρήστης μη root, θα εκτελεστεί μόνη της στο χρονικό διάστημα που έχει καθοριστεί, χωρίς προβλήματα;
Ναι, και θα εκτελεστεί με τα προνόμια αυτού του λογαριασμού χρήστη.
Ως αρχή, είναι καλύτερο να εκτελείτε τις προγραμματισμένες εργασίες με τα χαμηλότερα προνόμια που μπορείτε να έχετε, οπότε αν αυτό που κάνετε δεν απαιτεί root, μην χρησιμοποιείτε root. Αν δεν χρειάζεται καν να έχετε πρόσβαση στα αρχεία και τους φακέλους του λογαριασμού σας, τότε μπορείτε να δημιουργήσετε έναν νέο χρήστη και να χρησιμοποιήσετε αυτόν τον λογαριασμό χρήστη μόνο για την εργασία αυτή. Από την άλλη πλευρά, αν η εργασία σας απαιτεί root, χρησιμοποιήστε το crontab του root (su
/ sudo su
στο root και μετά χρησιμοποιήστε το crontab -e
).
Θα πρέπει να κάνω επανεκκίνηση του διακομιστή μετά την αποθήκευση της εργασίας cron στο αρχείο crontab για να αρχίσει να λειτουργεί;
Όχι, θα αρχίσει να λειτουργεί αμέσως (καλά, την επόμενη δυνατή προγραμματισμένη ώρα).
Γιατί δεν επεξεργάζεστε απευθείας το αρχείο; Πού βρίσκεται;
Τα αρχεία crontab των χρηστών βρίσκονται στο /var/spool/cron/crontabs
, αλλά τα δικαιώματά τους είναι ρυθμισμένα με τέτοιο τρόπο ώστε να μην μπορεί να γίνει πρόσβαση σε αυτά χωρίς δικαιώματα superuser (αλλά μόλις ανοίξουν και η διαδικασία cron αποσύρει τα προνόμια μπορεί ακόμα να έχει πρόσβαση στο αρχείο).
Το σύστημα δεν είναι σχεδιασμένο ώστε οι τελικοί χρήστες να επεξεργάζονται άμεσα αυτά τα αρχεία, και μάλιστα στην κορυφή του αρχείου υπάρχει μια αυστηρή προειδοποίηση ΜΗΝ ΕΠΕΞΕΡΓΑΣΤΕ ΑΥΤΟ ΤΟ ΑΡΧΕΙΟ
για το σκοπό αυτό. Το αρχείο έχει σχεδιαστεί για επεξεργασία μέσω του crontab -e
, το οποίο δημιουργεί ένα προσωρινό καθρέφτη του αρχείου στο /tmp
για επεξεργασία - χωρίς την αυστηρή προειδοποίηση - και μετά ελέγχει και εγκαθιστά το μόνιμο αρχείο crontab. Όλα αυτά μπορούν να γίνουν χωρίς την άδεια του superuser.
Αν επεξεργαζόσασταν το αρχείο crontab απευθείας δεν ξέρω ποιο θα ήταν το αποτέλεσμα. Είναι πιθανό ότι απλά δεν θα έμπαινε σε ισχύ μέχρι την επόμενη επανεκκίνηση και τυχόν σφάλματα μπορεί να είναι δύσκολο να αποσφαλματωθούν.
Κάθε χρήστης έχει το δικό του "crontab".
Για να τη δείτε απλά πληκτρολογήστε
crontab -l
και, ναι, το είδατε σωστά, όταν θέλετε να προσθέσετε μια crontab
τότε απλά κάντε
crontab -e
για πρώτη φορά θα σας ρωτήσουν για τον επεξεργαστή που θα χρησιμοποιήσετε με το crontab
. Καθώς είσαι αρχάριος όπως λες, θα σου συνιστούσα να χρησιμοποιήσεις το nano, είναι ο πιο απλός editor για να τον χρησιμοποιήσεις.
Η ίδια η crontab λειτουργεί ως εξής
MIN = Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW = Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line
Έτσι π.χ. για να ενεργοποιήσετε μια εργασία κάθε 15 λεπτά μόνο τη Δευτέρα, το κάνετε ως εξής
*/15 * * * mon /home/me/yourscript.sh
και ΝΑΙ είναι πολύ σημαντικό να βάλετε το cronjob σας στο crontab του χρήστη που έχει αρκετά δικαιώματα για να το εκτελέσει.
Έτσι, αν το σενάριό σας πρέπει να είναι root ή κάποιος ειδικός χρήστης, βεβαιωθείτε ότι έχετε κάνει su σε αυτόν τον χρήστη και προσθέστε το cronjob εκεί.
Επίσης πολύ σημαντικό!
Το cronjob είναι χαζό! Ναι, το είπα. Βεβαιωθείτε πάντα ότι εισάγετε το πλήρες PATH της application/command/script
που χρησιμοποιείτε, επειδή το crontab δεν θα λειτουργήσει με .bashrc
ή κάτι παρόμοιο. Πρέπει πάντα να βεβαιώνεστε ότι λέτε στο cron πού μπορεί να βρει τα αρχεία και τους καταλόγους.
Για να απαντήσω στις υπόλοιπες ερωτήσεις σας:
Φυσικά και θα τρέξει από μόνο του, γι' αυτό υπάρχει. Αλλά πρέπει να ελέγξετε ότι το cronjob το κάνει πραγματικά, ή αν του'λείπει κάτι. Π.χ. συνδεθείτε σε ένα αρχείο καταγραφής για να δείτε αν πραγματικά λειτουργεί.
Και ΟΧΙ, δεν χρειάζεται επανεκκίνηση. Μια επανεκκίνηση με το linux χρειάζεται συνήθως μόνο αν εγκαταστήσετε νέο πυρήνα. Για να το χρησιμοποιήσετε θα πρέπει να κάνετε επανεκκίνηση. Σχεδόν όλα τα υπόλοιπα μπορούν να γίνουν χωρίς επανεκκίνηση στο Linux. Φυσικά υπάρχουν εξαιρέσεις, αλλά σε γενικές γραμμές αυτή η δήλωση είναι σωστή.