systemd (Ελληνικά)

From ArchWiki
Jump to navigation Jump to search

Από τον ιστότοπο του έργου:

systemd είναι μια σουίτα βασικών μονάδων δόμησης για το σύστημα Linux. Παρέχει έναν διαχειριστή συστήματος και υπηρεσιών ο οποίος εκτελείται ως PID 1 και εκκινεί το υπόλοιπο σύστημα. Το systemd διαθέτει ικανότητες επιθετικής παράλληλης επεξεργασίας, χρησιμοποιεί την ενεργοποίηση υποδοχέα socket και του D-Buss (αγγλικά) για την εκκίνηση υπηρεσιών, προσφέρει κατά παραγγελία εκκίνηση προγραμμάτων-δαιμόνων, παρακολουθεί τις διεργασίες χρησιμοποιώντας τις ομάδες ελέγχου (αγγλικά) Linux, διατηρεί τα σημεία προσάρτησης και αυτόματης προσάρτησης και εφαρμόζει μια περίπλοκη λογική συναλλακτικής υπηρεσίας ελέγχου βασισμένης σε εξαρτήσεις. Το systemd υποστηρίζει τα σενάρια init SysV και LSB και λειτουργεί ως αντικατάσταση του sysvinit. Άλλα μέρη του περιλαμβάνουν έναν δαίμονα καταγραφών, εργαλεία για τον έλεγχο βασικών ρυθμίσεων συστήματος όπως του hostname, της ημερομηνίας, των συνόλων τοπικής προσαρμογής locale, διατηρεί μια λίστα των συνδεδεμένων χρηστών, εκτελεί περιέκτες και εικονικές μηχανές, λογαριασμούς συστήματος, καταλόγους χρονοεκτέλεσης (runtime) και ρυθμίσεις, δαίμονες για την διαχείριση απλών ρυθμίσεων δικτύου, χρονικό συγχρονισμό δικτύου, προώθηση καταγραφών και επίλυση ονομάτων (name resolution).

Σημείωση: Για μια λεπτομερή εξήγηση του λόγου που το Arch υιοθέτησε το systemd, δείτε αυτή την ανάρτηση στο φόρουμ.

Βασική χρήση του systemctl

Η κυριότερη εντολή που χρησιμοποιείται για την ενδοσκόπηση και έλεγχο του systemd είναι η systemctl. Κάποιες από τις χρήσεις της εξετάζουν την κατάσταση του συστήματος και διαχειρίζονται το σύστημα και τις υπηρεσίες. Για περισσότερες λεπτομέρειες, δες systemctl(1).

Συμβουλή:
  • Για να ελέγξετε το systemd σε μια απομακρυσμένη συσκευή μπορείτε να χρησιμοποιήσετε όλες τις ακόλουθες εντολές systemctl μαζί με τον διακόπτη -H user@host. Για να συνδεθεί στο απομακρυσμένο systemd η εντολή θα χρησιοποιήσει το SSH.

Οι χρήστες Plasma μπορούν να εγκαταστήσουν το systemd-kcmAUR ως γραφικό περιβάλλον για το systemctl. Μετά την εγκατάστασή του το άρθρωμα θα προστεθεί στο System administration.

Αναλύοντας την κατάσταση συστήματος

Εμφανίστε την κατάσταση συστήματος χρησιμοποιώντας: Show system status using:

$ systemctl status

Εμφανίστε την Λίστα εκτελούμενων μονάδων:

$ systemctl

ή:

$ systemctl list-units

Εμφανίστε την Λίστα αποτυχημένων μονάδων:

$ systemctl --failed

Τα διαθέσιμα αρχεία μονάδων μπορείτε να τα δείτε στους καταλόγους /usr/lib/systemd/system/ και /etc/systemd/system/ (ο τελευταίος αυτός έχει προτεραιόητα). Εμφανίστε την Λίστα εγκατεστημένων μονάδων με:

$ systemctl list-unit-files

Εμφανίστε τα cgroup slice, την μνήμη και τον γονέα ενός PID:

$ systemctl status pid

Χρησιμοποώντας τις μονάδες

Μονάδες μπορούν να είναι, για παράδειγμα, υπηρεσίες (.service), σημεία προσάρτησης (.mount), συσκευές (.device) ή υποδοχές sockets (.socket).

Γενικά, όταν χρησιμοποιείτε το systemctl,πρέπει να προσδιορίσετε το πλήρες όνομα του αρχείου της μονάδας, συμπεριλαμβάνοντας το πρόθεμά της, για παράδειγμα sshd.socket. Υπάρχουν, εντούτοις, μερικές συντετμημένες φόρμες όταν προσδιορίζεται την μονάδα στις εντολές systemctl που ακολουθουν:

  • Αν δεν καθορίσετε το πρόθεμα το systemctl θα υποθέσει το .service. Για παράδειγμα, τα netctl και netctl.service είναι ισοδύναμα.
  • Τα σημεία προσάρτησης θα μεταφραστούν αυτόματα στην ανάλογη μονάδα .mount. Για παράδειγμα, προσδιορίζοντας /home είναι ισοδύναμο του home.mount.
  • Παρόμοια με τα σημεία προσάρτησης, οι συσκευές μεταφράζονται αυτόματα στην ανάλογη μονάδα .device, γι' αυτό ο προσδιορισμός /dev/sda2 είναι ισοδυναμος του dev-sda2.device.

Για λεπτομέρειες, δείτε το εγχειρίδιο systemd.unit(5).

