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

Ο στόχος είναι σημείο συνάντησης, όχι διαχειριστής

network-online.target δεν έχει ιδέα τι είναι δίκτυο. Είναι ένα σημείο συντονισμού που συγκεντρώνει εκείνη την υπηρεσία που υποτίθεται ότι καθυστερεί την εκκίνηση μέχρι η σύνδεση να είναι χρησιμοποιήσιμη, και αναθέτει τον ορισμό σε όποιον διαχειριστή δικτύου κατέχει το μηχάνημα. Στους περισσότερους υπολογιστές και διακομιστές αυτό σημαίνει μια υπηρεσία αναμονής που παρέχεται από το NetworkManager ή από το systemd-networkd. Αν δεν ενεργοποιήσετε κανένα, ο στόχος δεν έχει τι να περιμένει, οπότε ολοκληρώνεται τη στιγμή που κάτι τον τραβά, που μπορεί να είναι πολύ πριν απαντήσει το DHCP. Η γραμμή σειράς στη μονάδα σας ήταν ειλικρινής και παρόλα αυτά άχρηστη.

Το πρώτο ερώτημα λοιπόν δεν είναι τι δηλώνει η μονάδα σας. Είναι αν κάτι σε αυτό το μηχάνημα κάνει πράγματι την αναμονή.

Διαβάστε την τελευταία εκκίνηση αντί για το αρχείο μονάδας

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

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

systemctl list-units --type=service --state=running | grep wait-online
journalctl -b -o short-monotonic -u openvpn-client@office

Προσθέστε την αναμονή, μετά τη νέα προσπάθεια

Χρησιμοποιήστε drop-in αντί να επεξεργάζεστε μια πακεταρισμένη μονάδα, ώστε μια ενημέρωση πακέτου να μην πετάξει σιωπηλά την αλλαγή. Δύο οδηγίες μετρούν: η μονάδα πρέπει να είναι σε σειρά μετά τον στόχο, και πρέπει να τραβά τον στόχο στην ίδια συναλλαγή. Η σειρά μόνη της δεν καλεί τον στόχο· η επιθυμία το κάνει.

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

[Service]
Restart=on-failure
RestartSec=15

Γιατί ένας σταθερός ύπνος είναι παγίδα

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

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

Όταν η σειρά είναι σωστή και τα ονόματα αποτυγχάνουν ακόμη

Μια ενεργή μονάδα με διαδρομή σήραγγας σημαίνει ότι η σειρά έκανε τη δουλειά της και το υπόλοιπο σφάλμα βρίσκεται ένα επίπεδο ψηλότερα. Η συνήθης μορφή είναι μια ρύθμιση επιλυτή που εφαρμόζει το up script της σήραγγας πριν η σύνδεση ή ο επιλυτής ήταν έτοιμος να την κρατήσει. Συγκρίνετε την κατάσταση του επιλυτή κατά την αποτυχία με την κατάσταση μετά από επανεκκίνηση της μονάδας της σήραγγας.

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

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