Διαχείριση του συστήματος σας με τη χρήση του systemd

Το systemd είναι ο νέος διαχειριστής του συστήματος και των διαφόρων υπηρεσιών του, που έρχεται ως προ-επιλεγμένος στις δημοφιλέστερες Linux διανομές. Ξεκινά μαζί με το σύστημα μας και το εποπτεύει στο σύνολο του. Στο παρόν άρθρο θα δούμε πως μπορούμε να το χρησιμοποιήσουμε προκειμένου να έχουμε τον πλήρη έλεγχο τι τρέχει, τι δουλεύει και πολλές άλλες χρήσιμες πληροφορίες.

Το process ID 1 χρησιμοποιείται από το systemd όπως φαίνεται και από το output της εντολής

ps -e | grep systemd
Το systemd έχει process ID 1

Το systemd έχει process ID 1

Πάμε να εξερευνήσουμε τι είναι το systemd και ποιες οι νέες δυνατότητες που παρέχει έναντι του παλιού sysVinit.

Σε περίπτωση που δεν είμαστε σίγουροι τι κάνουμε και προς αποφυγή πειραματισμών στο σύστημα μας, συνιστάται η δημιουργία μιας εικονικής μηχανής όπως περιγράφουμε στο αντίστοιχο άρθρο.

1. Γρηγορότερο startup

Το sysVinit ξεκινά τις διεργασίες μια μια και σειριακά. To systemd από την άλλη ξεκινά τις διεργασίες παράλληλα και μάλιστα ξεκινά μόνο εκείνες που απαιτούνται, μειώνοντας σημαντικά το χρόνο εκκίνησης του συστήματος μας.

Μπορούμε να δούμε πόσο χρόνο καταναλώνει η εκκίνηση με τη χρήση της εντολής

systemd-analyze

ενώ τα ίδια αποτελέσματα μπορούμε να τα πάρουμε και από την εντολή

systemd-analyze time

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

systemd-analyze blame
systemd-analyze blame

Λίστα διεργασιών κατά την εκκίνηση του συστήματος όπου δίπλα αναγράφεται η διάρκεια τους

2. Η εντολή systemctl

Η εντολή systemctl είναι μια από τις ποιο πολυσυζητημένες εντολές του systemd. Μπορούμε να διαχειριστούμε ολόκληρο το σύστημα μας με αυτή. Ας δούμε πιο αναλυτικά τις χρήσεις της.

2.1 Λίστα μονάδων (units)

Η εντολή systemctl χωρίς κάποια παράμετρο, είναι σε θέση να μας δείξει τις εν ενεργεία μονάδες (units), κάτι που επίσης μπορούμε να δούμε και με τη χρήση της παραμέτρου

systemctl list-units
systemd-list-units

Η λίστα των ενεργών μονάδων ως output της εντολής systemctl list-units

2.2 Στοίχιση αποτυχημένων μονάδων

Τα units που απέτυχαν για κάποιο λόγο να ξεκινήσουν, μπορούμε να τα δούμε δίνοντας

systemctl --failed
systemd-failed

Services που ενώ φορτώθηκαν απέτυχαν να ξεκινήσουν.

Σε γενικές γραμμές, θα κάνουμε εκτενή χρήση του systemctl σε πολλά σημεία του παρόντος άρθρου.

3. Διαχείριση υπηρεσιών (services)

Ας δούμε πως μπορούμε να διαχειριστούμε τα services με τη βοήθεια του systemd.

3.1 Ενεργά Services

Μπορούμε να δούμε τα ενεργά services με τη χρήση της εντολής

systemctl list-units -t service
Λίστα των υπηρεσιών

Λίστα των ενεργών υπηρεσιών(services)

3.2 Κατάσταση των υπηρεσιών (Service Status)

Στο sysVinit μπορούμε με την εντολή service να διαχειριστούμε τα services εν αντιθέσει με το systemd που αυτό γίνεται με τη χρήση του systemctl. Για να δούμε αν ένα service δουλεύει ή όχι μπορούμε πολύ εύκολα μέσω της εντολής

systemctl status NetworkManager