Σημείωση: Κάποια ονόματα μονάδων περιέχουν το σύμβολο @ (π.χ. name@string.service): αυτό σημαίνει ότι είναι this means that they are κρούσματα (instances) μιας πρότυπης μονάδας της οποίας το πραγματικό όνομα αρχείου δεν περιέχει το αλφαριθμητικό μέρος (π.χ. name@.service). Ως αλφαριθμητικό καλείται το προσδιοριστικό εκτέλεσης του systemd και είναι παρόμοιο με την παράμετρο που περνάει στην πρότυπη μονάδα όταν αυτή καλείται με την εντολή systemctl: μέσα στο αρχείο της μονάδας υποκαθιστά το προσδιοριστικό %i. Ακριβέσερα, πριν το systemd επιχειρήσει την εκκίνηση της πρότυπης μονάδας name@.suffix θα αναζητήσει την μονάδα με το ακριβές όνομα αρχείου name@string.suffix, αν και κατά σύμβαση τέτοια "σύγκρουση" σπάνια συμβαίνει. Τα περισσότερα ονόματα αρχείων μονάδων, δηλαδή, που περιέχουν το σύμβολο @ εννοούνται ως πρότυπα (templates). Επίσης, αν μια πρότυπη μονάδα κληθεί χωρίς κάποιο προσδιοριστικό εκτέλεσης απλώς θα αποτύχει εφόσον το προσδιοριστικό %i δεν μπορεί να υποκατασταθεί.
Συμβουλή:
  • Οι περισσότερες από τις εντολές που ακολουθούν λειτουργούν επίσης αν προσδιοριστούν πολλαπλές μονάδες. Για περισσότερες πληροφορίες, δείτε systemctl(1).
  • Ο διακόπτης --now μπορεί να χρησιμοποιηθεί σε συνδυασμό με τους enable, disable, και mask για να εκκινήσουν, να σταματήσουν ή να κρυφτούν, αντίστοιχα, άμεσα και όχι μετά από επανεκκίνηση της συσκευής οι μονάδες.
  • Ένα πακέτο μπορεί να διαθέτει μονάδες για διάφορους σκοπούς. Αν μόλις εγκαταστήσατε κάποιο πακέτο, το σενάριο pacman -Qql package | grep -Fe .service -e .socket μπορεί να χρησιμοποιηθεί για να τις ελέγξετε και εντοπίσετε.

Εκκίνηση μιας μονάδας αμέσως:

# systemctl start μονάδα

Σταμάτημα μιας μονάδας αμέσως:

# systemctl stop μονάδα

Επανεκκίνηση μιας μονάδας:

# systemctl restart μονάδα

Απαίτηση από μια μονάδα να επαναφορτώσει τις ρυθμίσεις της:

# systemctl reload μονάδα

Προβολή της κατάστασης μιας μονάδας, συμπεριλαμβανομένου αν εκτελείται ή όχι:

$ systemctl status μονάδα

Ελέγξτε αν μια μονάδα είναι ήδη ενεργοποιημένη ή όχι:

$ systemctl is-enabled μονάδα

Ενεργοποιήστε μια μονάδα να εκκινεί κατά την εκκίνηση της συσκευής:

# systemctl enable μονάδα

Ενεργοποιήστε μια μονάδα να εκκινεί κατά την εκκίνηση της συσκευής και Εκκινήσει αμέσως:

# systemctl enable --now μονάδα

Απενεργοποιήστε μια μονάδα ώστε να μην εκκινεί κατά την εκκίνηση της συσκευής:

# systemctl disable μονάδα

Αποκρύψτε μια μονάδα ώστε να είναι αδύνατη η εκκίνησή της (τόσο χειροκίνητα όσο και ως εξάρτηση, κάτι που καθιστά την αποκρυψη επικίνδυνη):

# systemctl mask μονάδα

Αποκαλύψτε μια μονάδα:

# systemctl unmask μονάδα

Προβάλετε την σελίδα εγχειριδίου που συνοδεύει κάποια μονάδα (πρέπει να υποστηρίζεται από το αρχείο της μονάδας):

$ systemctl help μονάδα

Επαναφόρτωση του διαχειριστή ρυθμίσεων του systemd , αναζητώντας νέες ή αλλαγμένες μονάδες:

Σημείωση: Με την εντολή αυτή δεν ζητείται από τις αλλαγμένες μονάδες να επαναφορτώσουν τις ρυθμίσεις τους. Δείτ το πιο πάνω παράδειγμα για επαναφορτωση.
# systemctl daemon-reload

Διαχείριση ενέργειας

Για την διαχείριση ενέργειας ως μη προνομιούχος χρήστης, είναι απαραίτητο το polkit. Αν βρίσκεστε σε τοπική συνεδρία χρήστη μέσω systemd-logind και δεν υπάρχουν άλλες ενεργές συνεδρίες, οι εντολές που ακολουθούν θα λειτουργήσουν χωρίς προνόμια χρήστη root. Αν όχι, (για παράδειγμα, επειδή κάποιος άλλος χρήστης είναι συνδεδεμένος σε κάποιο τερματικό tty)If not (for example, because another user is logged into a tty), το systemd θα σας ζητήσει τον κωδικό του χρήστη root.

Τερματισμός και επανεκκίνηση του συστήματος:

$ systemctl reboot

Τερματισμός και απενεργοποίηση του συστήματος:

$ systemctl poweroff

Αναστολή του συστήματος:

$ systemctl suspend

Θέση του συστήματος σε κατάσταση αδρανοποίησης:

$ systemctl hibernate

Θέση του συστήματος σε κατάσταση αδρανοποίησης-ύπνου (ή suspend-to-both):

$ systemctl hybrid-sleep

Σύνταξη αρχείων μονάδων

Η σύνταξη των μονάδων αρχείων (αγγλικά) του systemd έχει εμπνευστεί από τα αρχεία με κατάληση .desktop της Προδιαγραφής Εισόδου Επιφάνειας Εργασίας XDG τα οποία, με την σειρά τους, εμπνεύστηκαν από τα αρχεία με κατάληξη .ini του Microsoft Windows. Τα αρχεία μονάδων φορτώνονται από πολλαπλές τοποθεσίες (για να δείτε την πλήρη λίστα τους, εκτελέστε systemctl show --property=UnitPath), οι κυριότερες όμως είναι (ταξινομημένες κατά αύξουσα προτεραιότητα):

  • /usr/lib/systemd/system/: μονάδες που παρέχονται από τα εγκατεστημένα πακέτα
  • /etc/systemd/system/: μονάδες εγκατεστημένες από τον διαχειριστή του συστήματος
Σημείωση:
  • Τα δρομολόγια φόρτωσης των μονάδων είναι εντελώς διαφορετικά όταν το systemd εκτελείται σε λειτουργία χρήστη.
  • Τα ονόματα μονάδων systemd πρέπει να περιέχουν μόνον αλφαριθμητικούς χαρκτήρες ASCII, κάτω παύλες και τελείες. Κάθε άλλος χαρακτήρας πρέπει να αντικαθίσταται από χαρακτήρες διαφυγής "\x2d" τύπου C ή να εφαρμόζουν την προκαθορισμένη σημειογραφία ('@', '-'). Για περισσότερες πληροφορίες δείτε τα systemd.unit(5) και systemd-escape(1).

