Περιστροφή αρχείου καταγραφής φύλακα VPN χωρίς να σπάσει ο εγγραφέας
Αποφασίστε πρώτα τον προορισμό και μετά προσαρμόστε την περιστροφή στον τρόπο με τον οποίο ο εγγραφέας ανοίγει το αρχείο: μετονομασία για σύντομους ελέγχους, επανάνοιγμα ή copytruncate για έναν δαίμονα.
Ένας έλεγχος υγείας VPN που προσθέτει μία γραμμή το λεπτό δημιουργεί σιωπηλά ένα δεύτερο καθήκον: να αποφασιστεί πώς αυτές οι γραμμές φεύγουν από τον δίσκο. Η επισκευή της σήραγγας δεν κάνει τίποτα γι’ αυτό το καθήκον, και η μετονομασία του αρχείου δεν ανακατευθύνει μια διεργασία που κρατά ακόμη τον παλιό περιγραφέα. Απαντήστε πρώτα στο ερώτημα του προορισμού και μετά κάντε την περιστροφή να ταιριάζει με τον τρόπο που ο εγγραφέας το ανοίγει.
Επιλέξτε τον προορισμό πριν από την πολιτική περιστροφής
Μια μονάδα systemd που στέλνει ήδη την έξοδό της στο ημερολόγιο κρατά τη διατήρηση σε ένα σημείο. Το journald επιβάλλει όρια όπως SystemMaxUse και MaxRetentionSec , οπότε ένας φύλακας που καταγράφει εκεί κληρονομεί ένα όριο χωρίς πρόσθετη εργασία. Η προσθήκη ενός δεύτερου αρχείου χωρίς όριο δίπλα του διπλασιάζει τη συντήρηση χωρίς κέρδος.
Ένα αφιερωμένο αρχείο κερδίζει τη θέση του όταν κάτι άλλο το διαβάζει: ένας αναλυτής, μια εξαγωγή ελέγχου ή μια σελίδα που περιμένει σταθερή διαδρομή. Μόλις ληφθεί αυτή η απόφαση, το αρχείο χρειάζεται ιδιοκτήτη, λειτουργία και πολιτική περιστροφής γραμμένα μαζί, γιατί τα τρία είναι σωστά μόνο ως σύνολο. Μια διαδρομή που μπορεί να δημιουργήσει οποιοσδήποτε είναι και διαδρομή που μπορεί να αντικαταστήσει οποιοσδήποτε, γι’ αυτό τα δικαιώματα του καταλόγου ανήκουν στην ίδια σημείωση. Γράψτε τα όλα δίπλα στον έλεγχο και η επόμενη επεξεργασία θα ξεκινήσει από τα ίδια γεγονότα.
Γράψτε το τμήμα ώστε να ταιριάζει στον εγγραφέα
Ξεκινήστε από έναν εγγραφέα που ανοίγει τη διαδρομή σε κάθε κλήση, προσθέτει μια γραμμή και εξέρχεται. Αυτό το μοτίβο επιβιώνει από την περιστροφή χωρίς καμία συνεργασία της διεργασίας, γιατί η επόμενη εκτέλεση ανοίγει όποιο αρχείο βρίσκεται τώρα σε αυτή τη διαδρομή. Το παρακάτω τμήμα κρατά μια εβδομάδα εκδόσεων και ξαναδημιουργεί το αρχείο με τον ιδιοκτήτη και τη λειτουργία που χρειάζεται ο εγγραφέας:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
Το εγχειρίδιο του logrotate ορίζει τον αριθμό ως τον αριθμό των διατηρούμενων περιστραμμένων εκδόσεων, όχι ως εγγυημένες επτά ημέρες ιστορικού, και η λέξη-κλειδί daily αξιολογείται όταν εκτελείται η εργασία αντί να λειτουργεί ως δικός της χρονοπρογραμματιστής. Στις περισσότερες διανομές ένα χρονόμετρο systemd ή μια καταχώριση cron κατέχει ήδη αυτή την κλήση, οπότε ελέγξτε ποια υπάρχει πριν προσθέσετε δεύτερη. Η αντιστοίχιση της ιδιοκτησίας μετράει περισσότερο από τον αριθμό διατήρησης. Η αντιγραφή μιας λειτουργίας μόνο για root σε ένα αρχείο που γράφει ένας λογαριασμός υπηρεσίας σταματά την καταγραφή στην επόμενη περιστροφή, και η αποτυχία εμφανίζεται ώρες αργότερα ως παρωχημένη χρονική σφραγίδα αντί ως σφάλμα. Επιβεβαιώστε τον χρήστη του εγγραφέα πριν αντιγράψετε ένα τμήμα από αλλού.
Ένας εγγραφέας που δεν ξανανοίγει ποτέ χρειάζεται άλλη διόρθωση
Μια μακροχρόνια διεργασία που κρατά ανοιχτό περιγραφέα συνεχίζει να γράφει στον μετονομασμένο inode. Ο χώρος δεν ελευθερώνεται και το ορατό αρχείο σταματά να μεγαλώνει, κάτι που μοιάζει με σπασμένη περιστροφή μέχρι να ελέγξετε το inode. Είτε μάθετε στη διεργασία να ξανανοίγει, είτε κάντε την περιστροφή να αντιγράφει και να κόβει αντί να μετονομάζει.
Η διαδρομή επανανοίγματος είναι η καθαρότερη όπου το λογισμικό την υποστηρίζει: στείλτε το τεκμηριωμένο σήμα ή εκτελέστε την τεκμηριωμένη εντολή και αφήστε τη διεργασία να ανοίξει μόνη της το νέο αρχείο. Η εναλλακτική είναι το copytruncate , που αντιγράφει τα περιεχόμενα στο περιστραμμένο όνομα και μετά κόβει το πρωτότυπο στη θέση του, ώστε ο περιγραφέας να παραμένει έγκυρος αλλά οι εγγραφές που πέφτουν μεταξύ αντιγραφής και κοψίματος χάνονται.
Για μονάδες που ξεκινά το systemd, στρέψτε το StandardOutput στο ημερολόγιο ή σε ένα αρχείο και αφήστε τη μονάδα να κατέχει τον κύκλο ζωής. Ένας βρόχος shell που προσθέτει μέσω tee -a χωρίς όριο μεγέθους είναι η διάταξη που γεμίζει ένα διαμέρισμα κατά τη διάρκεια μιας διακοπής, γιατί ένας έλεγχος που αποτυγχάνει συχνά καταγράφει πολύ περισσότερα από έναν υγιή.
Δοκιμάστε την περιστροφή χωρίς να περιμένετε το χρονόμετρο
Η λειτουργία αποσφαλμάτωσης αναφέρει τι θα συνέβαινε και δεν αγγίζει τίποτα, κάτι που την κάνει την ασφαλή πρώτη εκτέλεση μετά από μια επεξεργασία. Επιβάλετε μια πραγματική περιστροφή όταν είστε ικανοποιημένοι και μετά επιβεβαιώστε ότι η επόμενη γραμμή καταγραφής προσγειώνεται στο νέο αρχείο και όχι στο μετονομασμένο:
logrotate -d /etc/logrotate.d/vpn-watchdog logrotate -f /etc/logrotate.d/vpn-watchdog ls -l /var/log/vpn-watchdog.log* tail -n 3 /var/log/vpn-watchdog.log df -h /var/log
Διαβάστε την έξοδο με αυτή τη σειρά. Το πέρασμα αποσφαλμάτωσης πρέπει να ονομάζει το αρχείο και τις ενέργειες που σκοπεύει· μια αναγκαστική εκτέλεση πρέπει να παράγει το αναμενόμενο περιστραμμένο όνομα· το tail πρέπει να δείχνει μια νέα καταχώριση αφού ξανατρέξει ο εγγραφέας. Μια αυξανόμενη τιμή df με ένα ορατό αρχείο που συρρικνώνεται σημαίνει το πρόβλημα περιγραφέα που περιγράφηκε παραπάνω.
Επαναλάβετε την αναγκαστική εκτέλεση δύο φορές για να δείτε πώς συμπεριφέρεται η διατήρηση όταν υπάρχουν ήδη εκδόσεις. Η διαγραφή του παλαιότερου αρχείου είναι το αναμενόμενο αποτέλεσμα, και μια διαγραφή που λείπει συνήθως σημαίνει ότι ο αριθμός ή ο χαρακτήρας μπαλαντέρ στο περιστραμμένο όνομα δεν ταιριάζει με αυτό που δημιούργησε το logrotate.
Κρατήστε μια επαναφορά και ένα γραπτό αρχείο
Αποθηκεύστε το προηγούμενο τμήμα πριν την επεξεργασία και σημειώστε ποιος χρονοπρογραμματιστής το εκτελεί, γιατί μια επαναφορά που αποκαθιστά το αρχείο αλλά όχι το χρονόμετρο αναπαράγει το μισό του αρχικού προβλήματος. Περιστρέψτε μία φορά με το χέρι μετά την αποκατάσταση και μετά επιβεβαιώστε ότι ο λογαριασμός του εγγραφέα μπορεί να γράψει στη διαδρομή καταγραφής. Αν η υπηρεσία εκτελείται υπό systemd, φορτώστε ξανά τη μονάδα μετά από οποιαδήποτε αλλαγή στην ανακατεύθυνση της εξόδου της, αφού η διεργασία που τρέχει συνεχίζει να γράφει στον παλιό στόχο. Διαβάστε μόνοι σας τις επόμενες γραμμές καταγραφής αντί να εμπιστευτείτε ότι η μονάδα επέστρεψε καθαρά.
Καταγράψτε τη λειτουργία, τον ιδιοκτήτη, τον αριθμό διατήρησης και τον αναμενόμενο προϋπολογισμό δίσκου δίπλα στον ίδιο τον έλεγχο. Όταν αργότερα ο έλεγχος αλλάξει από σενάριο μιας χρήσης σε δαίμονα, η πολιτική περιστροφής πρέπει να αλλάξει μαζί του, και αυτή η σημείωση λέει στο επόμενο άτομο ποια υπόθεση έσπασε.
Τέλος, κρατήστε την απόφαση καταγραφής χωριστά από την απόφαση ανάκτησης. Ένας αποτυχημένος έλεγχος πρέπει να ακολουθεί την πολιτική ανάκτησης της ίδιας της σύνδεσης, όχι έναν κανόνα κρυμμένο μέσα στο logrotate, και καμία διάταξη καταγραφής δεν πρέπει να είναι ο λόγος να επανεκκινηθεί μια σήραγγα που λειτουργεί.