Για να πάρουμε σαν αποτέλεσμα

H κατάσταση της υπηρεσίας NetworkManager (ενεργή)

H κατάσταση της υπηρεσίας NetworkManager (ενεργή)

προσοχή!!! Τα ονόματα των services είναι case sensitive

3.3 Ξεκινώντας μια υπηρεσία

Για να ξεκινήσουμε μια υπηρεσία δίνουμε στο τερματικό μας

systemctl start OnomaYphresias

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

3.4 Σταματώντας μια υπηρεσία

Σε αντιστοιχία με την εκκίνηση μιας υπηρεσίας, η παύση της γίνεται το ίδιο εύκολα με τη χρήση της εντολής

systemctl stop OnomaYphresias

3.5 Επανεκκίνηση μιας υπηρεσίας

Στο ίδιο ύφος η επανεκκίνηση μιας υπηρεσίας μπορεί να επιτευχθεί δίνοντας

systemctl restart OnomaYphresias

3.6 Reload μιας υπηρεσίας

Στην περίπτωση που θέλουμε να επαναφορτώσουμε ένα configuration ή ένα service (πχ ssh) χωρίς όμως να επανεκκινήσουμε την υπηρεσία την ίδια, μπορούμε με τη χρήση της εντολής

systemctl reload OnomaYphresias

Παρότι τα προαναφερθέντα δουλεύουν κανονικά, το επίσημο documentation προτείνει τη συγκεκριμένη σύνταξη

systemctl start OnomaYphresias.service

4. Διαχείριση υπηρεσιών κατά το boot

Η εντολή chkconfig χρησιμοποιείται για τη διαχείριση των υπηρεσιών κατά το boot. Εδώ το systemd χρησιμοποιεί πάλι τη systemctl για τη διαχείριση τους.

4.1 Έλεγχος αν ένα service είναι ενεργοποιημένο κατά το boot

Για να δούμε αν ένα service είναι ενεργοποιημένο κατά το boot ή όχι μπορούμε να το δούμε δίνοντας

systemctl is-enabled OnomaYphresias.service

4.2 Ενεργοποίηση μιας υπηρεσίας κατά το boot

Με τη χρήση του systemctl μπορούμε να ενεργοποιήσουμε μια υπηρεσία να ξεκινάει κατά το boot (στο sysVinit μπορούμε να το κάνουμε με το chkconfing on)

systemctl enable OnomaYphresias.service

4.3 Απενεργοποίηση μιας υπηρεσίας κατά το boot

Στο ίδιο ύφος μπορούμε να απενεργοποιήσουμε μια υπηρεσία κατά το boot

systemctl disable OnomaYphresias.service

5. Διαχείριση απομακρυσμένων συστημάτων

Όλες οι παραπάνω εντολές μπορούν να χρησιμοποιηθούν για να διαχειριστούμε έναν απομακρυσμένο προορισμό. Για τη διαχείριση του θα χρησιμοποιήθεί το ssh για την επικοινωνία. Έτσι το systemctl θα διατυπωθεί όπως φαίνεται στο ακόλουθο παράδειγμα

systemctl status OnomaYphresias -H onomaxristi@1.2.3.4
Απομακρυσμένος έλεγχος μιας υπηρεσίας

Απομακρυσμένος έλεγχος μιας υπηρεσίας

Αν ο απομακρυσμένος server έχει απενεργοποιημένο το login με password (ή το root login), μπορούμε να το διαχειριστούμε με τη χρήση shared keys όπως γράψαμε εδώ

6. Διαχείριση targets

Το systemd έχει τα targets όπως το sysVinit είχε τα runlevels. Τα runlevels ήταν ως επί το πλείστον αριθμητικά(0,1,2,…). Παρακάτω βλέπουμε τα runlevel με τα αντίστοιχα τους στο systemd

  • 0 runlevel0.target, poweroff.target
  • 1, s, single runlevel1.target, rescue.target
  • 2, 4 runlevel2.target, runlevel4.target, multi-user.target
  • 3 runlevel3.target, multi-user.target
  • 5 runlevel5.target, graphical.target
  • 6 runlevel6.target, reboot.target
  • emergency emergency.target