Για παραδείγματα, δείτε τις μονάδες που εγκατέστησαν τα πακέτα σας, καθώς και την ιστοσελίδα annotated example section του εγχειριδίου systemd.service(5).

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

Ο χειρισμός των εξαρτήσεων

Με το systemd οι εξαρτήσεις επιλύονται σχεδιάζοντας σωστά τα αρχεία των μονάδων. Η τυπικότερη περίπτωση είναι όταν μια μονάδα Ααπαιτεί να εκτελεστεί μια άλλη μονάδα Β πριν η εκκινηθεί η Α. Σε μια τέτοια περίπτωση προσθέστε Requires=B και After=B στην ενότητα [Unit] της A. Αν η εξάρτηση είναι προεραιτική προσθέστε, αντίστοιχα, Wants=B και After=B. Σημειώστε ότι, τα Wants= και Requires= δεν σημαίνουν After=, που σημαίνει ότι αν δεν προσδιοριστεί το After= οι δυο μονάδες θα εκκινήσουν παράλληλα.

Οι εξαρτήσεις συνήθως τίθενται για υπηρεσίες και όχι για #Στόχοι (Targets). Για παράδειγμα, το αρχείο network.target συλλαμβάνεται από οποιαδήποτε υπηρεσία ρυθμίζει τις διεπαφές του δικτύου σας, για τον λόγο αυτό η εκτέλεση της δικής σας προσαρμοσμένης μονάδας είναι αρκετή αφού το network.target θα ξεκινήσει όπως και να έχει.

Τύποι υπηρεσιών

Υπάρχουν πολλοί διαφορετικοί τύποι εκκίνησης που πρέπει να λάβεται υπ' όψιν όταν γράφετε ένα δικό σας αρχείο υπηρεσίας. Αυτό ορίζεται με την παράμετρο Type= της ενότητας [Service]:

  • Type=simple (default): το systemd τις θεωρεί ως υπηρεσίες που πρέπει να εκκινήσουν άμεσα. Η διαδικασία δεν πρέπει να διακλαδωθεί. Μην χρησιμοποιείτε αυτό τον τύπο αν άλλες υπηρεσίες αιτούνται την υπηρεσία αυτή, εκτός και αν ενεργοποιείται από κάποια υποδοχή.
  • Type=forking: το systemd θεωρεί ότι η υπηρεσία έχει εκκινήσει όταν αυτή διακλαδίζεται και η γονική υπηρεσία έχει τερματίσει. Χρησιμοποιείστε αυτό τον τύπο για τους κλασικούς δαίμονες, εκτός και αν γνωρίζεται ότι δεν είναι αναγκαίος. Επίσης πρέπει να προσδιορίσεται και το PIDFile= ώστε το systemd να μπορεί να παρακολουθεί την κύρια διεργασία.
  • Type=oneshot: αυτός ο τύπος είναι χρήσιμος για σενάρια τα οποία εκτελούν μια και μοναδική εργασία και μετά τερμτίζουν. Επίσης, ίσως πρέπει να ρυθμίσετε RemainAfterExit=yes ώστε το systemd να θεωρεί την υπηρεσία ως ενεργή μετά την έξοδο της διεργασίας.
  • Type=notify: ταυτόσημος τύπος με τον Type=simple, αλλά υπό τον όρο ότι ο δαίμονας θα στείλει ένα σήμα προς το systemd όταν είναι έτοιμος. Το reference implementation αυτής της ειδοποίησης παρέχεται από το αρχείο libsystemd-daemon.so.
  • Type=dbus: η υπηρεσία θεωρείται έτοιμη όταν στο σύστημα διαύλου του DBus εμφανίζεται το καθορισμένο BusName.
  • Type=idle: το systemd θα καθυστερήσει την εκτέλεση του binary αρχείου της υπηρεσίας έως ότου αποσταλούν όλες οι εργασίες. Κατα τα λοιπά η υπηρεσία λειτουργεί εν πολλοίς όπως η Type=simple.

Για λεπτομερέστερη επεξήγηση των τιμών της παραμέτρου Type δείτε την σελίδα εγχειριδίου systemd.service(5).

