Το RRAS ξεκινά πριν είναι έτοιμη η σήραγγα OpenVPN στην εκκίνηση
Μια εξάρτηση καθορίζει τη σειρά εκκίνησης της υπηρεσίας· δεν κάνει τη σήραγγα χρησιμοποιήσιμη. Ονομάστε τον πόρο που χρειάζεται το RRAS και εξαρτήστε την επανεκκίνηση από αυτόν αντί από μια αναμονή.
Ο διακομιστής επανεκκινείται, το OpenVPN ξεκινά και το RRAS ανεβαίνει ενώ ο προσαρμογέας ή η διαδρομή από την οποία εξαρτάται λείπουν ακόμη. Η χειροκίνητη επανεκκίνηση του RRAS ένα λεπτό αργότερα το διορθώνει, κάνοντάς το πρόβλημα να φαίνεται λυμένο και κρύβοντας το πραγματικό. Εδώ συγχέονται δύο διαφορετικές συνθήκες: η προαπαιτούμενη υπηρεσία εκτελείται, και ο δικτυακός πόρος που χρειάζεται πραγματικά το RRAS έχει γίνει χρησιμοποιήσιμος. Μια εξάρτηση υπηρεσίας Windows μπορεί να εκφράσει την πρώτη συνθήκη και ποτέ τη δεύτερη, οπότε η προσθήκη μιας χωρίς ορισμό του πόρου σας δίνει μια πιο τακτοποιημένη εκκίνηση και την ίδια αποτυχία.
Πώς φαίνεται το σύμπτωμα σε ψυχρή εκκίνηση
Το σημάδι είναι η διαφορά μεταξύ ψυχρής εκκίνησης και επανεκκίνησης. Σε ψυχρή εκκίνηση το RRAS αναφέρει ότι εκτελείται ενώ ο προσαρμογέας σήραγγας απουσιάζει, η διαδρομή λείπει ή η διεύθυνση του ομοτίμου δεν επιλύεται ακόμη. Μια χειροκίνητη επανεκκίνηση πετυχαίνει τότε, επειδή εκείνη τη στιγμή ο πόρος υπάρχει και η υπηρεσία απλώς ξαναδιαβάζει έναν κόσμο που δεν μπορούσε να δει ένα λεπτό νωρίτερα. Το αρχείο καταγραφής της υπηρεσίας θα δείξει καθαρή εκκίνηση και στις δύο περιπτώσεις, γι’ αυτό η προβολή συμβάντων από μόνη της σπάνια το εξηγεί.
Καταγράψτε και τις δύο καταστάσεις πριν αλλάξετε οτιδήποτε: τι αναφέρει το RRAS κατά την εκκίνηση και τι υπάρχει τη στιγμή που πετυχαίνει η χειροκίνητη επανεκκίνηση. Αν αυτές οι δύο παρατηρήσεις είναι πανομοιότυπες, η σειρά εκκίνησης δεν είναι η εξήγησή σας και μια εξάρτηση δεν θα βοηθήσει. Η σύγκριση κοστίζει δέκα λεπτά και γλιτώνει μια εβδομάδα εικασιών.
Μια εξάρτηση που προστίθεται με βάση το «λειτουργεί μετά από επανεκκίνηση» απλώς καθυστερεί την ίδια αποτυχία όσο χρόνο χρειάζεται η προαπαιτούμενη υπηρεσία για να αναφέρει RUNNING. Κάνει επίσης την εκκίνηση δυσκολότερη στην κατανόηση, γιατί ο περιορισμός σειράς τώρα μοιάζει με εξήγηση. Ρωτήστε ποιο αντικείμενο εγγυάται η εξάρτηση και αν αυτό το αντικείμενο είναι εκείνο που δεν μπορούσε να δει το RRAS.
Ονομάστε τον πόρο, όχι μόνο την υπηρεσία
Γράψτε το συγκεκριμένο πράγμα που λείπει. Μπορεί να είναι προσαρμογέας σήραγγας με διεύθυνση, διαδρομή προς υποδίκτυο ομοτίμου, απάντηση DNS ή πιστοποιητικό που ακόμη παρέχεται. Το «η υπηρεσία VPN εκτελείται» δεν είναι περιγραφή πόρου, ούτε ένα πράσινο εικονίδιο σε έναν πελάτη. Μέχρι να μπορείτε να ονομάσετε το αντικείμενο και μια εντολή που το δείχνει, δεν έχετε ορίσει τη συνθήκη που προσπαθείτε να περιμένετε.
Καθορίστε επίσης πώς εκκινείται αυτό το στιγμιότυπο OpenVPN. Μια σήραγγα που διαχειρίζεται από GUI και μια σήραγγα που διαχειρίζεται από υπηρεσία έχουν διαφορετικούς κύκλους ζωής εκκίνησης, και το όνομα της υπηρεσίας πρέπει να προέρχεται από το μηχάνημα μπροστά σας, όχι από παράδειγμα γραμμένο για άλλο πρόγραμμα εγκατάστασης. Απαριθμήστε τους υποψηφίους αντί να εμπιστεύεστε ένα όνομα από μνήμης.
Get-Service | Where-Object Name -match 'vpn|openvpn' | Select-Object Name, Status, StartType
Διαβάστε την αλυσίδα εξαρτήσεων πριν προσθέσετε σε αυτήν
Ο Διαχειριστής Ελέγχου Υπηρεσιών αναφέρει καταστάσεις όπως START_PENDING και RUNNING, και η SERVICE_STATUS reference ορίζει ακριβώς τι σημαίνει κάθε πεδίο. Καμία από αυτές τις καταστάσεις δεν υπόσχεται ότι ένας ομότιμος, ένα όνομα DNS ή μια εφαρμογή παρακάτω είναι προσβάσιμα. Αυτό το κενό είναι ο λόγος που αυτή η αποτυχία επιβιώνει από μια σωστά ρυθμισμένη εξάρτηση.
Get-Service -Name RemoteAccess | Select-Object Status, StartType sc.exe qc RemoteAccess Get-Service -Name RemoteAccess | Select-Object -ExpandProperty DependentServices
Η γραμμή DEPENDENCIES από το sc.exe qc είναι η λίστα που πρέπει να διατηρήσετε, γιατί το sc.exe config RemoteAccess depend= αντικαθιστά ολόκληρη τη λίστα αντί να προσθέτει σε αυτήν. Η παράλειψη μιας άσχετης προϋπόθεσης κατά την προσθήκη μιας υπηρεσίας VPN δημιουργεί δεύτερη βλάβη που εμφανίζεται σε άλλη εκκίνηση και είναι πολύ δυσκολότερο να διαγνωστεί από την αρχική. Αντιγράψτε την υπάρχουσα λίστα στο αρχείο αλλαγών σας πριν την αγγίξετε.
Οι εξαρτήσεις αλλάζουν και τη συμπεριφορά τερματισμού, γιατί η διακοπή μιας προϋπόθεσης σταματά τις υπηρεσίες που εξαρτώνται από αυτήν. Ελέγξτε τι συμβαίνει κατά τη συντήρηση πριν συνδέσετε το RRAS με κάτι που επανεκκινείται συχνά.
Εξαρτήστε την επανεκκίνηση από μια συνθήκη, όχι από χρονόμετρο
Μια σταθερή αναμονή υποθέτει ότι η σήραγγα θα είναι πάντα έτοιμη μέσα σε αυτό το παράθυρο, και αυτή ακριβώς είναι η υπόθεση που αποτυγχάνει στην εκκίνηση όπου ένα πιστοποιητικό είναι αργό ή μια ζεύξη είναι κάτω. Ελέγξτε τον ίδιο τον πόρο, με προθεσμία, και αφήστε τον έλεγχο να αποφασίσει αν χρειάζεται καθόλου επανεκκίνηση.
Get-NetAdapter | Where-Object Status -eq 'Up' Get-NetRoute -DestinationPrefix 0.0.0.0/0 Get-WinEvent -LogName System -MaxEvents 40 | Where-Object ProviderName -eq 'Service Control Manager'
Μια προγραμματισμένη εργασία κατά την εκκίνηση που εκτελεί αυτούς τους ελέγχους και επανεκκινεί το RRAS μόνο όταν ο προσαρμογέας ή η διαδρομή λείπουν ακόμη είναι περιορισμένη, ελεγχόμενη και εύκολη στην αφαίρεση. Η εναλλακτική, η επανεκκίνηση του RRAS σε κάθε επανασύνδεση, διακόπτει υγιείς συνεδρίες και μετατρέπει μια ασταθή ζεύξη σε βρόχο επανεκκινήσεων. Αυτός ο βρόχος είναι χειρότερος από την αρχική βλάβη, γιατί τώρα επηρεάζει χρήστες που ήταν εντάξει.
Δώστε στον έλεγχο μέγιστη αναμονή που ταιριάζει με τον χρόνο που χρειάζεται εύλογα η σήραγγα στο υλικό σας, και κάντε την εργασία να τερματίζει με μη μηδενική κατάσταση όταν τα παρατά. Μια σιωπηλή εργασία που απλώς σταματά να προσπαθεί δεν ξεχωρίζει από μια που πέτυχε.
Καταγράψτε τη μετάβαση ώστε η επόμενη εκκίνηση να εξηγείται μόνη της
Καταγράψτε τρεις χρονικές σημάνσεις στην ίδια γραμμή: πότε η υπηρεσία εξάρτησης έφτασε σε RUNNING, πότε εμφανίστηκε ο απαιτούμενος πόρος και πότε τον αποδέχτηκε τελικά το RRAS. Αυτή η μία γραμμή απαντά στην ερώτηση που θα κάνει ο επόμενος μηχανικός, και η παραγωγή της δεν κοστίζει σχεδόν τίποτα. Χωρίς αυτήν, η επόμενη έρευνα ξεκινά από τις ίδιες εικασίες με αυτήν.
Σταματήστε τον αυτοματισμό μετά από καθορισμένο αριθμό προσπαθειών και αναφέρετε αποτυχία αντί να επαναλαμβάνετε για πάντα. Μια εκκίνηση που τελειώνει με σαφές μήνυμα «ο πόρος δεν εμφανίστηκε ποτέ» αξίζει περισσότερο από μια που συνεχίζει να επανεκκινεί μια υπηρεσία στο σκοτάδι. Όταν εμφανιστεί αυτό το μήνυμα, το όνομα του πόρου που γράψατε στη δεύτερη ενότητα είναι αυτό που θα αναζητήσει ο επόμενος.