6.1 Αλλάζοντας το τρέχον target

Το τρέχον target(runlevel) μπορεί να αλλάξει με τη χρήση της εντολής

systemctl isolate graphical.target

6.2 Λίστα τρέχοντος target

Αν θέλουμε να δούμε σε ποιο target βρισκόμαστε πρέπει να εμφανίσουμε όλες τις αντιπροσωπευτικές μονάδες (units). Αρχικά μπορεί να μας ξενίσει αυτός ο τρόπος αλλά έτσι δουλεύει το systemd.

systemctl list-units --type=target
Λίστα τρεχόντων targets

Λίστα τρεχόντων targets

Μπορούμε να δούμε το graphical target ότι περιλαμβάνεται στη λίστα. Σε αυτό το target αλλάξαμε. Τώρα αν θέλουμε να αλλάξουμε το runlevel στο multi-user.target δίνουμε

systemctl isolate multi-user.target

systemctl list-units --type=target

6.3 Εμφάνιση του προκαθορισμένου target

Για να εμφανίσουμε το προκαθορισμένο(default) target, χρησιμοποιούμε το systemctl ως εξής

systemctl get-default

6.4 Αλλαγή του προκαθορισμένου target

Το προκαθορισμένο target δύναται να ορισθεί με την παράμετρο set-default στο systemctl

systemctl set-default graphical.target

7. To logging στο systemd

Το systemd έχει το δικό του σύστημα δημιουργίας logs(logging system) και ονομάζεται journald. Αντικαθιστά το δαίμονα syslog του sysVinit. Η εντολή journalctl χρησιμοποιείται για το διάβασμα των logs.

journalctl
Το output του journalctl

Το output του journalctl

7.1 Boot messages

Για να δούμε τα μηνύματα που εμφανίζονται κατά το boot, αρκεί να δώσουμε στο τερματικό μας

journalctl -b

7.2 Παρακολούθηση των logs

Στην περίπτωση που θέλουμε να παρακολουθήσουμε τα logs του συστήματος μας σε πραγματικό χρόνο(όπως μπορούμε να κάνουμε και με τη χρήση της εντολής tail -f) γράφουμε

journalctl -f
Με το journald μπορούμε να έχουμε εποπτεία σε πραγματικό χρόνο τι γίνεται στο σύστημα μας

Με το journald μπορούμε να έχουμε εποπτεία σε πραγματικό χρόνο τι γίνεται στο σύστημα μας

7.3 Logs συγκεκριμένων services

Για τον έλεγχο logs ενός συγκεκριμένου service ή εκτελέσιμου, χρησιμοποιούμε το journalctl, πχ αν θέλουμε να πάρουμε πληροφορίες μόνο για το gnome-shell

journalctl /usr/bin/gnome
Logs που σχετίζονται αποκλειστικά και μόνο με το gnome-shell

Logs που σχετίζονται αποκλειστικά και μόνο με το gnome-shell

 

8. Διαχείριση κατάστασης συστήματος

Το systemctl μεταξύ των άλλων μπορεί επιπλέον να κλείσει το σύστημα μας, να το επανεκκινεί, να το θέσει σε αδράνεια ή σε λειτουργία αναμονής

Τα παραπάνω μπορούν να επιτευχθούν με τη χρήση των εντολών αντίστοιχα

systemctl poweroff

systemctl reboot

systemctl hibernate

systemctl suspend

9. Bonus

Αφήσαμε το καλύτερο για το τέλος. Ακόμη μια χρήσιμη εντολή που μπορεί να μας δώσει το hostname καθώς και άλλες χρήσιμες πληροφορίες για το Linux σύστημα μας, είναι η hostnamectl

hostnamectl
Η εντολή hostnamectl μας δίνει χρήσιμες πληροφορίες για το σύστημα μας

Η εντολή hostnamectl μας δίνει χρήσιμες πληροφορίες για το σύστημα μας

Επίλογος

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

Πηγή

Απορίες, παρατηρήσεις, ιδέες... Ελεύθερα ! Πες την άποψή σου... έστω και Ανώνυμα:

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s