Επεξεργασία παρεχομένων μονάδων

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: Should be renamed to more descriptive Modifying provided units. (Discuss in Talk:Edit#Deprecation)

Τα αρχεία μονάδων που παρέχουν τα πακέτα δεν πρέπει να επεξεργάζονται απ' ευθείας για να αποφευχθούν διενέξεις με το pacman. Υπάρχουν δυο ασφαλείς τρόποι για να τροποποιήσετε μια μονάδα χωρίς να πειράξετε το αρχικό αρχείο: δημιουργήστε το αρχείο για μια νέα υπηρεσία η οποία παρακάμπτει την αρχική μονάδα ή δημουργείστε ένα περιστασικά αποσπάσματα κώδικα (snippets) τα οποια εφαρμόζονται πριν την αρχική μονάδα. Σε αμφότερες τις μεθόδους πρέπει να επαναφορτώσετε την μονάδα ώστε να εφαρμοστούν οι αλαγές. Αυτό μπορεί να γίνει είτε με την επεξεργασία της μονάδας με systemctl edit (που επαναφορτώνει αυτόματα την μονάδα) είτε επαναφορτώνοντας όλες τις μονάδες με:

# systemctl daemon-reload
Συμβουλή:
  • Για να δείτε ποια αρχεία έχουν παρακαμφθεί ή επεκταθεί και ποιες ακριβώς είναι οι αλλαγές, μπορείτε να χρησιμοποιήσετε το systemd-delta.
  • Χρησιμοποιείστε την εντολή systemctl cat μονάδα για να προβάλετε το περιεχόμενο ενός αρχείου μονάδας και όσα περιστασιακά αποσπάσματα κώδικα συνδέονται με αυτό.

Αντικαταστίσημα αρχεία μονάδων

Για να αντικαταστήσετε το αρχείο μονάδας /usr/lib/systemd/system/μονάδα, δημιουργείστε το αρχείο /etc/systemd/system/μονάδα και επανενεργοποιείστε την μονάδα ώστε να ενημερωθούν τα symlinks:

# systemctl reenable μονάδα

Εναλλακτικά, εκτελέστε:

# systemctl edit --full μονάδα

Η εντολή αυτή θα ανοίξει το αρχείο /etc/systemd/system/μονάδα στον επεξεργαστή κειμένου σας (αντιγράφοντας την εγκατεστημένη έκδοσή του αν αυτή δεν υπάρχει) και θα το επαναφορτώσει αυτόματα μόλις ολοκληρώσετε την επεξεργασία.

Σημείωση: Η μονάδα αντικατάστασης θα συνεχίσει να χρησιμοποιείται ακόμη κι αν το Pacman ενημερώσει στο μέλλον την αρχική μονάδα. Η μέθοδος καθιστά δυσχερέστερη την συντήρηση του συστήματος και για τον λόγο αυτό προτιμάται η προσέγγιση που ακολουθεί.

Περιστασιακά αρχεία

Για να δημιουργήσετε περιστασιακά αρχεία για το αρχείο μονάδας /usr/lib/systemd/system/μονάδα, δημιουργείστε τον κατάλογο /etc/systemd/system/μονάδα.d/ και αποθηκεύστε εκεί αρχαία τύπου .conf ώστε οι επιλογές ρύθμισης να παρακαμφθούν ή να προστεθούν νέες. Το systemd θα επεξεργαστεί και θα εφαρμόσει τα αρχεία αυτά "πάνω" από την αρχική μονάδα.

Ο ευκολοτερος τρόπος για να το κάετε αυτό είναι να εκτελέσετε:

# systemctl edit μονάδα

Η ενέργεια αυτή ανοίγει το αρχείο /etc/systemd/system/μονάδα.d/override.conf στον επεξεργαστή κειμένου (δημιουργώντας το, αν χρειάζεται) και επαναφορτώνει αυτόματα την μονάδα όταν ολοκληρώσετε την επεξεργασία.

Σημείωση: Δεν μπορούν να παρακαμφθούν όλες οι ρυθμίσεις μέσω περιστασιακών αρχείων. Για παράδειγμα, για να μεταβάλλετε την παράμετρο Conflicts= είναι απαραίτητο ένα αρχείο αντικατάστασης.

Επαναφορά στην έκδοση του προμηθευτή

Για να επαναφέρετε τις όποιες αλλαγές που εγιναν σε μια μονάδα μέσω του systemctl edit, εκτελέστε:

# systemctl revert μονάδα

Παραδείγματα

Για παράδειγμα, αν απλώς θέλετε να προσθέσετε μια επιπλέον εξάρτηση σε κάποια μονάδα, μπορείτε να δημιουργήσετε το παρακάτω αρχείο:

/etc/systemd/system/μονάδα.d/customdependency.conf
[Unit]
Requires=νέα εξάρτηση
After=νέα εξάρτηση

Ένα άλλο παράδειγμα: για να αντικαταστήσετε την οδηγία ExecStart για κάποια μονάδα που δεν είναι του τύπου oneshot, δημιουργήστε το ακόλουθο αρχείο:

/etc/systemd/system/μονάδα.d/customexec.conf
[Service]
ExecStart=
ExecStart=νέα εντολή

Παρατηρείστε ότι η ExecStart πρέπει πρώτα να δωθεί χωρίς τιμή [1]. Το ίδιο ισχύει και για κάθε στοιχείο που μπορεί να καθοριστεί πολλές φορές, π.χ. OnCalendar για τους χρονοδιακόπτες.

Ένα ακόμη παράδειγμα αυτόματης επανεκκίνησης κάποιας υπηρεσίας:

/etc/systemd/system/μονάδα.d/restart.conf
[Service]
Restart=always
RestartSec=30

Στόχοι (Targets)

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: Ασφαφής περιγραφή, επικκολημένο περιεχόμενο (αναφέρεται αποκλειστικά σε "Fedora"). (Discuss in "Targets"_more_clearly Talk:Systemd (Ελληνικά)#Make section "Targets" more clearly)

Το systemd χρησιμοποιεί στόχους για να ομαδοποιεί τις μονάδες μέσω εξαρτήσεων και ως πρότυπα σηεία συγχρονισμού. Εξυπηρετούν παρόμοιους στόχους με τα runlevels αλλά λειτουργούν λίγο διαφορετικά. Κάθε στόχος παίρνει ένα όνομα αντί να αριθμείται και σκοπό έχει να υπηρετήσει ένα συγκεκριμένο σκοπό με δυνατότητα να έχουμε πολλαπλούς στόχους ενεργούς, ταυτόχρονα. Κάποιοι στόχοι εφαρμόζονται απορροφώντας όλες τις υπηρεσίας κάποιου άλλου στόχου και προσθέτοτας σε αυτόν επιπλέον υπηρεσίες. Υπάρχουν στόχοι του systemd που μιμούνται συνήθη runlevels του SystemVinit και έτσι μπορείτε να ελέγξετε τον στόχο χρησιμποιώντας την γνωστή εντολή telinit RUNLEVEL.

Προβολή τρεχόντων στόχων

Πρέπει να εκτελείτε την παρακάτω γραμμή, αντί της runlevel:

$ systemctl list-units --type=target

Δημιουργία προσαρμοσμένων στόχων

Τα runlevels που εχουν καθορισμένη σημασία στο sysvinit (i.e., 0, 1, 3, 5, and 6) έχουν αντιστοίχιση 1:1 με συγκεκριμένο στόχο του systemd. Δυστυχώς, δεν υπάρχει κάποιος αξιόλογος τρόπος για να κάνουμε το ίδιο και στα runlevels του χρήστη, όπως τα 2 και 4. Αν χρησιμοποιήσετε τους τρόπους αυτούς, συνίσταται να δημιουργήσετε έναν νέο στόχο με /etc/systemd/system/ο στόχος σας που θα έχει ως βάση ένα από τα υπαρχοντα runlevels (σαν παράδειγμα, μπορείτε να ρίξετε μια ματιά στο αρχείο /usr/lib/systemd/system/graphical.target), να δημιουργήσετε ένα κατάλογο /etc/systemd/system/your target.wants και μετά να κάνετε symlink τις επιπρόσθετες υπηρεσίες που θέλετε να ενεργοποιήσετε από τον κατάλογο /usr/lib/systemd/system/.

Αντιστοίχιση SysV runlevels και στόχων systemd

SysV Runlevel systemd Target Notes
0 runlevel0.target, poweroff.target Ακινητοποίηση συστήματος.
1, s, single runlevel1.target, rescue.target Λειτουργία χρήστη.
2, 4 runlevel2.target, runlevel4.target, multi-user.target User-defined/Site-specific runlevels. Εξορισμού είναι ταυτόσημο με το 3.
3 runlevel3.target, multi-user.target Πολλαπλών χρηστών, μη γραφικό. Οι χρήστες συνήθως μπορούν να συνδεθούν μέσω πολλαπλών τερματικών ή μέσω δικτύου.
5 runlevel5.target, graphical.target Πολλαπλών χρηστών, γραφικό. Συνήθως διαθέτει όλες τις υπηρεσίες του runlevel 3 συν ένα γραφικό περιβάλλον σύνδεσης.
6 runlevel6.target, reboot.target Επανεκκίνηση.
emergency emergency.target Κέλυφος έκτακτης ανάγκης.

Change current target

Στο systemd οι στόχοι εκτίθενται μέσω μονάδων-στόχων. Μπορείτε να τους αλλάξετε ως εξής:

# systemctl isolate graphical.target

Η ενέργεια αυτή θα αλλάξει μόνον τον τρέχοντα στόχο και δεν έχει κανένα αποτέλεσμα στην επόμενη επανεκκίνηση. Είναι ισοδύναμη με εντολές όπως telinit 3 ή telinit 5 του Sysvinit.

Αλλαγή του αρχικού στόχου εκκίνησης

Ο εξορισμού στόχος είναι ο default.target ο οποίος γίνεται symlink με τον graphical.target. Χονδρικά, αυτό αντιστοιχεί με το παλαιό runlevel 5.

Για να διαπιστώσετε τον τρέχοντα στόχο μέσω systemctl:

$ systemctl get-default

Για να αλλάξετε τον εξορισμού στόχο εκκίνησης, αλλάξετε το symlink του default.target symlink. Μέσω systemctl:

# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target.

Εναλλακτικά, προσθέστε μια από τις ακόλουθες παραμέτρους kernel στον εκκινητή σας (bootloader):

  • systemd.unit=multi-user.target (που χονδρικά αντιστοιχεί στο παλαιό runlevel 3),
  • systemd.unit=rescue.target (που χονδρικά αντιστοιχει στο παλαιό runlevel 1).

Η σειρά των εξορισμού στόχων

Το systemd επιλέγει τον default.target σύμφωνα με την ακόλουθη σειρά:

  1. Kernel parameter shown above
  2. Symlink of /etc/systemd/system/default.target
  3. Symlink of /usr/lib/systemd/system/default.target

Προσωρινά αρχεία

Η σουίτα "systemd-tmpfiles δημιουργεί, διαγράφει και εκκαθαρίζει ασαφή (volatile) και προσωρινά αρχεία και καταλόγους." Για να εντοπίσει τις ενέργειες που πρέπει να εκτελέσει, διαβάζει τα αρχεία ρυθμίσεων στους καταλόγους /etc/tmpfiles.d/ και /usr/lib/tmpfiles.d/. Προηγούνται τα αρχεία ρυθμίσεων του πρώτου ως άνω καταλόγου έναντι εκείνων του δεύτερου.

Συνήθως τα αρχεία ρυθμίσεων παρέχονται μαζί με τα αρχεία υπηρεσιών και παίρνουν ονόματα του στυλ /usr/lib/tmpfiles.d/πρόγραμμα.conf. Το πρόγραμμα-δαίμονας Samba, για παράδειγμα, απαιτεί την ύπαρξη του καταλόγου /run/samba και σωστών αδειών. Για τον λόγο αυτό το πακέτο samba συνοδεύεται από την εξής ρύθμιση:

/usr/lib/tmpfiles.d/samba.conf
D /run/samba 0755 root root

Τα αρχεία ρυθμίσεων μπορούν επίσης να χρησιμοποιηθούν για να περάσουμε τιμές σε συγκεκριμένα αρχεία, κατά την εκκίνηση. Για παράδειγμα, αν χρησιμοποιήσατε το αρχείο /etc/rc.local για να απενεργοποιήσετε την αφύπνιση από συσκευές USB μέσω echo USBE > /proc/acpi/wakeup, μπορείτε να χρηιμοποιήσετε το ακόλουθο tmpfile αντ' αυτού:

/etc/tmpfiles.d/disable-usb-wake.conf
#    Path                  Mode UID  GID  Age Argument
w    /proc/acpi/wakeup     -    -    -    -   USBE

Για περισσότερες λεπτομέρειες δείτε τις σελίδες εγχειριδιου systemd-tmpfiles(8) και tmpfiles.d(5).

Σημείωση: Η μέθοδος αυτής ίσως δεν λειτουργήσει για να ορίσετε επιλογές στον κατάλογο /sys, αφού η υπηρεσία systemd-tmpfiles-setup ίσως εκτελεστεί πριν την φόρτωση των κατάλληλων αρθρωμάτων (modules) συσκευής. Στην περίπτωση αυτή μπορείτε να ελέγξετε αν το άρθρωμα διαθέτει κάποια παράμετρο για την επιλογή που θέλετε να ορίσετε με την εντολή modinfo module και να ορίσετε την επιλογή αυτή με ένα αρχείο ρυθμίσεων στον κατάλογο /etc/modprobe.d. Αλλιώς θα πρέπει να γράψετε έναν κανόνα udev για να ορίσετε την κατάλληλη ιδιότητα για την συσκευή.

Χρονοδιακόπτες

Χρονοδιακόπτης είναι ένα αρχείο ρύθμισης μονάδας του οποίου το όνομα τελειώνει σε .timer και περιέχει πληροφορίες για τον χρονοδιακόπτη που ελέγχεται και επιτηρείται από το systemd. Δείτε την σελίδα systemd/Timers (Αγγλικά).

Σημείωση: Σε μεγάλο βαθμό οι χρονοδιακόπτες μπορούν να αντικαταστήσουν την λειτουργία του cron. Δείτε την σελίδα Systemd/Timers#As a cron replacement.

Προσάρτηση

Το systemd ευθύνεται για την προσάρτηση των κατατμήσεων και των συστημάτων αρχείων που προσδιορίζονται στο αρχείο /etc/fstab. Το πρόγραμμα systemd-fstab-generator(8) μεταφράζει όλες τις εγγραφές που υπάρχουν στο αρχείο /etc/fstab σε μονάδες systemd. Αυτό γίνεται την στιγμή της εκκίνησης και κάθε φορά που επαναφορτώνονται οι ρυθμίσεις του διαχειριστή συστήματος.

Το systemd επεκτείνει τις συνήθεις δυνατότητες του fstab και προσφέρει επιπλέον επιλογές προσάρτησης. Οι επιλογές αυτές επηρεάζουν τις εξαρτήσεις του σημείου προσάρτησης. Μπορούν, για παράδειγμα, να εξασφαλίσουν ότι η προσάρτηση θα εκτελεστεί μόνον όταν το δίκτυο είναι ενεργό ή μόνο όταν προσαρτηθεί μια άλλη κατάτμηση. Η πλήρης λίστα συγκεκριμένων επιλογών προσάρτησης του systemd, που συνηθως έχουν προθεμα x-systemd. αναλύεται στο εγχειρίδιο systemd.mount(5) § FSTAB.

Ένα παράδειγμα αυτών των επιλογών προσάρτησης όσον αφορά στο automounting, που σημαίνει προσάρτηση μόνον όταν ο πορος απαιτείται, παρά αυτόματα κατά την εκκίνηση, δίνεται στην σελίδα fstab#Automount with systemd.

Αυτοπροσάρτηση κατατμήσεων GPT

Σε έναν δίσκο κατατμημένο κατά GPT το πρόγραμμα systemd-gpt-auto-generator(8) θα προσαρτήσει τις κατατμήσεις ακολουθώντας την Προδιαγραφή Εντοπίσημων Κατατμήσεων (Αγγλικά) και έτσι μπορούν να παραλειφθούν από το fstab.

Η αυτοπροσάρτηση κατάτμησης συστήματος τύπου EFI απαιτεί ότι ο εκκινητής θα ορίσει την EFI μεταβλητή LoaderDevicePartUUID. Μόνον το systemd-boot είναι γνωστό ότι κάνει κάτι τέτοιο.

Για να λειτουργήσει η αυτοπροσάρτηση των καταλότγων /var και /var/tmp, το PARTUUID πρέπει να ταιριάζει με τον κώδικα SHA256 HMAC του UUID της κατάτμησης και τον αριθμό ID της συσκευής. Το απαιτούμενο PARTUUID μπορεί να ανακτηθεί με την εντολή:

$ systemd-id128 -u --app-specific=partition-tupe-UUID machine-id

Αντικαταστείστε το partition-type-UUID με την κατάλληλη τιμή του UUID για τον τύπο της κατάτμησης όπως δίνονται από την ιστοσελίδα Discoverable Partitions Specification.

Σημείωση: Η εντολήsystemd-id128(1) διαβάζει την ταυτότητα ID της συσκευής από το /etc/machine-id, που σημαίνει ότι είναι αδύνατον να γνωρίζουμε το απαραίτητο PARTUUID πριν την εγκατάσταση του συστήματος.

Η αυτοπροσάρτηση μιας κατάτμησης μπορεί να απενεργοποιηθεί αλλάζοντας τον τύπο GUID (Αγγλικά) ή θέτοντας το μπιτ ιδιοτήτων 63 της κατάτμησης στην τιμή "να μην γίνεται αυτοπροσάρτηση". Δείτε gdisk#Prevent GPT partition automounting.

systemd-sysvcompat

Πρωταρχικός ρόλος της σουίτας systemd-sysvcompat (απαιτείται από το base) είναι να παρέχει το παραδοσιακό δυαδικό αρχείο του linux, init. Σε συστήματα που ελέγχονται από το systemd, το init είναι ο συμβολικός σύνδεσμος στο εκτελέσιμό του, systemd.

Επιπλέον παρέχει 6 συντομεύσεις ευκολίας στις οποίες οι χρήστες SysVinit ίσως είναι συνηθισμένοι. Οι συντομεύσεις ευκολίας είναι halt(8), poweroff(8), reboot(8), runlevel(8)[dead link 2020-09-13], shutdown(8), και telinit(8)[dead link 2020-09-13]. Κάθε μια από αυτές τις 6 εντολές είναι ένας συμβολικός σύνδεσμος προς το πρόγραμμα systemctl, και ελέγχεται από την συμπεριφορά του systemd. Για τον λόγο αυτό η συζήτηση στο #Διαχείριση ενέργειας αφορά στα halt, poweroff, reboot και shutdown. Η συζήτηση στο #Αντιστοίχιση SysV runlevels και στόχων systemd αφορά στα runlevel και telinit.

Σε συστήματα systemd, αυτές οι μέθοδοι συμβατότητας κατά System V μπορούν να παραλειφθούν με την χρήση παραμέτρων εκκίνησης (Αγγλικά) στο init= (δείτε, για παράδειγμα, [solved] /bin/init is in systemd-sysvcompat ?) και με καθαυτό παραμέτρους εντολών του systemctl.

Συμβουλές και τεχνάσματα

Εκτέλεση υπηρεσιών μετά την ενεργοποίηση του δικτύου

Για να καθυστερήσετε μια υπηρεσία μετά την ενεργοποιηση του δικτύου, προσθέστε στο αρχείο .service τις ακόλουθες εξαρτήσεις:

/etc/systemd/system/foo.service
[Unit]
...
Wants=network-online.target
After=network-online.target
...

Πρέπει επίσης να ενεργοποιηθεί και η υπηρεσία αναμονής δικτύου της συγκεκριμένης εφαρμογής που διαχειρίζεται το δίκτυο ώστε το αρχείο network-online.target να αντιστοιχεί ορθά στην κατάσταση του δικτύου.

  • Αν χρησιμοποιείτε NetworkManager, η υπηρεσία NetworkManager-wait-online.service είναι ενεργοποιημένη μαζί με την NetworkManager.service. Ελέγξτε αν συμβαίνει το ίδιο με την υπηρεσία systemctl is-enabled NetworkManager-wait-online.service. Αν δεν είναι ενεργοποιημένη επανενεργοποιείστε (Αγγλικά) την υπηρεσία NetworkManager.service.
  • Στην περίπτωση του netctl, ενεργοποιείστε (Αγγλικά) την netctl-wait-online.service.
  • Αν χρησιμοποιείτε systemd-networkd, η υπηρεσία systemd-networkd-wait-online.service είναι ενεργοποιημένη μαζί με την systemd-networkd.service. Ελέγξτε με systemctl is-enabled systemd-networkd-wait-online.service.

Για περισσότερο λεπτομερείς εξηγήσεις, δείτε την σελίδα Running services after the network is up στο wiki του systemd.

Εξορισμού ενεργοποίηση εγκατεστημένων μονάδων

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Πώς λειτουργεί αυτό με τις ενεργές μονάδες; (Discuss in Talk:Systemd (Ελληνικά)#)

Το Arch Linux συνοδεύεται από ένα αρχείο /usr/lib/systemd/system-preset/99-default.preset που περιέχει την οδηγία disable *. Αυτή λέει στην εντολή systemctl preset να απενεργοποιήσει εξ ορισμού όλες τις μονάδες ώστε, όταν εγκαθίσταται ένα νέο πακέτο, ο χρήστης να πρέπει να ενεργοποιήσει την μονάδα αυτόματα.

Αν δεν επιθυμείτε μια τέτοια συμπεριφορά, απλώς δημιουργείστε ένα symlink από το αρχείο /etc/systemd/system-preset/99-default.preset προς τον κατάλογο /dev/null ώστε να παρακαμφθεί το αρχείο ρυθμίσεων. Αυτό θα προκαλέσει στην εντολή systemctl preset να ενεργοποιήσει όλες τις μονάδες που εγκαταστάθηκαν-ασχέτως τύπου μονάδας-εκτός και αν καθορίζεται σε άλλο αρχείο κάποιου καταλόγου ρυθμίσεων του systemctl preset. Οι μονάδες χρήστη δεν επηρεάζονται. Για περισσότερες πληροφορίες, δείτε systemd.preset(5).

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

Ασφάλιση τα περιβάλλοντα των εφαρμογών

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

Η ενίσχυση ενός υπαρχοντος αρχείου μονάδας systemd με ασφάλιση εφαρμογής sandboxing απαιτεί ελέγχους δοκιμής-σφάλματος, συνοδευόμενους από γενναία χρήση strace, stderr και καταγραφή σφαλμάτων και εργαλείων εξόδου journalctl. Μπορείτε να βασίσετε τις δοκιμές σας σε ήδη δημοσιευμένους ελέγχους που θα βρείτε σε ανάντη τεκμηρίωση.

Μερικά παραδείγματα εφαρμογής της μεθόδου sandboxing:

  • Η παράμετρος CapabilityBoundingSet καθορίζει μια λίστα επιτρεπόμενων δυνατοτήτων, μπορεί όμως να χρησιμοποιηθεί και για την δημιουργία απαγορευμένων συγκεκριμένων δυνατοτήτων για μια μονάδα.
    • Για παράδειγμα η δυνατότητα CAP_SYS_ADM, η οποία πρέπε να ειναι ένας από τους which should be one of the στόχους για ασφαλές sandboxing: CapabilityBoundingSet=~ CAP_SYS_ADM

Αντιμετώπιση προβλημάτων

Έρευνα των σφαλμάτων systemd

Tango-edit-cut.pngThis section is being considered for removal.Tango-edit-cut.png

Reason: Υπερβολικά μακροσκελής ενότητα αναφορά προς το PEBKAC, πράγμα που δεν θα επανληφθεί ακόμη και από εκείνον που την συνέταξε. Αφήστε μόνον το systemctl --state=failed και μια αναφορά προς το systemd/Journal#Filtering output. (Discuss in Talk:Systemd (Ελληνικά)#)

Ως παράδειγμα, μπορούμε να ερευνήσουμε κάποιο σφάλμα μέσω της υπηρεσίας systemd-modules-load:

1. Ας εντοπίσουμε την υπηρεσία systemd η οποία απέτυχε να εκκινήσει κατά την επανεκκίνηση:

$ systemctl --state=failed
systemd-modules-load.service   loaded failed failed  Load Kernel Modules

Ένας άλλος τρόπος είναι η καταγραφή μηνυμάτων systemd σε πραγματικό χρόνο:

$ journalctl --follow --priority=err

2. Καλώς! Βρήκαμε το πρόβλημα με την βοήθεια της υπηρεσίας systemd-modules-load. Πρέπει να μάθουμε περισσότερα:

$ systemctl status systemd-modules-load
systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
   Active: failed (Result: exit-code) since So 2013-08-25 11:48:13 CEST; 32s ago
     Docs: man:systemd-modules-load.service(8).
           man:modules-load.d(5)
  Process: 15630 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)

Αν το If the ID της διεργασίας δεν υπάρχει στην λίστα, απλώς επανεκκινήστε την αποτυχημένη υπηρεσία με την εντολή systemctl restart systemd-modules-load

3. Έχουμε τώρα την ταυτότητα (ID) της διεργασίας ώστε να ερευνήσουμε σε βάθος το σφάλμα. Πληκτολογήστε την ακόλουθη εντολή με την τρέχουσα ταυτότητα ID της διεργασίας (εδώ: 15630):

$ journalctl _PID=15630
-- Logs begin at Sa 2013-05-25 10:31:12 CEST, end at So 2013-08-25 11:51:17 CEST. --
Aug 25 11:48:13 mypc systemd-modules-load[15630]: Failed to find module 'blacklist usblp'
Aug 25 11:48:13 mypc systemd-modules-load[15630]: Failed to find module 'install usblp /bin/true'

4. Βλέπουμε ότι ο πυρήνας έχει λανθασμένες ρυθμίσεις αρθρωμάτων. Για τον λόγο αυτό εξετάζουμε τις ρυθμίσεις αυτές που βρίσκονται στον κατάλογο /etc/modules-load.d/:

$ ls -Al /etc/modules-load.d/
...
-rw-r--r--   1 root root    79  1. Dez 2012  blacklist.conf
-rw-r--r--   1 root root     1  2. Mär 14:30 encrypt.conf
-rw-r--r--   1 root root     3  5. Dez 2012  printing.conf
-rw-r--r--   1 root root     6 14. Jul 11:01 realtek.conf
-rw-r--r--   1 root root    65  2. Jun 23:01 virtualbox.conf
...

5. Το μήνυμα σφάλματος The Failed to find module '...' ίσως σχετίζεται με λάθος ρυθμίσεις στο αρχείο blacklist.conf. Ας τις απενεργοποιήσουμε εισάγοντας μια # στην αρχη κάθε σειράς από τις επιλογές που εντοπίσαμε στο βήμα 3:

/etc/modules-load.d/blacklist.conf
#blacklist usblp
#install usblp /bin/true

6. Προσπαθήστε, τώρα, να ξεκινήσετε την φόρτωση των αρθρωμάτων systemd-modules-load:

# systemctl start systemd-modules-load

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

Αν όλα εξελιχθούν ομαλά, μπορείτε να επιβεβαιώσετε ότι η υπηρεσία εκκίνησε με επιτυχια χρησιμοποιώντας:

$ systemctl status systemd-modules-load
systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
   Active: active (exited) since So 2013-08-25 12:22:31 CEST; 34s ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
 Process: 19005 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/SUCCESS)
Aug 25 12:22:31 mypc systemd[1]: Started Load Kernel Modules.

Το πρόβλημα που υπογραμμίσαμε εδώ είναι η λανθασμένη θέση του αρχείου blacklist.conf. Δείτε modules-load.d(5) και kernel module#Blacklisting.

Διάγνωση προβλημάτων εκκίνησης του συστήματος

Το systemd έχει πολλές επιλογές διάγνωσης προβλημάτων κατά την διαδικασια εκκίνησης. Για γενικότερες οδηγίες και επιλογές σύλληψης μηνυμάτων εκκίνησης πριν το systemd αναλάβει την διαδικασία εκκίνησης συστήματος (Αγγλικά), δείτε την σελίδα αποσφαλμάτωση εκκίνησης συστήματος (Αγγλικά). Επίσης, δείτε την τεκμηρίωση αποσφαλμάτωσης του systemd (Αγγλικά).

Διάγνωση υπηρεσίας

Αν κάποια υπηρεσία systemd δεν λειτουργεί όπως πρέπει ή αν θέλετε περισσότερες πληροφορίες για ό,τι συμβαίνει, ορίστε στην μεταβλητή περιβάλλοντος (Αγγλικά) SYSTEMD_LOG_LEVEL την τιμή debug. Για παράδειγμα, για να εκτελέσετε την δαίμοναsystemd-networkd σε περιβάλλον αποσφαλμάτωσης:

Δημιουργείστε ένα περιστασιακό αρχείο για την υπηρεσία, προσθέτοντας δυο γραμμές:

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Ή, ισοδύναμα, καθορίστε χειροκίνητα την μεταβλητή περιβάλλοντος:

# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd

Επανεκκινήστε (Αγγλικά) την υπηρεσία systemd-networkd και με την επιλογή -f/--follow παρακολουθήστε το journal της υπηρεσίας.

Ο τερματισμός/επανεκκίνηση παίρνουν πάρα πολύ χρόνο

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

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

Αν η εντολή journalctl -u foounit δεν εμφανίζει αποτέλεσμα για κάποια βραχύβια υπηρεσία, κοιτάξτε το PID της. Για παράδειγμα, αν αποτύχει η υπηρεσίαsystemd-modules-load.service και η εντολή systemctl status systemd-modules-load δείχνει ότι η υπηρεσία εκτελέστηκε με PID 123, τότε ίσως μπορείτε δείτε κάποιο αποτέλεσμα εξόδου στο journal για το PID αυτό, δηλαδή, journalctl -b _PID=123. Τα πεδία μεταδεδομένων για το journal, όπως _SYSTEMD_UNIT και _COMM, συμπληρώνονται ασύγχρονα και εξαρτώνται από τον κατάλογο /proc για την υπαρχουσα διεργσία. Η επιδιόρθωση αυτής της δυσλειτουργίας απαιτεί την προσαρμογή το πυρήνα ώστε να παρέχει τα δεδομένα αυτά μέσω μιας σύνδεσης υποδοχής socket, παρόμοιας με SCM_CREDENTIALS. Εν ολίγοις, πρόκειται για σφάλμα (Αγγλικά). Να ξέρετε ότι οι υπηρεσίες που αποτυγχάνουν άμεσα δεν εμφανίζουν τίποτα στο journal, σύμφωνα και με τον σχεδιασμό του systemd.

Η διάρκεια εκκίνησης συστήματος αυξάνει με τον χρόνο

Χρησιμοποιώντας systemd-analyze μερικοί χρήστες έχουν παρατηρήσει ότι η διάρκεια του χρόνου εκκίνησης της συσκευής έχει αυξηθεί σημαντικά σε σχέση με πριν. Η εντολή systemd-analyze blame αναφέρει ότι ο NetworkManager παίρνει ασυνήθιστα αυξημένο χρόνο για να ξεκινήσει.

Για μερικούς χρήστες το πρόβλημα είναι ότι ο κατάλογος /var/log/journal γίνεται πολύ μεγάλος. Κάτι τέτοιο μπορεί να έχει συνέπειες για την απόδοση του συστήματος, όπως και για το systemctl status ή το journalctl. Η λύση είναι να διαγραφούν όλα τα αρχεία του καταλόγου (δημιουργώντας αντίγραφο ασφαλείας, έστω και προσωρινό) και έπειτα ορίζοντας ένα όριο για το αρχείο του journal, όπως περιγράφεται στην σελίδα Systemd/Journal#Journal size limit.

Η υπηρεσια systemd-tmpfiles-setup.service αποτυγχάει να ξεκινήσει κατά την εκκινηση

Ξεκινώντας από το systemd 219, το αρχείο /usr/lib/tmpfiles.d/systemd.conf καθορίζει τις ιδιότητες ACL για τους καταλόγους που βρίσκονται κάτω από τον /var/log/journal και, γι' αυτό, απαιτείται ενεργοποίηση της υποστηριξης ACL για το σύστημα αρχείου στο οποιο θα εγκατασταθεί το journal.

Για οδηγίες ενεργοποίησης του ACL σε σύστημα αρχείων που φιλοξενήσει τον κατάλογο /var/log/journal, δείτε την σελίδα Access Control Lists#Enable ACL.

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

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

# systemctl mask emergency.service
# systemctl mask emergency.target

Δείτε επίσης