Όταν ο εκκινητής αρνείται να ξεκινήσει το OpenVPN επειδή υπάρχει ήδη αρχείο PID, η φυσική ανάγνωση είναι ότι κάπου τρέχει ένα τούνελ. Αυτή η ανάγνωση είναι αρκετά συχνά λανθασμένη ώστε να αξίζει έλεγχο πριν διαγραφεί οτιδήποτε. Ένα αρχείο σε κατάλογο εκτέλεσης είναι λογιστική, και η λογιστική επιβιώνει από καταρρεύσεις, επανεκκινήσεις και διακοπτόμενες τερματίσεις που δεν άφησαν καμία διεργασία. Δύο ερωτήματα κρίνουν την υπόθεση: υπάρχει ζωντανή διεργασία, και ανήκει αυτή η διεργασία σε αυτό το στιγμιότυπο.

Ξεκινήστε από την υπηρεσία, όχι από το αρχείο

Η άρνηση συνήθως προέρχεται από έναν εκκινητή και όχι από το ίδιο το OpenVPN. Διαβάζει μια διαδρομή, βρίσκει κάτι εκεί και σταματά πριν αναλύσει μια διαμόρφωση. Το πρώτο ερώτημα αφορά επομένως το συμβόλαιο του εκκινητή, όχι το τούνελ.

Διαβάστε τη μονάδα ή το σενάριο που εκτύπωσε το μήνυμα και σημειώστε τρία πράγματα: τη διαδρομή που ελέγχει, τον τύπο υπηρεσίας που δηλώνει και αν είναι υπεύθυνο για την εγγραφή του αρχείου. Μια σύγχρονη μονάδα μπορεί να χρησιμοποιεί απλή εποπτεία ή εποπτεία ειδοποίησης και να μην αγγίζει ποτέ αρχείο PID, ενώ ένα παλαιότερο σενάριο init μπορεί να δημιουργήσει μόνο του ένα. Η αντιγραφή ενός ελέγχου από το ένα μοντέλο στο άλλο παράγει ακριβώς αυτού του είδους την άρνηση. Βρείτε ποιο μοντέλο χρησιμοποιείται πριν ερμηνεύσετε οτιδήποτε.

Μόνο τότε το ερώτημα γίνεται αν ένα στιγμιότυπο τρέχει πραγματικά.

Ελέγξτε αν αυτό το αναγνωριστικό ανήκει στο στιγμιότυπό σας

Ένας αριθμός σε ένα αρχείο αποδεικνύει ότι γράφτηκε ένας αριθμός. Δεν αποδεικνύει ότι υπάρχει τώρα διεργασία με αυτό το αναγνωριστικό, και σίγουρα δεν αποδεικνύει ότι η διεργασία είναι δική σας, γιατί τα αναγνωριστικά επαναχρησιμοποιούνται μετά από επανεκκίνηση.

Συγκρίνετε την ώρα εκκίνησης της διεργασίας με τη χρονική σφραγίδα του αρχείου, το εκτελέσιμο με την εντολή της μονάδας και τη συμμετοχή στην υπηρεσία με το όνομα της μονάδας. Μια αναντιστοιχία σε οποιοδήποτε από τα τρία σημαίνει ότι βλέπετε λογιστική και όχι τούνελ.

Σε έναν κεντρικό υπολογιστή που τρέχει κοντέινερ ή πολλούς χώρους ονομάτων, ένα αναγνωριστικό μπορεί να έχει νόημα σε μια όψη και να απουσιάζει σε άλλη. Το να μην βλέπετε μια διεργασία δεν είναι επίσης απόδειξη ότι δεν υπάρχει, αν ο λογαριασμός σας δεν μπορεί να την επιθεωρήσει. Ελέγξτε από το περιβάλλον που χρησιμοποιεί ο εκκινητής πριν βγάλετε συμπεράσματα.

systemctl status [email protected]
ps -o pid,lstart,args -p "$(cat /run/openvpn/vpn.pid)"

Τι υποσχέθηκε ο εκκινητής να κάνει με το αρχείο

