Εισαγωγή
Στην πληροφορική, τα πράγματα δεν πάνε πάντα όπως έχουν προγραμματιστεί. Συχνά, απροσδόκητες καταρρεύσεις του συστήματος ωθούν τους διαχειριστές συστημάτων να ξεκινήσουν επανεκκινήσεις και επανεκκίνηση μεμονωμένων υπηρεσιών. Ο εντοπισμός και η επανεκκίνηση κάθε υπηρεσίας που χρειάζεται η εφαρμογή σας για να εκτελεστεί μετά από μια κατάρρευση ή επανεκκίνηση του συστήματος μπορεί να είναι κουραστική διαδικασία. Σε αυτό το πρώτο μέρος του οδηγού δύο μερών, θα σας δείξουμε πώς να ρυθμίσετε τις υπηρεσίες ώστε να ξεκινούν αυτόματα μετά από μια κατάρρευση συστήματος ή επανεκκίνηση του διακομιστή με πρακτικά παραδείγματα. Το δεύτερο μέρος θα καλύψει θεωρητικές πληροφορίες σχετικά με το τι επιτύχαμε στο πρώτο μέρος.
Θα χρησιμοποιήσουμε την υπηρεσία MySQL βάσης δεδομένων για πρακτικά παραδείγματα. Ωστόσο, οι ίδιες αρχές ισχύουν και για άλλες διεργασίες που συνθέτουν έναν πλήρη διακομιστή, όπως οι Nginx, Apache, Redis, ή άλλες εφαρμογές. Μπορείτε να δείτε τους οδηγούς μας σχετικά με το πώς να εγκαταστήσετε τη MySQL, Nginx, και Apache.
Στις Linux διανομές, υπάρχουν τρία κύρια συστήματα αρχικοποίησης (init), ανάλογα με τη διανομή που εκτελείτε. Ορισμένες διανομές ενδέχεται να συνοδεύονται από δύο ή περισσότερα συστήματα init, όπως περιγράφεται παρακάτω:
- System V – ένα παλαιότερο σύστημα init που συναντάται σε παλαιότερες διανομές όπως:
- Ubuntu 9.04 και παλαιότερες
- CentOS 5 και παλαιότερες
- Debian 6 και παλαιότερες
- Upstart – χρησιμοποιείται σε παλαιότερες διανομές όπως:
- CentOS 6
- Ubuntu 9.10 έως Ubuntu 14.10 και Ubuntu 14.04
- Systemd – χρησιμοποιείται στις πιο πρόσφατες διανομές όπως:
- CentOS 7
- Debian 7 και 8.
- Ubuntu 15.04 και νεότερες
Υπόβαθρο
Είναι σύνηθες για τα λειτουργικά συστήματα, και ειδικά για τα συστήματα Linux και Unix να έχουν διεργασίες και υπηρεσίες που εκτελούνται στο παρασκήνιο. Τέτοιες υπηρεσίες ενδέχεται να έχουν αποσταλεί με το λογισμικό του λειτουργικού συστήματος. Ορισμένες ενδέχεται να συνοδεύουν τις εφαρμογές χρήστη που εγκαθιστάτε.
Οι υπηρεσίες του Λειτουργικού Συστήματος περιλαμβάνουν:
- sshd – Είναι ο δαίμονας (daemon) που επιτρέπει απομακρυσμένες συνδέσεις.
- cupsd – Είναι ο δαίμονας (daemon) που ελέγχει την εκτύπωση.
Οι υπηρεσίες εγκατεστημένων εφαρμογών περιλαμβάνουν:
- httpd/apache2 – Μια υπηρεσία που συνοδεύει τον διακομιστή ιστού Apache2.
- nginx – Μια υπηρεσία που συνοδεύει τον διακομιστή ιστού Nginx.
Για να διασφαλιστεί ότι οι διαδικτυακές εφαρμογές, οι βάσεις δεδομένων, οι διακομιστές αλληλογραφίας κ.λπ. είναι προσβάσιμα, τέτοιες υπηρεσίες πρέπει να εκτελούνται συνεχώς. Εάν είστε διαχειριστής συστήματος ή ένας περίεργος προγραμματιστής εφαρμογών, θέλετε να διασφαλίσετε ότι αυτές οι υπηρεσίες εκτελούνται συνεχώς και, στην ατυχή περίπτωση κατάρρευσης του συστήματος, ξεκινούν αυτόματα μετά την επανεκκίνηση του συστήματος. Και αυτό ακριβώς θα μάθουμε σε αυτόν τον πρακτικό οδηγό.
Αν και ο ορισμός ειδοποιήσεων και η συνεχής παρακολούθηση της διανομής Linux σας είναι κρίσιμης σημασίας, ορισμένες υπηρεσίες Linux μπορούν να αυτοθεραπευτούν εάν έχουν ρυθμιστεί σωστά, χάρη στα συστήματα init που διαχειρίζονται τις υπηρεσίες.
Στις διανομές Linux, υπάρχουν καταστάσεις λειτουργίας που υλοποιούν την αρχικοποίηση του συστήματος και ονομάζονται runlevels. Για να ξεκινήσει αυτόματα μια υπηρεσία, πρέπει να προστεθεί σε ένα runlevel. Κάθε σύστημα τύπου Linux και Unix έχει τέσσερα κοινά runlevels, όπως αναφέρονται παρακάτω:
- 0 – Το Runlevel 0 υποδεικνύει τον τερματισμό λειτουργίας του συστήματος.
- 1 – Το Runlevel 1 υποδεικνύει λειτουργία ενός χρήστη, διάσωσης (rescue mode).
- 2, 3, 4 – Αυτά τα runlevels υποδεικνύουν καταστάσεις όπου το σύστημα έχει εκκινήσει σε λειτουργία πολλών χρηστών, με δυνατότητα δικτύου, σε περιβάλλον κειμένου.
- 5 – Το Runlevel 5 υποδεικνύει λειτουργία πολλών χρηστών με δυνατότητα δικτύου, σε γραφικό περιβάλλον.
- 6 – Το Runlevel 6 υποδεικνύει επανεκκίνηση του συστήματος.
Σε αυτόν τον οδηγό, θα μάθετε πώς να ρυθμίζετε μια υπηρεσία Linux ώστε να ξεκινά αυτόματα κατά την επανεκκίνηση του συστήματος, χρησιμοποιώντας τις τρεις διαφορετικές λειτουργίες init που εξηγήθηκαν νωρίτερα: System V, Upstart, και Systemd.
Προαπαιτούμενα
Αυτός ο πρακτικός οδηγός προϋποθέτει ότι έχετε ένα Linux VPS που μπορείτε να χρησιμοποιήσετε για να τον παρακολουθήσετε. Μπορείτε να επωφεληθείτε από τη δωρεάν δοκιμαστική περίοδο στο Cloudsigma και να ενεργοποιήσετε μερικούς διακομιστές για να δοκιμάσετε τις εντολές. Μπορείτε να ακολουθήσετε τον βήμα προς βήμα οδηγό μας για το πώς να ρυθμίσετε τους διακομιστές Ubuntu σας.
Οι διακομιστές που δημιουργείτε σε αυτόν τον οδηγό προορίζονται αποκλειστικά για την παρακολούθηση των πρακτικών ασκήσεων και δεν πρέπει να δοκιμάζετε τις εντολές σε έναν διακομιστή παραγωγής, καθώς πολλές υπηρεσίες θα διακοπούν.
Μερικές από τις διανομές που θα χρειαστείτε:
- Ubuntu 9.04 και παλαιότερες, ή Debian 6 x64 (θα χρησιμοποιηθούν για την επίδειξη του συστήματος init System V)
- Ubuntu 14.04 x64 (θα χρησιμοποιηθεί για την επίδειξη του Upstart)
- CentOS 7 x64 (θα χρησιμοποιηθεί για την επίδειξη του systemd).
Βεβαιωθείτε ότι έχετε ρυθμίσει έναν μη-root χρήστη με δικαιώματα sudo. Μπορείτε να ρίξετε μια ματιά στον οδηγό μας για τη διαμόρφωση του αρχείου sudoers εδώ.
Χρήση του System V
Αυτό είναι το παλαιότερο σύστημα init που χρησιμοποιούνταν σε παλαιότερες διανομές Linux όπως:
- Debian 6 και παλαιότερες
- CentOS 5 και παλαιότερες
- Ubuntu 9.04 και παλαιότερες
Οι περισσότερες εγκαταστάσιμες εφαρμογές διακομιστή, όπως η MySQL και το Nginx, συνοδεύονται από σενάρια init αποθηκευμένα στον κατάλογο /etc/init.d από προεπιλογή. Αυτά τα σενάρια τους επιτρέπουν να ξεκινούν μετά από μια επανεκκίνηση. Ωστόσο, ενδέχεται να μην έχουν ρυθμιστεί ώστε να ξεκινούν αυτόματα μετά από μια κατάρρευση του συστήματος.
Λίστα ελέγχου αυτόματης εκκίνησης για το System V
Το πρώτο βήμα είναι να ελέγξετε τη διαθεσιμότητα ενός λειτουργικού σεναρίου Bash init στον κατάλογο /etc/init.d/service. Για να ενεργοποιήσετε την υπηρεσία, σε διανομές Debian ή Ubuntu, χρησιμοποιήστε την εντολή update-rc.d, σε ένα σύστημα CentOS, χρησιμοποιήστε το chkconfig. Αντικαταστήστε με το πραγματικό όνομα της υπηρεσίας σας:
|
1 |
sudo update-rc.d service enable |
Η παραπάνω εντολή δημιουργεί έναν συμβολικό σύνδεσμο (symlink) στον κατάλογο /etc/rc2.d που μοιάζει με το παρακάτω αποτέλεσμα. Μην τον δημιουργήσετε μόνοι σας, καθώς δημιουργείται αυτόματα:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
Στο κάτω μέρος του αρχείου /etc/inittab προσθέστε μια γραμμή respawn όπως φαίνεται στο παρακάτω γενικό παράδειγμα. Θυμηθείτε να την αντικαταστήσετε με την πραγματική διαδρομή προς το σενάριο εκκίνησης της εφαρμογής σας:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
Εισαγάγετε τις ακόλουθες εντολές για να σταματήσετε και να ξεκινήσετε την υπηρεσία:
|
1 2 |
sudo service service-name stop sudo service service-name start |
Στη συνέχεια, επανεκκινήστε τον διακομιστή:
|
1 |
sudo reboot |
Πώς να δοκιμάσετε τις αλλαγές;
Μετά την επανεκκίνηση του διακομιστή, επαληθεύστε ότι η υπηρεσία εκτελείται αναζητώντας τον αριθμό διεργασίας χρησιμοποιώντας την εντολή:
|
1 |
ps -ef | grep service-name |
Τερματίστε τη διεργασία χρησιμοποιώντας την εντολή:
|
1 |
sudo kill -9 process_number |
Μετά από πέντε λεπτά, επαληθεύστε ότι η υπηρεσία είναι σε λειτουργία.
Πρακτική διαμόρφωση του System V με μια πραγματική υπηρεσία
Στα επόμενα βήματα, θα δοκιμάσουμε μια πραγματική εφαρμογή διακομιστή όπως η MySQL. Θα πρέπει να έχετε πρόσβαση σε μια εικονική μηχανή Debian 6. Με έναν λογαριασμό που έχει δικαιώματα sudo, συνδεθείτε σε αυτήν χρησιμοποιώντας SSH ή putty εάν βρίσκεστε σε επιφάνεια εργασίας Windows.
Βήμα 1: Εγκατάσταση της MySQL
Εισαγάγετε την ακόλουθη εντολή για να εγκαταστήσετε τη MySQL:
|
1 |
sudo apt-get install mysql-server -y |
Όταν ξεκινήσει η εγκατάσταση, θα σας ζητηθεί ένας κωδικός πρόσβασης root. Στη συνέχεια, εισαγάγετε έναν κωδικό πρόσβασης της επιλογής σας και επιβεβαιώστε τον. Περιμένετε να ολοκληρωθεί η εγκατάσταση και, στη συνέχεια, εισαγάγετε την ακόλουθη εντολή για να ξεκινήσετε την ασφάλιση της MySQL:
|
1 |
mysql_secure_installation |
Θα σας ζητηθεί ο κωδικός πρόσβασης root που εισαγάγατε νωρίτερα. Πατήστε N για να τον διατηρήσετε. Στη συνέχεια, πατήστε Y για να αποδεχτείτε τις επόμενες προτροπές για την κατάργηση ανώνυμων χρηστών, την απενεργοποίηση της απομακρυσμένης σύνδεσης root και την κατάργηση της δοκιμαστικής βάσης δεδομένων. Τέλος, αποδεχτείτε την επαναφόρτωση του πίνακα δικαιμάτων ώστε οι αλλαγές να εφαρμοστούν αυτόματα.
Αυτό ολοκληρώνει την εγκατάσταση της MySQL. Μπορείτε να ελέγξετε αν η υπηρεσία εκτελείται εισάγοντας την ακόλουθη εντολή:
|
1 |
service mysql status |
Βήμα 2: Διαμόρφωση της MySQL για αυτόματη εκκίνηση μετά από επανεκκίνηση
Η MySQL είναι από προεπιλογή ρυθμισμένη να ξεκινά μετά από επανεκκίνηση του συστήματος. Μπορείτε να βρείτε τον συμβολικό σύνδεσμο προς το σενάριο προετοιμασίας της MySQL στον κατάλογο /etc/rc2.d. Αυτοί οι συμβολικοί σύνδεσμοι δεν δημιουργούνται χειροκίνητα. Μπορείτε να χρησιμοποιήσετε την εντολή update-rc.d για να ενεργοποιήσετε και να απενεργοποιήσετε υπηρεσίες.
Εισαγάγετε την ακόλουθη εντολή για να εμφανίσετε τα περιεχόμενα του καταλόγου:
|
1 |
ls -l /etc/rc2.d |
Ελέγξτε αν μπορείτε να εντοπίσετε τον συμβολικό σύνδεσμο προς το σενάριο init της MySQL:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
Το S είναι σημαντικό, διότι εφόσον μπορείτε να δείτε ένα S σενάριο στον προεπιλεγμένο κατάλογο runlevel για την υπηρεσία, το σύστημα init θα ξεκινήσει την υπηρεσία όταν εκκινήσει ο διακομιστής. Για να επαληθεύσετε ότι η MySQL θα ξεκινήσει αυτόματα μετά την επανεκκίνηση, εισαγάγετε την ακόλουθη εντολή για να επανεκκινήσετε το σύστημα:
|
1 |
sudo reboot |
Η σύνδεσή σας ssh τερματίζεται κατά την επανεκκίνηση. Περιμένετε ένα ή δύο λεπτά και συνδεθείτε ξανά. Εκτελέστε την ακόλουθη εντολή για να ελέγξετε αν η υπηρεσία εκτελείται:
|
1 |
service mysql status |
Το αποτέλεσμα θα υποδείξει ότι η υπηρεσία εκτελείται. Αυτό σημαίνει ότι ξεκίνησε αυτόματα μετά την επανεκκίνηση. Για υπηρεσίες που δεν έχουν ρυθμιστεί να ξεκινούν αυτόματα, θα πρέπει να τις ρυθμίσετε μόνοι σας.
Μπορούμε να απενεργοποιήσουμε την υπηρεσία MySQL και να επανεκκινήσουμε το σύστημα για να δοκιμάσουμε αν ξεκινά αυτόματα. Σε συστήματα Debian και Ubuntu, μπορείτε να χρησιμοποιήσετε την εντολή update-rc.d για να προσθέσετε ή να αφαιρέσετε υπηρεσίες από το σύστημα init. Εισαγάγετε την ακόλουθη εντολή για να απενεργοποιήσετε την υπηρεσία MySQL:
|
1 |
sudo update-rc.d mysql disable |
Επανεκκινήστε το σύστημα και συνδεθείτε ξανά χρησιμοποιώντας ssh. Προσπαθήστε να συνδεθείτε στη MySQL χρησιμοποιώντας την ακόλουθη εντολή:
|
1 |
mysql -u root -p |
Θα λάβετε το σφάλμα MySQL όπως:
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
Στη συνέχεια, εισαγάγετε την ακόλουθη εντολή για να ενεργοποιήσετε ξανά την υπηρεσία:
|
1 |
sudo update-rc.d mysql enable |
Εάν βρίσκεστε σε διανομή CentOS, η εντολή θα είναι:
|
1 |
sudo chkconfig mysql enable |
Δεδομένου ότι η MySQL δεν ξεκινούσε αρχικά, πρέπει να την εκκινήσετε. Εισαγάγετε την ακόλουθη εντολή:
|
1 |
sudo service mysql start |
Βήμα 3: Ρύθμιση μιας υπηρεσίας (MySQL) για αυτόματη εκκίνηση μετά από κατάρρευση του συστήματος
Το System V δεν θα ξεκινήσει αυτόματα μια διεργασία μετά από κατάρρευση. Μπορούμε να προσομοιώσουμε μια κατάρρευση συστήματος βρίσκοντας το αναγνωριστικό διεργασίας της MySQL και τερματίζοντάς το. Εισαγάγετε την ακόλουθη εντολή για να βρείτε το αναγνωριστικό διεργασίας της MySQL:
|
1 |
ps -ef | grep mysql |
Από το αποτέλεσμα, βρείτε τις διεργασίες της MySQL. Οι κύριες διεργασίες που εκτελούν τη MySQL είναι οι mysqld_safe και mysqld. Σημειώστε τα αναγνωριστικά διεργασίας τους (αυτά είναι αριθμοί) και χρησιμοποιήστε τις ακόλουθες εντολές για να τις τερματίσετε:
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
Ελέγξτε την κατάσταση της υπηρεσίας MySQL χρησιμοποιώντας την εντολή:
|
1 |
sudo service mysql status |
Το αποτέλεσμα θα υποδείξει ότι η MySQL έχει σταματήσει. Μπορούμε να την επανεκκινήσουμε χειροκίνητα χρησιμοποιώντας την εντολή service start. Ωστόσο, θέλουμε μια αυτόματη διαδικασία. Για να επιτύχουμε αυτήν την αυτόματη συμπεριφορά, πρέπει να επεξεργαστούμε το αρχείο /etc/inittab. Αυτό είναι το πρώτο αρχείο που διαβάζει το System V init κατά την εκκίνηση. Το αρχείο /etc/inittab περιέχει οδηγίες για το πώς πρέπει να συμπεριφέρεται μια διεργασία εάν καταρρεύσει. Εάν ρυθμιστεί σωστά, επανεκκινεί ξανά το σύστημα όταν υπάρχει κατάρρευση. Για τη δική μας περίπτωση, θέλουμε να διασφαλίσουμε ότι η MySQL είναι μία από αυτές τις υπηρεσίες.
Το αρχείο /etc/inittab είναι εξαιρετικά κρίσιμο για μια διανομή Linux. Καθορίζει εάν το σύστημά σας θα επανεκκινήσει ή όχι. Εάν κάνετε κάποιο λάθος στις εντολές, το σύστημα ενδέχεται να μην ξεκινήσει κατά την επανεκκίνηση. Όπως είχαμε επισημάνει, ελπίζουμε να δοκιμάζετε αυτές τις εντολές μόνο σε περιβάλλον δοκιμαστικού διακομιστή και όχι σε περιβάλλον παραγωγής.
Αρχικά, δημιουργήστε ένα αντίγραφο του αρχείου πριν ξεκινήσετε την επεξεργασία:
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
Στη συνέχεια, ανοίξτε το αρχείο χρησιμοποιώντας το nano:
|
1 |
sudo nano /etc/inittab |
Μεταβείτε στο τέλος του αρχείου και προσθέστε το ακόλουθο απόσπασμα κώδικα:
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
Η παραπάνω εντολή επανεκκινεί τη διεργασία mysql_safe μετά από μια κατάρρευση του συστήματος. Έχει τέσσερα πεδία που διαχωρίζονται με άνω και κάτω τελείες, όπως εξηγείται παρακάτω:
- ms: Καθορίζει ένα αναγνωριστικό (id) για τη διεργασία.
- 2345: Καθορίζει τα runlevels στα οποία εφαρμόζεται η εντολή. Σε αυτήν την περίπτωση: runlevels 2, 3, 4, 5.
- respawn: Καθορίζει την ενέργεια. Σε αυτήν την περίπτωση, κάνουμε respawn ή επανεκκίνηση της διεργασίας.
- /bin/sh /usr/bin/mysqld_safe: Το τελευταίο μέρος ορίζει τη διεργασία – την εντολή που εκτελείται για την επανεκκίνηση της διεργασίας.
Τώρα πατήστε Ctrl + O και Enter για να αποθηκεύσετε το αρχείο. Στη συνέχεια, πατήστε Ctrl + X για να κλείσετε τον επεξεργαστή. Εισαγάγετε την ακόλουθη εντολή για να εκκινήσετε την υπηρεσία:
|
1 |
sudo service mysql start |
Κάντε επανεκκίνηση του διακομιστή και, στη συνέχεια, εκτελέστε τις εντολές που εξηγήθηκαν νωρίτερα για να βρείτε τον αριθμό της διεργασίας. Στη συνέχεια, τερματίστε τις διεργασίες, ξεκινώντας με την εντολή ps -ef | grep mysql. Περιμένετε μερικά λεπτά και εισαγάγετε την ακόλουθη εντολή για να ελέγξετε την κατάσταση της MySQL:
|
1 |
sudo service mysql status |
Το αποτέλεσμα θα πρέπει να υποδεικνύει ότι η υπηρεσία MySQL είναι σε λειτουργία, πράγμα που σημαίνει ότι μπόρεσε να επανεκκινηθεί μετά από μια κατάρρευση. Μπορείτε να ακολουθήσετε την ίδια διαδικασία και για άλλες υπηρεσίες στον διακομιστή σας.
Αυτόματη εκκίνηση υπηρεσιών με το Upstart
Upstart είναι ένα άλλο σύστημα init που εισήχθη αρχικά στο Ubuntu 6 και αργότερα έγινε το προεπιλεγμένο στο Ubuntu 9.10. Το RHEL 6 και τα παράγωγά του, καθώς και το Chrome OS της Google χρησιμοποιούν επίσης το σύστημα init Upstart. Για τα βήματα σε αυτήν την ενότητα, θα πρέπει να έχετε έναν διακομιστή που εκτελεί οποιαδήποτε από τις ακόλουθες διανομές:
- Ubuntu 9.10 έως Ubuntu 14.10, και την έκδοση LTS του Ubuntu, δηλαδή το Ubuntu 14.04.
- CentOS 6
Ας δούμε πώς μπορείτε να διαμορφώσετε τα αρχεία του Upstart για την αυτόματη εκκίνηση των υπηρεσιών του διακομιστή σας σε περίπτωση επανεκκινήσεων ή καταρρεύσεων του συστήματος. Το Upstart χρησιμοποιεί αρχεία ρυθμίσεων που είναι αποθηκευμένα στον κατάλογο /etc/init για τον έλεγχο των υπηρεσιών σε μια διανομή Linux. Οι πιο πρόσφατες εκδόσεις εφαρμογών διακομιστή, όπως η MySQL και το Nginx, εγκαθιστούν τα δικά τους σενάρια init στον κατάλογο /etc/init. Έτσι, θα ξεκινούν μετά από επανεκκίνηση και μετά από κατάρρευση του συστήματος χωρίς να χρειάζεται να κάνετε τίποτα.
Λίστα ελέγχου αυτόματης εκκίνησης για το Upstart
Ακολουθούν ορισμένες ρυθμίσεις αναφοράς που πρέπει να ελέγξετε για να βεβαιωθείτε ότι η υπηρεσία σας έχει ρυθμιστεί να ξεκινά αυτόματα.
- Βεβαιωθείτε ότι η υπηρεσία διαθέτει ένα σενάριο init στον κατάλογο /etc/init/service_name.conf – service_name που είναι το πραγματικό όνομα της συγκεκριμένης υπηρεσίας σας. Θα πρέπει να ελέγξετε για τις ακόλουθες δύο γραμμές στο αρχείο /etc/init/service_name.conf αρχείο:
- Μια γραμμή που περιέχει κάτι σαν start on runlevel [2345]. Υποδεικνύει ότι η υπηρεσία θα ξεκινήσει κατά την επανεκκίνηση του συστήματος.
- Μια γραμμή που περιέχει κάτι σαν respawn. Υποδεικνύει ότι η υπηρεσία θα επανεκκινηθεί μετά από μια κατάρρευση του συστήματος.
- Βεβαιωθείτε ότι δεν υπάρχει αρχείο παράκαμψης υπηρεσίας στον κατάλογο: /etc/init/service_name.override. Εκτός αν το δημιουργήσατε εσείς ή άλλος διαχειριστής συστήματος νωρίτερα.
- Εισαγάγετε τις ακόλουθες εντολές για να σταματήσετε και να εκκινήσετε την υπηρεσία:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- Κάντε επανεκκίνηση του συστήματος και συνδεθείτε ξανά μετά από λίγα λεπτά. Τώρα, εκτελέστε μερικές δοκιμές για να δείτε αν όλα λειτουργούν
- Μετά την επανεκκίνηση, επαληθεύστε ότι η υπηρεσία είναι σε λειτουργία. Εισαγάγετε την ακόλουθη εντολή για να αναζητήσετε τον αριθμό της διεργασίας, αντικαθιστώντας το service_name με το πραγματικό όνομα της υπηρεσίας που δοκιμάζετε:
|
1 |
ps -ef | grep service_name |
- Μόλις έχετε τον αριθμό της διεργασίας, εισαγάγετε την ακόλουθη εντολή για να τερματίσετε τη διεργασία:
|
1 |
sudo kill -9 process_number |
- Περιμένετε μερικά δευτερόλεπτα και επαληθεύστε ξανά ότι η διεργασία είναι σε λειτουργία.
Πρακτική διαμόρφωση του Upstart με μια πραγματική υπηρεσία
Στην επόμενη ενότητα, θα προσπαθήσουμε να δείξουμε πώς μπορείτε να χρησιμοποιήσετε το Upstart με μια πραγματική υπηρεσία. Θα εκτελέσουμε τις δοκιμές σε έναν διακομιστή εικονικής μηχανής Ubuntu 14.04 με την υπηρεσία MySQL. Συνδεθείτε στον δοκιμαστικό διακομιστή Ubuntu 14.04 χρησιμοποιώντας ssh ή putty εάν είστε σε Windows. Ως συνήθως, θα πρέπει να χρησιμοποιείτε έναν χρήστη μη-root με δικαιώματα sudo. Μόλις συνδεθείτε, μπορούμε να ξεκινήσουμε τα βήματα:
Βήμα 1: Εγκατάσταση της MySQL
Να θυμάστε πάντα να ενημερώνετε τα πακέτα σας πριν εγκαταστήσετε οποιοδήποτε νέο λογισμικό:
|
1 |
sudo apt-get update |
Τώρα, εισαγάγετε την ακόλουθη εντολή για να εγκαταστήσετε τον διακομιστή MySQL:
|
1 |
sudo apt-get install mysql-server –y |
Δημιουργήστε έναν κωδικό πρόσβασης root όταν σας ζητηθεί. Περιμένετε να ολοκληρωθεί η εγκατάσταση και εκτελέστε την ακόλουθη εντολή για να ξεκινήσετε την ασφάλιση της εγκατάστασης MySQL:
|
1 |
mysql_secure_installation |
Ακολουθήστε τις προτροπές, όπως κάνατε στην προηγούμενη ενότητα. Στη συνέχεια, κάντε flush privileges για να εφαρμοστούν αμέσως οι αλλαγές.
Βήμα 2: Ρύθμιση μιας υπηρεσίας (MySQL) για αυτόματη εκκίνηση μετά από επανεκκίνηση του συστήματος
Η MySQL έχει ρυθμιστεί να ξεκινά αυτόματα μετά από επανεκκίνηση. Εξετάζουμε τα αρχεία ρυθμίσεών της μόνο για να μάθουμε πώς μπορούμε να ρυθμίσουμε τις δικές μας προσαρμοσμένες εφαρμογές ώστε να ξεκινούν επίσης αυτόματα μετά από επανεκκίνηση. Η υπηρεσία MySQL ξεκίνησε αυτόματα μετά την εγκατάσταση. Ωστόσο, ας επιβεβαιώσουμε ότι εκτελείται εισάγοντας την ακόλουθη εντολή:
|
1 |
sudo initctl status mysql |
Θα πρέπει να δείτε ένα αποτέλεσμα που να υποδεικνύει ότι η υπηρεσία MySQL εκτελείται, κάπως έτσι:
|
1 |
mysql start/running, process 2553 |
Κάντε επανεκκίνηση του διακομιστή σας και συνδεθείτε ξανά. Εισαγάγετε ξανά την ακόλουθη εντολή για να ελέγξετε αν εκτελείται:
|
1 |
sudo initctl status mysql |
Το αποτέλεσμα θα υποδεικνύει ότι η MySQL εκτελείται, πράγμα που σημαίνει ότι ξεκίνησε αυτόματα μετά την επανεκκίνηση. Σε αυτήν την περίπτωση, δεν χρειάζεται να αλλάξει τίποτα. Ωστόσο, αυτή η συμπεριφορά ενδέχεται να μην είναι η ίδια για άλλες εφαρμογές. Ίσως αναρωτιέστε πώς το σύστημα init Upstart γνωρίζει ότι πρέπει να εκκινεί αυτόματα τη MySQL μετά την επανεκκίνηση. Η MySQL εγκαθιστά το αρχείο ρυθμίσεων εκκίνησης Upstart στην τοποθεσία /etc/init/mysql.conf. Τα αρχεία Upstart δεν είναι σενάρια κελύφους, αλλά αρχεία κειμένου με μπλοκ σεναρίων για συμβάντα pre-start και post-start. Τα μπλοκ καθοδηγούν το σύστημα Upstart σχετικά με το τι πρέπει να εκτελέσει όταν ξεκινά η διεργασία MySQLd ή όταν έχει ήδη ξεκινήσει.
Εισαγάγετε την ακόλουθη εντολή για να ανοίξετε το αρχείο στον επεξεργαστή με το nano:
|
1 |
sudo nano /etc/init/mysql.conf |
Το περιεχόμενο του αρχείου μπορεί να μοιάζει με αυτό:
|
1 2 3 4 5 6 7 8 |
description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 |
Όπως φαίνεται, το μπλοκ start καθοδηγεί τη MySQL να ξεκινά στα runlevels 2,3,4,5 και όχι στα 0,1,6. Εάν ορίζετε μια ρύθμιση Upstart για την εφαρμογή σας, θα την ορίσετε σε αυτήν την ενότητα. Το μπλοκ respawn καθοδηγεί το Upstart σχετικά με το τι πρέπει να κάνει μετά από μια κατάρρευση. Θα το συζητήσουμε αυτό στην επόμενη ενότητα, οπότε κρατήστε το αρχείο ανοιχτό στον επεξεργαστή nano.
Βήμα 3: Ρύθμιση μιας υπηρεσίας (MySQL) για αυτόματη εκκίνηση μετά από κατάρρευση
Η οδηγία respawn στο αρχείο /etc/init/mysql.conf καθοδηγεί το Upstart να επανεκκινήσει την υπηρεσία MySQL μετά από μια κατάρρευση.
Η οδηγία respawn limit καθοδηγεί το Upstart σχετικά με το πόσες φορές πρέπει να προσπαθήσει να επανεκκινήσει την κατεστραμμένη υπηρεσία MySQL σε ένα διάστημα που καθορίζεται σε δευτερόλεπτα. Το πρώτο όρισμα, (2) υποδεικνύει τον αριθμό των προσπαθειών. Το δεύτερο όρισμα, (5) υποδεικνύει το διάστημα σε δευτερόλεπτα. Εάν μετά από μια κατάρρευση, το Upstart αποτύχει να επανεκκινήσει την υπηρεσία MySQL εντός του ορίου, αυτή θα παραμείνει σταματημένη. Αυτή η συμπεριφορά έχει σχεδιαστεί για να προστατεύει το σύστημα από το να επηρεαστεί η σταθερότητά του σε περίπτωση που συνεχίζει να προσπαθεί να επανεκκινήσει υπηρεσίες που καταρρέουν συνεχώς. Μπορείτε τώρα να κλείσετε τον επεξεργαστή χωρίς να κάνετε αλλαγές.
Ας δοκιμάσουμε αν η MySQL θα επανέλθει αυτόματα μετά από μια κατάρρευση. Εισαγάγετε την ακόλουθη εντολή για να ελέγξετε την κατάσταση και να λάβετε τον αριθμό διεργασίας της υπηρεσίας MySQL:
|
1 |
sudo initctl status mysql |
Το αποτέλεσμα θα πρέπει να είναι κάπως έτσι. Σημειώστε τον αριθμό της διεργασίας καθώς θα τον χρησιμοποιήσουμε αργότερα:
|
1 |
mysql start/running, process 738 |
Στη συνέχεια, εισαγάγετε την ακόλουθη εντολή για να τερματίσετε τη διεργασία. Αυτό προσομοιώνει μια κατάρρευση. Αντικαταστήστε με τον αριθμό διεργασίας που λάβατε στην προηγούμενη εντολή:
|
1 |
sudo kill -9 7738 |
Ελέγξτε ξανά την κατάσταση της MySQL εισάγοντας την ακόλουθη εντολή:
|
1 |
sudo initctl status mysql |
Θα πρέπει να εκτελείται ξανά, αλλά πιθανώς με διαφορετικό αριθμό διεργασίας:
|
1 |
mysql start/running, process 1428 |
Αυτό συμβαίνει λόγω της οδηγίας respawn στο /etc/init/mysql.conf αρχείο. Διασφαλίζει ότι σε περίπτωση οποιασδήποτε κατάρρευσης του συστήματος, η MySQL θα ξεκινήσει αυτόματα. Επομένως, η εφαρμογή σας που εξαρτάται από μια βάση δεδομένων MySQL θα συνεχίσει να λειτουργεί όπως αναμένεται.
Αυτόματη εκκίνηση υπηρεσιών με το Systemd
Systemd είναι ένα σύστημα αρχικοποίησης που συναντάται στις περισσότερες πρόσφατες διανομές Linux. Είναι πιθανότατα αυτό που θα χρησιμοποιήσετε όταν δημιουργήσετε έναν νέο VPS. Παρουσιάστηκε για πρώτη φορά στο Fedora. Συνοδεύει το RHEL 7 και τα παράγωγά του όπως το CentOS 7. Από το Ubuntu 15.04, θα βρείτε το Systemd εγγενώς. Το Systemd είναι συμβατό προς τα πίσω με τα σενάρια αρχικοποίησης και τις εντολές του System V. Επομένως, οποιαδήποτε υπηρεσία System V θα πρέπει να λειτουργεί υπό το Systemd. Οι περισσότερες εντολές που χρησιμοποιούνται στα System V και Upstart έχουν τροποποιηθεί για να λειτουργούν με το Systemd.
Με το Systemd, οι περισσότερες εφαρμογές διακομιστή όπως η MySQL και το Nginx θα ξεκινούν αυτόματα μετά από επανεκκίνηση ή τερματισμό λειτουργίας, χωρίς να χρειάζεται να αλλάξετε τίποτα. Για τις προσαρμοσμένες εφαρμογές σας, πρέπει να δημιουργήσετε τα δικά σας σενάρια init για την αυτόματη επανεκκίνηση των υπηρεσιών.
Για πιο λεπτομερείς πληροφορίες σχετικά με το Systemd, δείτε τον οδηγό μας για τη διαχείριση υπηρεσιών και μονάδων Systemd με το Systemctl.
Λίστα ελέγχου αυτόματης εκκίνησης για το Systemd
Ακολουθούν ορισμένες ρυθμίσεις αναφοράς για να ελέγξετε αν η υπηρεσία σας έχει ρυθμιστεί να ξεκινά αυτόματα με το Systemd.
- Η υπηρεσία πρέπει να διαθέτει ένα λειτουργικό σενάριο init του Systemd που βρίσκεται στο /etc/systemd/system/multi-user.target.wants/serviceName.service. Το ServiceName είναι το πραγματικό όνομα της υπηρεσίας που ρυθμίζετε.
- Η εντολή για την ενεργοποίηση της υπηρεσίας είναι:
|
1 |
sudo systemctl enable serviceName.service |
- Η εντολή δημιουργεί έναν συμβολικό σύνδεσμο (symlink) στον κατάλογο /etc/systemd/system/multi-user.target.wants/ που μπορεί να μοιάζει με:
|
1 |
lrwxrwxrwx 1 root root 11 Dec 1 04:43 /etc/systemd/system/multi-user.target.wants/serviceName.service -> /usr/lib/systemd/system/serviceName.service |
- Με αυτόν τον συμβολικό σύνδεσμο στη θέση του, θα έχετε ενεργοποιήσει την αυτόματη επανεκκίνηση μετά την εκκίνηση του συστήματος.
- Για να ενεργοποιήσετε τις αλλαγές, επαναφορτώστε τον δαίμονα του συστήματος και στη συνέχεια επανεκκινήστε την υπηρεσία χρησιμοποιώντας τις ακόλουθες εντολές:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- Για να δοκιμάσετε εάν οι ρυθμίσεις σας θα εκκινήσουν την υπηρεσία μετά από μια επανεκκίνηση, μπορείτε να κάνετε επανεκκίνηση του συστήματος:
|
1 |
sudo reboot |
- Όταν το σύστημα επανεκκινηθεί, αναζητήστε τον αριθμό της διεργασίας χρησιμοποιώντας την εντολή:
|
1 |
ps -ef | grep serviceName |
- Σημειώστε τον αριθμό της διεργασίας και τερματίστε την χρησιμοποιώντας την εντολή:
|
1 |
sudo kill -9 process_number |
- Περιμένετε μερικά δευτερόλεπτα και αναζητήστε ξανά την υπηρεσία για να επαληθεύσετε ότι έχει επανέλθει σε λειτουργία.
Πρακτική ρύθμιση του Systemd με μια πραγματική υπηρεσία
Σε αυτήν την ενότητα, θα προσπαθήσουμε να ρυθμίσουμε την υπηρεσία MySQL σε μια εικονική μηχανή Ubuntu 20.04.
Βήμα 1: Συνδεθείτε στον Virtual Private Server σας (Ubuntu 20.04 ή CentOS 7 x64)
Συνδεθείτε στο VPS σας ή δημιουργήστε ένα από τον πίνακα ελέγχου της Cloudsigma και συνδεθείτε χρησιμοποιώντας ssh ή putty εάν είστε σε Windows. Χρησιμοποιούμε διακομιστή Ubuntu 20.04 για αυτό το τμήμα του οδηγού. Οι ίδιες εντολές μπορούν να εφαρμοστούν και στο CentOS 7. Βεβαιωθείτε ότι χρησιμοποιείτε έναν μη-root χρήστη με δικαιώματα sudo.
Βήμα 2: Εγκαταστήστε τη MySQL (την υπηρεσία που ρυθμίζουμε)
Αρχικά, ενημερώστε το σύστημά σας:
|
1 |
sudo apt update |
Στη συνέχεια, μπορείτε να εγκαταστήσετε τον διακομιστή MySQL χρησιμοποιώντας την εντολή:
|
1 |
sudo apt install mysql-server –y |
Στη συνέχεια, εκτελέστε την ακόλουθη εντολή για να ξεκινήσετε την ασφάλιση της MySQL:
|
1 |
sudo mysql_secure_installation |
Το σενάριο σάς ρωτά εάν θέλετε να ρυθμίσετε το στοιχείο VALIDATE PASSWORD ή να πατήσετε οποιοδήποτε γράμμα για να προχωρήσετε χωρίς να ενεργοποιήσετε το στοιχείο. Ακολουθήστε αυτόν τον σύνδεσμο για να μάθετε περισσότερα σχετικά με το στοιχείο επικύρωσης κωδικού πρόσβασης της MySQL.
Πατήστε 1 για να το ενεργοποιήσετε και στη συνέχεια επιλέξτε μεσαίο επίπεδο πατώντας 1. Εισαγάγετε έναν ισχυρό κωδικό πρόσβασης: έναν συνδυασμό κεφαλαίων, πεζών, ειδικών χαρακτήρων και ψηφίων. Επιβεβαιώστε τον κωδικό πρόσβασης και επιβεβαιώστε το μήνυμα που σας ρωτά αν θέλετε να χρησιμοποιήσετε τον κωδικό πρόσβασης που εισαγάγατε ως κωδικό πρόσβασης root. Για τα υπόλοιπα μηνύματα, πατήστε y για να τα αποδεχτείτε όπως κάνατε στις προηγούμενες ενότητες. Τέλος, κάντε flush τα δικαιώματα για τη MySQL ώστε να επαναφορτωθούν οι αλλαγές.
Βήμα 3: Ρύθμιση της MySQL για αυτόματη εκκίνηση μετά από επανεκκίνηση
Η MySQL είναι ρυθμισμένη να ξεκινά μετά από επανεκκίνηση, επομένως δεν χρειάζεται να κάνετε κάποια αλλαγή. Ωστόσο, μπορούμε να χρησιμοποιήσουμε τα αρχεία ρυθμίσεων της MySQL για να μάθουμε πώς να ρυθμίζουμε τα δικά μας προσαρμοσμένα αρχεία.
Αρχικά, ελέγξτε αν η υπηρεσία MySQL έχει ρυθμιστεί να ξεκινά κατά την εκκίνηση του συστήματος. Εισαγάγετε την ακόλουθη εντολή (σημειώστε ότι στο CentOS η υπηρεσία MySQL ονομάζεται mysqld):
|
1 |
sudo systemctl is-enabled mysql.service |
Ορίστε το αποτέλεσμα:

Στη συνέχεια, επανεκκινήστε το VPS εισάγοντας την ακόλουθη εντολή:
|
1 |
sudo reboot |
Συνδεθείτε ξανά χρησιμοποιώντας ssh και εισαγάγετε την ακόλουθη εντολή για να ελέγξετε την κατάσταση της υπηρεσίας MySQL:
|
1 |
sudo systemctl status mysql.service |
Θα πρέπει να λάβετε ένα αποτέλεσμα παρόμοιο με αυτό στο παρακάτω στιγμιότυπο οθόνης:

Για να απενεργοποιήσετε την υπηρεσία MySQL, εισαγάγετε την ακόλουθη εντολή:
|
1 |
sudo systemctl disable mysql.service |
Το αποτέλεσμα υποδεικνύει ότι οι συμβολικοί σύνδεσμοι (symlinks) προς την υπηρεσία MySQL έχουν αφαιρεθεί από το Systemd:

Μπορείτε να ελέγξετε αν η υπηρεσία είναι ενεργοποιημένη με το σύστημα init Systemd εισάγοντας την ακόλουθη εντολή:
|
1 |
sudo systemctl is-enabled mysql.service |
Το αποτέλεσμα θα δείξει ότι είναι απενεργοποιημένη. Εάν επανεκκινήσετε το σύστημά σας, η MySQL δεν θα ξεκινήσει κατά την εκκίνηση:
![]()
Ενεργοποιήστε την υπηρεσία εισάγοντας την ακόλουθη εντολή:
|
1 |
sudo systemctl enable mysql.service |
Το αποτέλεσμα δείχνει τον συμβολικό σύνδεσμο προς την υπηρεσία MySQL που δημιουργήθηκε στο Systemd init:

Όταν κάνετε επανεκκίνηση, η υπηρεσία MySQL θα ξεκινήσει αυτόματα.
Βήμα 4: Ρύθμιση της MySQL για αυτόματη εκκίνηση μετά από κατάρρευση
Η MySQL είναι ρυθμισμένη να επανεκκινείται αυτόματα μετά από μια κατάρρευση. Ας δούμε πώς υλοποιείται αυτή η ρύθμιση στο Systemd. Το Systemd χρησιμοποιεί αρχεία unit για τη ρύθμιση παραμέτρων. Εισαγάγετε την ακόλουθη εντολή για να ανοίξετε το αρχείο ρυθμίσεων mysql.service στο nano:
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
Το αποτέλεσμα μοιάζει με αυτό:

Αυτό που μας ενδιαφέρει είναι η οδηγία Restart. Όπως έχει οριστεί, η MySQL θα επανεκκινηθεί εάν υπάρξει αποτυχία. Η οδηγία Restart ορίζει τι πρέπει να συμβεί στο Systemd, ακριβώς όπως η οδηγία Respawn στο Upstart.
Δεν θα έχουν όλες οι υπηρεσίες αυτήν την οδηγία. Για να ενεργοποιήσετε την επανεκκίνηση μιας υπηρεσίας μετά από κατάρρευση, μπορείτε πάντα να προσθέσετε την οδηγία Restart κάτω από το μπλοκ [Service] του αρχείου unit ρυθμίσεων της υπηρεσίας. Εάν η κεφαλίδα [Service] δεν υπάρχει, τότε προσθέστε την. Τώρα, βγείτε από τον επεξεργαστή πατώντας Ctrl + X.
Για να προσομοιώσετε μια κατάρρευση, βρείτε το ID διεργασίας της MySQL εισάγοντας την ακόλουθη εντολή:
|
1 |
sudo systemctl status mysql.service |
Η εντολή ελέγχου κατάστασης εμφανίζει ένα ID διεργασίας, στην περίπτωσή μας είναι το 3555:

Εισαγάγετε την ακόλουθη εντολή για να τερματίσετε τη διεργασία. Αντικαταστήστε το με το ID διεργασίας που λάβατε στον διακομιστή σας:
|
1 |
sudo kill -9 3555 |
Εισαγάγετε την ακόλουθη εντολή για να ελέγξετε την κατάσταση:
|
1 |
sudo systemctl status mysql.service |
Το αποτέλεσμα δείχνει ότι η MySQL εκτελείται, αλλά με νέο ID διεργασίας. Αυτό σημαίνει ότι επανεκκινήθηκε αυτόματα μετά την κατάρρευση:

Συμπέρασμα
Σε αυτόν τον οδηγό, σας παρουσιάσαμε τα τρία συστήματα προετοιμασίας στις διανομές Linux: System V, Upstart και Systemd. Μάθαμε πώς να χρησιμοποιείτε οποιοδήποτε από τα συστήματα init για να ρυθμίσετε τις συνεχώς εκτελούμενες υπηρεσίες σας ώστε να ξεκινούν αυτόματα μετά από επανεκκίνηση ή κατάρρευση του συστήματος. Αυτό θα πρέπει να χρησιμεύσει ως σημείο εκκίνησης για εσάς όταν χρειάζεται να ρυθμίσετε τις υπηρεσίες σας. Το πρώτο μέρος αυτής της σειράς ήταν κυρίως ένας πρακτικός οδηγός. Το το δεύτερο μέρος είναι πιο θεωρητικό και περιλαμβάνει περισσότερες λεπτομέρειες για όσα κάναμε στο πρώτο μέρος. Μην διαγράψετε ακόμα τους δοκιμαστικούς σας διακομιστές, καθώς θα τους χρησιμοποιήσετε και στο δεύτερο μέρος.
Καλή συνέχεια!
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.