Στον σημερινό οδηγό θα μάθουμε πως να διαχειριζόμαστε με το systemctl του systemd τις υπηρεσίες που τρέχει το Linux αλλά και πληροφορίες για το boot up του Linux και τα logs που αποθηκεύονται σε αρχεία καταγραφών του συστήματος.
Το systemd είναι ο νέος διαχειριστής του συστήματος και των διαφόρων υπηρεσιών του, που έρχεται ως προ-επιλεγμένος στις δημοφιλέστερες Linux διανομές. Ξεκινά μαζί με το σύστημα μας και το εποπτεύει στο σύνολο του. Στο παρόν άρθρο θα δούμε πως μπορούμε να το χρησιμοποιήσουμε προκειμένου να έχουμε τον πλήρη έλεγχο τι τρέχει, τι δουλεύει και πολλές άλλες χρήσιμες πληροφορίες.
Το process ID 1 χρησιμοποιείται από το systemd όπως φαίνεται και από το output της εντολής
ps -e | grep systemd

Πάμε να εξερευνήσουμε τι είναι το systemd και ποιες οι νέες δυνατότητες που παρέχει έναντι του παλιού sysVinit.
Σε περίπτωση που δεν είμαστε σίγουροι τι κάνουμε και προς αποφυγή πειραματισμών στο σύστημα μας, συνιστάται η δημιουργία μιας εικονικής μηχανής όπως περιγράφουμε στο αντίστοιχο άρθρο.
1. Γρηγορότερο startup
Το sysVinit ξεκινά τις διεργασίες μια μια και σειριακά. To systemd από την άλλη ξεκινά τις διεργασίες παράλληλα και μάλιστα ξεκινά μόνο εκείνες που απαιτούνται, μειώνοντας σημαντικά το χρόνο εκκίνησης του συστήματος μας.
Μπορούμε να δούμε πόσο χρόνο καταναλώνει η εκκίνηση με τη χρήση της εντολής
systemd-analyze
ενώ τα ίδια αποτελέσματα μπορούμε να τα πάρουμε και από την εντολή
systemd-analyze time
Στην περίπτωση που θέλουμε να γνωρίζουμε ακριβώς πόσο χρόνο κάνει κάθε διεργασία κατά την εκκίνηση του συστήματος με κατάξη από την αργότερη μέχρι τη γρηγορότερη. Αυτό μπορούμε να το μάθουμε δίνοντας στο τερματικό
systemd-analyze blame

2. Η εντολή systemctl
Η εντολή systemctl είναι μια από τις ποιο πολυσυζητημένες εντολές του systemd. Μπορούμε να διαχειριστούμε ολόκληρο το σύστημα μας με αυτή. Ας δούμε πιο αναλυτικά τις χρήσεις της.
2.1 Λίστα μονάδων (units)
Η εντολή systemctl χωρίς κάποια παράμετρο, είναι σε θέση να μας δείξει τις εν ενεργεία μονάδες (units), κάτι που επίσης μπορούμε να δούμε και με τη χρήση της παραμέτρου
systemctl list-units

2.2 Στοίχιση αποτυχημένων μονάδων
Τα units που απέτυχαν για κάποιο λόγο να ξεκινήσουν, μπορούμε να τα δούμε δίνοντας
systemctl --failed

Σε γενικές γραμμές, θα κάνουμε εκτενή χρήση του systemctl σε πολλά σημεία του παρόντος άρθρου.
3. Διαχείριση υπηρεσιών (services)
Ας δούμε πως μπορούμε να διαχειριστούμε τα services με τη βοήθεια του systemd.
3.1 Ενεργά Services
Μπορούμε να δούμε τα ενεργά services με τη χρήση της εντολής
systemctl list-units -t service

3.2 Κατάσταση των υπηρεσιών (Service Status)
Στο sysVinit μπορούμε με την εντολή service να διαχειριστούμε τα services εν αντιθέσει με το systemd που αυτό γίνεται με τη χρήση του systemctl. Για να δούμε αν ένα service δουλεύει ή όχι μπορούμε πολύ εύκολα μέσω της εντολής
systemctl status 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

Μπορούμε να δούμε το 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

7.1 Boot messages
Για να δούμε τα μηνύματα που εμφανίζονται κατά το boot, αρκεί να δώσουμε στο τερματικό μας
journalctl -b
7.2 Παρακολούθηση των logs
Στην περίπτωση που θέλουμε να παρακολουθήσουμε τα logs του συστήματος μας σε πραγματικό χρόνο(όπως μπορούμε να κάνουμε και με τη χρήση της εντολής tail -f) γράφουμε
journalctl -f

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

Αν ενδιαφέρεστε να εμβαθύνετε περισσότερο στο journalctl τότε διαβάστε τον απόλυτο οδηγό:
8. Διαχείριση κατάστασης συστήματος
Το systemctl μεταξύ των άλλων μπορεί επιπλέον να κλείσει το σύστημα μας, να το επανεκκινεί, να το θέσει σε αδράνεια ή σε λειτουργία αναμονής
Τα παραπάνω μπορούν να επιτευχθούν με τη χρήση των εντολών αντίστοιχα
systemctl poweroff
systemctl reboot
systemctl hibernate
systemctl suspend
9. Bonus
Αφήσαμε το καλύτερο για το τέλος. Ακόμη μια χρήσιμη εντολή που μπορεί να μας δώσει το hostname καθώς και άλλες χρήσιμες πληροφορίες για το Linux σύστημα μας, είναι η hostnamectl
hostnamectl

Επίλογος
Το systemd είναι ένα νέο κεφάλαιο με εντελώς διαφορετική προσέγγιση στην αλληλεπίδραση του χρήστη με το λειτουργικό σύστημα. Έρχεται πακεταρισμένο με πολλές λειτουργίες και με το παρόν άρθρο ίσα που ξύσαμε την επιφάνεια. Σε επόμενα άρθρα θα αποπειραθούμε να δούμε περισσότερα πράγματα, παίρνοντας έτσι στα χέρια μας τον έλεγχο του συστήματος μας.
καλοοοοοοοοο
εξαιρετικό & πλήρες άρθρο!
Ευχαριστούμε για το ενδιαφέρον άρθρο! :-)
Παρόλα αυτά, μας αναφέρεις πολύ ενδιαφέρουσες οδηγίες/πληροφορίες και τρόπους χρήστης του systemd, όμως δεν μας έχει αναφέρει την ιστορία του (νομίζω).
Από πότε βγήκε αυτό ; Ποιος το αναπτύσσει ; Τι χαμός έχει γίνει στον κόσμο των Linux SysAdmins και γιατί ;
πολυ καλο