Το PIDFile= λέει στον διαχειριστή υπηρεσιών από πού να διαβάσει το αναγνωριστικό της κύριας διεργασίας. Ο διαχειριστής δεν γράφει αυτό το αρχείο, αλλά αφαιρεί ένα που επιβίωσε μετά τον τερματισμό, και γι' αυτό ακριβώς μια διακοπτόμενη έξοδος μπορεί να αφήσει αρχείο.

Αυτή η κατανομή ευθυνών εξηγεί δύο συμπτώματα που οι άνθρωποι αναφέρουν ως σφάλματα. Ένα αρχείο που δεν εμφανίζεται ποτέ σημαίνει ότι ο δαίμονας ή το σενάριό του απέτυχε να το γράψει, όχι ότι η εποπτεία είναι λανθασμένα ρυθμισμένη. Ένα αρχείο που επιβιώνει από μια διακοπή σημαίνει ότι η διαδρομή τερματισμού δεν ολοκληρώθηκε ποτέ.

Εξηγεί επίσης γιατί οι τρέχουσες οδηγίες προτείνουν να αποφεύγεται η σύμβαση όταν η εποπτεία μπορεί να παρακολουθεί την κύρια διεργασία άμεσα. Αυτές οι οδηγίες δεν είναι άδεια να αλλάξετε τον τύπο μιας συσκευασμένης μονάδας, γιατί η συμπεριφορά του δαίμονα στο προσκήνιο, στη διακλάδωση ή στην ειδοποίηση πρέπει να ταιριάζει με αυτό που δηλώνει η μονάδα. Αλλάξτε τον τύπο χωρίς να αλλάξετε τον δαίμονα και θα πάρετε μια μονάδα που αναφέρει αποτυχία ενώ το τούνελ τρέχει, ή το αντίστροφο. Ταιριάξτε το ζευγάρι ή αφήστε και τα δύο. Η αναφορά υπηρεσίας του systemd περιγράφει τον διαχωρισμό ιδιοκτησίας.

Καθαρός τερματισμός έναντι διακοπτόμενης εξόδου

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

Συγκρίνετε τη χρονική σφραγίδα του αρχείου με την τελευταία εκκίνηση και με την τελευταία διακοπή της μονάδας.

Έπειτα ελέγξτε τα ζωντανά στοιχεία άμεσα. Ένα socket δεσμευμένο στη θύρα VPN και μια διεπαφή τούνελ με διεύθυνση είναι απόδειξη ότι κάτι τρέχει, με τρόπο που ένα αρχείο κειμένου σε κατάλογο εκτέλεσης δεν είναι ποτέ. Αν λείπουν και τα δύο, δεν τρέχει τίποτα, ό,τι κι αν ισχυρίζεται το αρχείο.

Σταματήστε να διαγράφετε το αρχείο από συνήθεια

Η διαγραφή του είναι ένα νόμιμο βήμα ανάκτησης αφού διαπιστώσετε ότι κανένα στιγμιότυπο δεν το κατέχει και ότι ο εκκινητής τεκμηριώνει αυτή τη συμπεριφορά.

Ως μόνιμη συνήθεια πριν την εκκίνηση, ακυρώνει τον έλεγχο που προσπαθείτε να παρακάμψετε. Αν τα παρωχημένα αρχεία επιστρέφουν μετά από κάθε καθαρή διακοπή, ο συγγραφέας και ο κύκλος ζωής του τερματισμού διαφωνούν για το ποιος κατέχει τη διαδρομή, και αυτή η διαφωνία είναι το σφάλμα που αξίζει διόρθωση.

Κρατήστε έναν ανεξάρτητο τρόπο εισόδου στον κεντρικό υπολογιστή, ξεκινήστε ένα στιγμιότυπο μέσω του κανονικού διαχειριστή του και διαβάστε το πρώτο αποτέλεσμα. Ο επόμενος άνθρωπος παίρνει μια μονάδα που είτε λειτουργεί είτε εξηγείται.

Σχετικά άρθρα