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

Στον σημερινό οδηγό θα μάθουμε πως να διαχειριζόμαστε με το 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

image

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

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

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

runlevel target
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

image

Επίλογος

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

6 Likes

Έχει καταντήσει φτηνή προπαγάνδα και λαϊκισμός, το να στηρίζεις το systemd με το να το συγκρίνεις μόνο με το sysvinit.

Είναι σαν να ισχυρίζεσαι στον 21 αιώνα ότι η ατμομηχανή που καίει κάρβουνο είναι η καλύτερη λύση γιατί είναι πιο αποδοτική από το κάρο με τα βόδια (που καίνε χορτάρι).

Και βρίσκει τροφή αυτός ο λαϊκισμός και η προπαγάνδα με το να βρίσκονται παλαιοημερολογήτες και πρωτογονιστές να θεωρούν τα αγαπητά τους πολύπλοκα σκρίπτς αναντικατάστατα.

Σε μια αναδημοσιευση ενός άρθρου του 2016 τα είδες όλα αυτά;

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

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

:fire::fire:

Και δίκιο να έχεις, τι ωφελεί η υπερβολή;

Σε έναν οδηγό χρήσης howTo, καλό θα ήταν να μην περιλαμβάνονται συγκρίσεις.
Σε ένα συγκριτικό άρθρο, τα λεπτομερή βήματα για αρχάριους είναι υπερβολή.
Προφανώς το άρθρο έχει θέματα… ταυτότητας :laughing:

Μάλλον θέλει λίγο επανατοποθέτηση ή επανασχεδιασμό το μονοπάτι του φόρουμ.
Είναι μια ιστοσελίδα που για λόγους γούστου, ή άλλους, χρησιμοποιεί forum scope engine, ή ένα φόρουμ για προαγωγή της γνώσης του Linux;

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

Προσπάθησα, λίγο πριν… :man_shrugging:

1 Like

Εγω παντως περιμενω να ακουστει και η αλλη πλευρα του ολου θεματος… ειδαμε μια σειρα αρθρων για το SystemD (ή systemd οπως προτιματε) αλλα υπαρχουν και αλλα inits και για να μην γινει ολη αυτη η προσπαθεια μια σειρα αρθρων “Πως εμαθα να παψω να παραπονιεμαι για κατι που δεν με ενδιαφερει” για πολλους νεους χρηστες (γιατι οι παλιοι οτι και να γινει την αποψη τους την εχουν ηδη διαμορφωσει κατα την πολυχρονη εμπειρια τους) θα πρεπει να υπαρξει και μια σειρα αρθρων για το RunIt για το OpenRC και για οποια προσπαθεια υπαρχει να αναζοπυρωθει το SysVinit (εαν υπαρχει).

Πραγμα που για μενα σημαινει οτι το ταξιδι των αρθρογραφων δεν τελειωνει απλα με το systemd αλλα μολις δουμε ΟΛΑ τα συστηματα που υπαρχουν και κανουν αυτη την δουλεια για να μπορεσει καποιος να κανει μια εμπερηστατομενη επιλογη init και οπως εχουν τα πραγματα διανομης μιας και δεν υπαρχει τροπος στις κυριες διανομες (παρα μονο νομιζω στο MX αν μου ξεφυγε καμια αλλη διορθωστε με) να αλλαχθει το init οπως αλλαζουμε Desktop.

Αλλιως μιλαμε για μια πολυ καλη σειρα για το systemd και τιποτα αλλο που προσωπικα (και ας ονομαστω παλι απολυτος και χωρις ανοιχτο μυαλο… παρολο που το systemd το ειδα απο την αρχη και απο τοτε που υπηρχε το systemd-shim πακετο και μπορουσα να κανω την δουλεια μου με οτι ειχα επιλεξει) θα την θεωρησω σαν documentation και τιποτα πιο ενδιαφερον.

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

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

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

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

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

Δυστυχώς όπως περιμένεις και εσύ να ακούσεις την άλλη άποψη, το ίδιο ακριβώς κάνω και εγώ …

Γράψτε μας άρθρα για το runit για το openrc και δείξτε μας γιατί τα θεωρείτε καλύτερα. Αλλά δεχτείτε και τον αντίλογο αν υπάρξει. Όπως τα σχόλια σε όλα τα άρθρα είναι ανοικτά για αντεπιχειρήματα

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

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

1 Like

Δεν ζηταω απολογια @Asfodelus, απλα πολυφωνια. Μπορει να μην σε ενδιαφερει η αλλη πλευρα και το σεβομαι. Δεν προσπαθω να σε κανω να κανεις κατι που δεν θελεις. Οπως ειδες στο νημα ανεφερα οτι “για μενα” δεν τελειωνει εδω το ταξιδι… που σημαινει οτι εξεφρασα προσωπικη μου αποψη. Δεν μπορω να κοντρολαρω κανεναν και ουτε το θελω οποτε αυτο μπορεις μια χαρα και χωρις παρεξηγησεις να το αγνωησεις.

Αλλα τα γραπτα οπως εχει χιλιοαναφερθει, μενουν. Θελουμε οι νεοι χρηστες να κανουν σωστες και ενημερωμενες επιλογες, σωστα;

Αλλα μια σωστη γνωμη μπορει να δημιουργηθει (κατα την γνωμη μου παντα και μπορει και να ειμαι λαθος) οταν ολα τα δεδομενα ειναι στο τραπεζι ακριβως με τον ιδιο τροπο απλομενα ετσι ωστε ο χρηστης να αποφασισει μονος το αν θελει το Ubuntu, το Arch, το Deepin ή το MX το Artix και οτιδηποτε αλλο τρεχει (με ή χωρις) το systemd ακριβως οπως διαλεγει αλλες διανομες.

Βεβαια υπαρχει μια διαφορα. Οι νεοι χρηστες επιλεγουν συμφωνα με το OOTB (Out of the Box) και οχι εις βαθος και αυτο φαινεται απο το πιες διανομες ειναι πιο “φιλικες” προς τον χρηστη. Αλλοι χρηστες τους αρεσει το μπιχλιμπιδατο setup που εχουν απο την αρχη… γουστα ειναι αυτα και δεν μπορουμε να τα αλλαξουμε… και ειναι στην επιφανεια. Για ενα αφανες κομματι του συστηματος οπως το systemd ομως πιστευω οτι καλα εκανες και κατεγραψες την λειτουργεια του. Απλα ειναι προσωπικη μου αποψη (και παλι συμπαθα με ολο το σεβασμο που σου εχω) οτι ειναι ατελης η σειρα εαν δεν υπαρχει και η αντιθετη πλευρα για να δει καποιος και τις δυο οψεις του νομισματος.

1 Like

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

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