Η ένδειξη VPN γίνεται πράσινη, η διαδρομή επιστρέφει και το παράθυρο SSH που αφήσατε ανοιχτό δεν επιστρέφει ποτέ σε γραμμή εντολών. Η αποκατάσταση μιας διαδρομής δεν αποκαθιστά τη συνομιλία TCP που τη χρησιμοποιούσε, οπότε ό,τι πληκτρολογήθηκε σε εκείνο το παράθυρο έχει χαθεί. Αν η πραγματική ανησυχία είναι ένα buffer επεξεργαστή ή μια μεγάλη μετανάστευση, η λύση είναι να πάψετε να δένετε αυτή την εργασία με μία σύνδεση. Το tmux και ένας εκτελεστής εργασιών λύνουν διαφορετικά μισά αυτού του προβλήματος.

Ένα επανασυνδεδεμένο VPN δεν συνεχίζει το socket

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

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

Βάλτε την εργασία στον απομακρυσμένο διακομιστή

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

ssh [email protected]
tmux new-session -s office-work

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

tmux έναντι εκτελεστή εργασιών

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

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

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

Αποφασίστε με κριτήριο τι πρέπει να επιβιώσει

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

systemd-run --user --unit=migrate-customers --collect ./migrate.sh

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

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