Διαχείριση υπηρεσιών με systemctl στο VPS σας
Στον VPS σας εκτελούνται προγράμματα που πρέπει να είναι πάντα διαθέσιμα: ο SSH server, ένας web server, μια βάση δεδομένων. Αυτά τα προγράμματα ονομάζονται υπηρεσίες. Σε Debian, Ubuntu, AlmaLinux και Rocky Linux τις εκκινεί και τις επιβλέπει το systemd, και χειρίζεστε το systemd με την εντολή systemctl. Αυτές είναι οι εντολές που θα χρειάζεστε πιο συχνά.
Η κατάσταση μιας υπηρεσίας
systemctl status nginx
Την κατάληξη .service μπορείτε να την παραλείψετε. Διαβάστε την έξοδο από πάνω προς τα κάτω:
- Η κουκκίδα πριν από το όνομα είναι πράσινη όταν η υπηρεσία εκτελείται, λευκή όταν έχει σταματήσει και κόκκινη όταν έχει αποτύχει.
- Το Loaded δείχνει αν η υπηρεσία ξεκινά κατά την εκκίνηση του συστήματος (
enabled) ή όχι (disabled). - Το Active δείχνει αν εκτελείται τώρα (
active (running)), αν έχει σταματήσει (inactive (dead)) ή αν έχει αποτύχει (failed), καθώς και από πότε. - Στο κάτω μέρος εμφανίζονται οι τελευταίες γραμμές από το αρχείο καταγραφής της υπηρεσίας. Συχνά εκεί φαίνεται ήδη γιατί κάτι δεν λειτουργεί.
Εκκίνηση, διακοπή και επαναφόρτωση
| Εντολή | Τι κάνει |
|---|---|
sudo systemctl start nginx | Εκκίνηση τώρα |
sudo systemctl stop nginx | Διακοπή τώρα |
sudo systemctl restart nginx | Διακοπή και εκ νέου εκκίνηση |
sudo systemctl reload nginx | Εκ νέου ανάγνωση της διαμόρφωσης χωρίς διακοπή |
Η διαφορά μεταξύ restart και reload είναι σημαντική. Με ένα restart η υπηρεσία σταματά για λίγο, και αν η νέα διαμόρφωση περιέχει σφάλμα, δεν ξεκινά ξανά και η ιστοσελίδα σας πέφτει. Με ένα reload η υπηρεσία συνεχίζει να εκτελείται· το nginx, σε περίπτωση σφάλματος, διατηρεί την παλιά διαμόρφωση. Γι' αυτό ελέγξτε πρώτα τη διαμόρφωση (sudo nginx -t, sudo sshd -t) και στη συνέχεια χρησιμοποιήστε reload. Δεν υποστηρίζουν όλες οι υπηρεσίες reload· η εντολή sudo systemctl reload-or-restart επιλέγει αυτόματα.
Κατά την εκκίνηση: enable και disable
Η εκκίνηση και η «εκκίνηση κατά την εκκίνηση του συστήματος» είναι δύο διαφορετικά πράγματα. Αν ξεκινήσετε μια υπηρεσία μόνο με start, μετά την επόμενη επανεκκίνηση, για παράδειγμα λόγω ενημέρωσης του kernel, δεν θα εκτελείται πια.
| Εντολή | Τι κάνει |
|---|---|
sudo systemctl enable --now nginx | Εκκίνηση τώρα και από εδώ και πέρα κατά την εκκίνηση του συστήματος. Χρησιμοποιήστε την για μια νέα υπηρεσία |
sudo systemctl disable --now nginx | Διακοπή τώρα και όχι πλέον κατά την εκκίνηση του συστήματος |
systemctl is-enabled nginx | Δείχνει αν η υπηρεσία ξεκινά κατά την εκκίνηση του συστήματος |
Τι δεν πάει καλά; Και τι εκτελείται;
systemctl --failed
Αυτή η εντολή εμφανίζει όλες τις υπηρεσίες που απέτυχαν. Η λίστα θα πρέπει να είναι κενή. Ελέγξτε την μετά από κάθε επανεκκίνηση και κάθε αναβάθμιση. Αφού λύσετε το πρόβλημα, αφαιρείτε την ειδοποίηση με sudo systemctl reset-failed.
- Η εντολή
systemctl list-units --type=service --state=runningεμφανίζει όλες τις υπηρεσίες που εκτελούνται. Αν δεν γνωρίζετε κάποια, μάθετε τι κάνει. Μια υπηρεσία που δεν χρειάζεστε αποτελεί ένα περιττό σημείο εισόδου. - Η εντολή
systemctl list-timersεμφανίζει τις προγραμματισμένες εργασίες του systemd, μαζί με το πότε εκτελέστηκαν τελευταία φορά και πότε θα εκτελεστούν ξανά. Έτσι βλέπετε, για παράδειγμα, αν λειτουργούν οι timers για τις αυτόματες ενημερώσεις ή για την ανανέωση των πιστοποιητικών.
Τα αρχεία καταγραφής μιας υπηρεσίας
Αν θέλετε να δείτε περισσότερα από τις λίγες γραμμές του systemctl status, χρησιμοποιήστε το journalctl:
sudo journalctl -u nginx --since "1 hour ago" sudo journalctl -u nginx -p err -b
Η πρώτη εντολή εμφανίζει όλα τα μηνύματα του nginx της τελευταίας ώρας, η δεύτερη μόνο τα σφάλματα από την τελευταία επανεκκίνηση. Περισσότερες εντολές θα βρείτε στο άρθρο Ανάγνωση logs με journalctl και docker logs.
Προσαρμογή των ρυθμίσεων μιας υπηρεσίας
Το αρχείο unit ενός πακέτου (στο /usr/lib/systemd/system/) δεν το τροποποιείτε ποτέ, επειδή μια ενημέρωση το αντικαθιστά. Χρησιμοποιήστε την εντολή sudo systemctl edit nginx: δημιουργεί ένα μικρό αρχείο μόνο με τις δικές σας αλλαγές και κάνει το systemd να το διαβάσει ξανά. Ποιες ρυθμίσεις ισχύουν τελικά, το βλέπετε με systemctl cat nginx.
sudo systemctl reboot ή με την Επανεκκίνηση στην οθόνη του VPS. Ο αναγκαστικός τερματισμός ισοδυναμεί με το να τραβήξετε το φις: οι υπηρεσίες δεν έχουν την ευκαιρία να σταματήσουν σωστά και μια βάση δεδομένων μπορεί να καταστραφεί. Δείτε το άρθρο Η οθόνη του VPS: ενεργοποίηση και απενεργοποίηση, γραφήματα, σύστημα και αρχείο καταγραφής.Σε AlmaLinux και Rocky Linux το systemctl λειτουργεί ακριβώς με τον ίδιο τρόπο, απλώς ορισμένες υπηρεσίες έχουν διαφορετικό όνομα: η υπηρεσία SSH ονομάζεται εκεί sshd αντί για ssh, ο Apache ονομάζεται httpd και το firewall firewalld.
Θέλετε να μάθετε περισσότερα; Παρακολουθήστε το δωρεάν μάθημα VPS και διαχείριση Linux server, ενότητα 6.1 Διαχείριση υπηρεσιών με systemd ή ενότητα 6.2 Ανάγνωση logs με journalctl.
