systemd (Ελληνικά)
Σχετικά άρθρα
- systemd/User
- systemd/Timers
- systemd/Journal
- systemd FAQ
- init
- Daemons
- udev
- Improving performance/Boot process
- Για να ελέγξετε το systemd σε μια απομακρυσμένη συσκευή μπορείτε να χρησιμοποιήσετε όλες τις ακόλουθες εντολές systemctl μαζί με τον διακόπτη
-H user@host. Για να συνδεθεί στο απομακρυσμένο systemd η εντολή θα χρησιοποιήσει το SSH. - Αν δεν καθορίσετε το πρόθεμα το systemctl θα υποθέσει το .service. Για παράδειγμα, τα και είναι ισοδύναμα.
- Τα σημεία προσάρτησης θα μεταφραστούν αυτόματα στην ανάλογη μονάδα .mount. Για παράδειγμα, προσδιορίζοντας είναι ισοδύναμο του .
- Παρόμοια με τα σημεία προσάρτησης, οι συσκευές μεταφράζονται αυτόματα στην ανάλογη μονάδα .device, γι' αυτό ο προσδιορισμός είναι ισοδυναμος του
dev-sda2.device. - : μονάδες που παρέχονται από τα εγκατεστημένα πακέτα
- : μονάδες εγκατεστημένες από τον διαχειριστή του συστήματος
- (default): το systemd τις θεωρεί ως υπηρεσίες που πρέπει να εκκινήσουν άμεσα. Η διαδικασία δεν πρέπει να διακλαδωθεί. Μην χρησιμοποιείτε αυτό τον τύπο αν άλλες υπηρεσίες αιτούνται την υπηρεσία αυτή, εκτός και αν ενεργοποιείται από κάποια υποδοχή.
- : το systemd θεωρεί ότι η υπηρεσία έχει εκκινήσει όταν αυτή διακλαδίζεται και η γονική υπηρεσία έχει τερματίσει. Χρησιμοποιείστε αυτό τον τύπο για τους κλασικούς δαίμονες, εκτός και αν γνωρίζεται ότι δεν είναι αναγκαίος. Επίσης πρέπει να προσδιορίσεται και το ώστε το systemd να μπορεί να παρακολουθεί την κύρια διεργασία.
- : αυτός ο τύπος είναι χρήσιμος για σενάρια τα οποία εκτελούν μια και μοναδική εργασία και μετά τερμτίζουν. Επίσης, ίσως πρέπει να ρυθμίσετε
RemainAfterExit=yesώστε το systemd να θεωρεί την υπηρεσία ως ενεργή μετά την έξοδο της διεργασίας. - : ταυτόσημος τύπος με τον , αλλά υπό τον όρο ότι ο δαίμονας θα στείλει ένα σήμα προς το systemd όταν είναι έτοιμος. Το reference implementation αυτής της ειδοποίησης παρέχεται από το αρχείο libsystemd-daemon.so.
- : η υπηρεσία θεωρείται έτοιμη όταν στο σύστημα διαύλου του DBus εμφανίζεται το καθορισμένο .
- : το systemd θα καθυστερήσει την εκτέλεση του binary αρχείου της υπηρεσίας έως ότου αποσταλούν όλες οι εργασίες. Κατα τα λοιπά η υπηρεσία λειτουργεί εν πολλοίς όπως η .
- (που χονδρικά αντιστοιχεί στο παλαιό runlevel 3),
- (που χονδρικά αντιστοιχει στο παλαιό runlevel 1).
- Kernel parameter shown above
- Symlink of
- Symlink of
- Αν χρησιμοποιείτε NetworkManager, η υπηρεσία είναι ενεργοποιημένη μαζί με την . Ελέγξτε αν συμβαίνει το ίδιο με την υπηρεσία . Αν δεν είναι ενεργοποιημένη επανενεργοποιείστε (Αγγλικά) την υπηρεσία .
- Στην περίπτωση του netctl, ενεργοποιείστε (Αγγλικά) την .
- Αν χρησιμοποιείτε systemd-networkd, η υπηρεσία είναι ενεργοποιημένη μαζί με την . Ελέγξτε με .
- Η παράμετρος καθορίζει μια λίστα επιτρεπόμενων δυνατοτήτων, μπορεί όμως να χρησιμοποιηθεί και για την δημιουργία απαγορευμένων συγκεκριμένων δυνατοτήτων για μια μονάδα.
- Για παράδειγμα η δυνατότητα , η οποία πρέπε να ειναι ένας από τους which should be one of the στόχους για ασφαλές sandboxing:
CapabilityBoundingSet=~ CAP_SYS_ADM
- Για παράδειγμα η δυνατότητα , η οποία πρέπε να ειναι ένας από τους which should be one of the στόχους για ασφαλές sandboxing:
- Wikipedia:systemd
- systemd Official web site
- Manual pages
- Άλλες διανοές linux
- Lennart's blog story, update 1, update 2, update 3, summary
- systemd for Administrators (PDF)
- How To Use Systemctl to Manage Systemd Services and Units
- Session management with systemd-logind
- Emacs Syntax highlighting for Systemd files
- Two part εισαγωγικο άρθρο του περιοδικού The H Open.
Από τον ιστότοπο του έργου:
systemd είναι μια σουίτα βασικών μονάδων δόμησης για το σύστημα Linux. Παρέχει έναν διαχειριστή συστήματος και υπηρεσιών ο οποίος εκτελείται ως PID 1 και εκκινεί το υπόλοιπο σύστημα. Το systemd διαθέτει ικανότητες επιθετικής παράλληλης επεξεργασίας, χρησιμοποιεί την ενεργοποίηση υποδοχέα socket και του D-Bus (αγγλικά) για την εκκίνηση υπηρεσιών, προσφέρει κατά παραγγελία εκκίνηση προγραμμάτων-δαιμόνων, παρακολουθεί τις διεργασίες χρησιμοποιώντας τις ομάδες ελέγχου (αγγλικά) Linux, διατηρεί τα σημεία προσάρτησης και αυτόματης προσάρτησης και εφαρμόζει μια περίπλοκη λογική συναλλακτικής υπηρεσίας ελέγχου βασισμένης σε εξαρτήσεις. Το systemd υποστηρίζει τα σενάρια init SysV και LSB και λειτουργεί ως αντικατάσταση του sysvinit. Άλλα μέρη του περιλαμβάνουν έναν δαίμονα καταγραφών, εργαλεία για τον έλεγχο βασικών ρυθμίσεων συστήματος όπως του hostname, της ημερομηνίας, των συνόλων τοπικής προσαρμογής locale, διατηρεί μια λίστα των συνδεδεμένων χρηστών, εκτελεί περιέκτες και εικονικές μηχανές, λογαριασμούς συστήματος, καταλόγους χρονοεκτέλεσης (runtime) και ρυθμίσεις, δαίμονες για την διαχείριση απλών ρυθμίσεων δικτύου, χρονικό συγχρονισμό δικτύου, προώθηση καταγραφών και επίλυση ονομάτων (name resolution).
Βασική χρήση του systemctl
Η κυριότερη εντολή που χρησιμοποιείται για την ενδοσκόπηση και έλεγχο του systemd είναι η systemctl. Κάποιες από τις χρήσεις της εξετάζουν την κατάσταση του συστήματος και διαχειρίζονται το σύστημα και τις υπηρεσίες. Για περισσότερες λεπτομέρειες, δες .
Οι χρήστες Plasma μπορούν να εγκαταστήσουν το systemd-kcmAUR ως γραφικό περιβάλλον για το systemctl. Μετά την εγκατάστασή του το άρθρωμα θα προστεθεί στο System administration.
Αναλύοντας την κατάσταση συστήματος
Εμφανίστε την κατάσταση συστήματος χρησιμοποιώντας: Show system status using:
$ systemctl statusΕμφανίστε την Λίστα εκτελούμενων μονάδων:
$ systemctlή:
$ systemctl list-unitsΕμφανίστε την Λίστα αποτυχημένων μονάδων:
$ systemctl --failedΤα διαθέσιμα αρχεία μονάδων μπορείτε να τα δείτε στους καταλόγους και (ο τελευταίος αυτός έχει προτεραιόητα). Εμφανίστε την Λίστα εγκατεστημένων μονάδων με:
$ systemctl list-unit-filesΕμφανίστε τα cgroup slice, την μνήμη και τον γονέα ενός PID:
$ systemctl status pidΧρησιμοποώντας τις μονάδες
Μονάδες μπορούν να είναι, για παράδειγμα, υπηρεσίες (.service), σημεία προσάρτησης (.mount), συσκευές (.device) ή υποδοχές sockets (.socket).
Γενικά, όταν χρησιμοποιείτε το systemctl,πρέπει να προσδιορίσετε το πλήρες όνομα του αρχείου της μονάδας, συμπεριλαμβάνοντας το πρόθεμά της, για παράδειγμα sshd.socket. Υπάρχουν, εντούτοις, μερικές συντετμημένες φόρμες όταν προσδιορίζεται την μονάδα στις εντολές systemctl που ακολουθουν:
Για λεπτομέρειες, δείτε το εγχειρίδιο .
Εκκίνηση μιας μονάδας αμέσως:
# 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 , αναζητώντας νέες ή αλλαγμένες μονάδες:
επαναφορτωση.Διαχείριση ενέργειας
Για την διαχείριση ενέργειας ως μη προνομιούχος χρήστης, είναι απαραίτητο το 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. Τα αρχεία μονάδων φορτώνονται από πολλαπλές τοποθεσίες (για να δείτε την πλήρη λίστα τους, εκτελέστε ), οι κυριότερες όμως είναι (ταξινομημένες κατά αύξουσα προτεραιότητα):
Για παραδείγματα, δείτε τις μονάδες που εγκατέστησαν τα πακέτα σας, καθώς και την ιστοσελίδα annotated example section του εγχειριδίου .
Ο χειρισμός των εξαρτήσεων
Με το systemd οι εξαρτήσεις επιλύονται σχεδιάζοντας σωστά τα αρχεία των μονάδων. Η τυπικότερη περίπτωση είναι όταν μια μονάδα Ααπαιτεί να εκτελεστεί μια άλλη μονάδα Β πριν η εκκινηθεί η Α. Σε μια τέτοια περίπτωση προσθέστε και στην ενότητα της A. Αν η εξάρτηση είναι προεραιτική προσθέστε, αντίστοιχα, Wants=B και . Σημειώστε ότι, τα και δεν σημαίνουν , που σημαίνει ότι αν δεν προσδιοριστεί το οι δυο μονάδες θα εκκινήσουν παράλληλα.
Οι εξαρτήσεις συνήθως τίθενται για υπηρεσίες και όχι για #Στόχοι (Targets). Για παράδειγμα, το αρχείο network.target συλλαμβάνεται από οποιαδήποτε υπηρεσία ρυθμίζει τις διεπαφές του δικτύου σας, για τον λόγο αυτό η εκτέλεση της δικής σας προσαρμοσμένης μονάδας είναι αρκετή αφού το network.target θα ξεκινήσει όπως και να έχει.
Τύποι υπηρεσιών
Υπάρχουν πολλοί διαφορετικοί τύποι εκκίνησης που πρέπει να λάβεται υπ' όψιν όταν γράφετε ένα δικό σας αρχείο υπηρεσίας. Αυτό ορίζεται με την παράμετρο της ενότητας :
Για λεπτομερέστερη επεξήγηση των τιμών της παραμέτρου δείτε την σελίδα εγχειριδίου systemd.service(5).
Επεξεργασία παρεχομένων μονάδων
Τα αρχεία μονάδων που παρέχουν τα πακέτα δεν πρέπει να επεξεργάζονται απ' ευθείας για να αποφευχθούν διενέξεις με το pacman. Υπάρχουν δυο ασφαλείς τρόποι για να τροποποιήσετε μια μονάδα χωρίς να πειράξετε το αρχικό αρχείο: δημιουργήστε το αρχείο για μια νέα υπηρεσία η οποία παρακάμπτει την αρχική μονάδα ή δημουργείστε ένα περιστασικά αποσπάσματα κώδικα (snippets) τα οποια εφαρμόζονται πριν την αρχική μονάδα. Σε αμφότερες τις μεθόδους πρέπει να επαναφορτώσετε την μονάδα ώστε να εφαρμοστούν οι αλαγές. Αυτό μπορεί να γίνει είτε με την επεξεργασία της μονάδας με systemctl edit (που επαναφορτώνει αυτόματα την μονάδα) είτε επαναφορτώνοντας όλες τις μονάδες με:
Αντικαταστίσημα αρχεία μονάδων
Για να αντικαταστήσετε το αρχείο μονάδας , δημιουργείστε το αρχείο /etc/systemd/system/μονάδα και επανενεργοποιείστε την μονάδα ώστε να ενημερωθούν τα symlinks:
Εναλλακτικά, εκτελέστε:
# systemctl edit --full μονάδαΗ εντολή αυτή θα ανοίξει το αρχείο /etc/systemd/system/μονάδα στον επεξεργαστή κειμένου σας (αντιγράφοντας την εγκατεστημένη έκδοσή του αν αυτή δεν υπάρχει) και θα το επαναφορτώσει αυτόματα μόλις ολοκληρώσετε την επεξεργασία.
Περιστασιακά αρχεία
Για να δημιουργήσετε περιστασιακά αρχεία για το αρχείο μονάδας , δημιουργείστε τον κατάλογο και αποθηκεύστε εκεί αρχαία τύπου .conf ώστε οι επιλογές ρύθμισης να παρακαμφθούν ή να προστεθούν νέες. Το systemd θα επεξεργαστεί και θα εφαρμόσει τα αρχεία αυτά "πάνω" από την αρχική μονάδα.
Ο ευκολοτερος τρόπος για να το κάετε αυτό είναι να εκτελέσετε:
# systemctl edit μονάδαΗ ενέργεια αυτή ανοίγει το αρχείο στον επεξεργαστή κειμένου (δημιουργώντας το, αν χρειάζεται) και επαναφορτώνει αυτόματα την μονάδα όταν ολοκληρώσετε την επεξεργασία.
Επαναφορά στην έκδοση του προμηθευτή
Για να επαναφέρετε τις όποιες αλλαγές που εγιναν σε μια μονάδα μέσω του systemctl edit, εκτελέστε:
Παραδείγματα
Για παράδειγμα, αν απλώς θέλετε να προσθέσετε μια επιπλέον εξάρτηση σε κάποια μονάδα, μπορείτε να δημιουργήσετε το παρακάτω αρχείο:
Ένα άλλο παράδειγμα: για να αντικαταστήσετε την οδηγία για κάποια μονάδα που δεν είναι του τύπου , δημιουργήστε το ακόλουθο αρχείο:
Παρατηρείστε ότι η πρέπει πρώτα να δωθεί χωρίς τιμή . Το ίδιο ισχύει και για κάθε στοιχείο που μπορεί να καθοριστεί πολλές φορές, π.χ. OnCalendar για τους χρονοδιακόπτες.
Ένα ακόμη παράδειγμα αυτόματης επανεκκίνησης κάποιας υπηρεσίας:
Στόχοι (Targets)
Το systemd χρησιμοποιεί στόχους για να ομαδοποιεί τις μονάδες μέσω εξαρτήσεων και ως πρότυπα σηεία συγχρονισμού. Εξυπηρετούν παρόμοιους στόχους με τα runlevels αλλά λειτουργούν λίγο διαφορετικά. Κάθε στόχος παίρνει ένα όνομα αντί να αριθμείται και σκοπό έχει να υπηρετήσει ένα συγκεκριμένο σκοπό με δυνατότητα να έχουμε πολλαπλούς στόχους ενεργούς, ταυτόχρονα. Κάποιοι στόχοι εφαρμόζονται απορροφώντας όλες τις υπηρεσίας κάποιου άλλου στόχου και προσθέτοτας σε αυτόν επιπλέον υπηρεσίες. Υπάρχουν στόχοι του systemd που μιμούνται συνήθη runlevels του SystemVinit και έτσι μπορείτε να ελέγξετε τον στόχο χρησιμποιώντας την γνωστή εντολή .
Προβολή τρεχόντων στόχων
Πρέπει να εκτελείτε την παρακάτω γραμμή, αντί της :
$ systemctl list-units --type=targetΔημιουργία προσαρμοσμένων στόχων
Τα runlevels που εχουν καθορισμένη σημασία στο sysvinit (i.e., 0, 1, 3, 5, and 6) έχουν αντιστοίχιση 1:1 με συγκεκριμένο στόχο του systemd. Δυστυχώς, δεν υπάρχει κάποιος αξιόλογος τρόπος για να κάνουμε το ίδιο και στα runlevels του χρήστη, όπως τα 2 και 4. Αν χρησιμοποιήσετε τους τρόπους αυτούς, συνίσταται να δημιουργήσετε έναν νέο στόχο με που θα έχει ως βάση ένα από τα υπαρχοντα runlevels (σαν παράδειγμα, μπορείτε να ρίξετε μια ματιά στο αρχείο /usr/lib/systemd/system/graphical.target), να δημιουργήσετε ένα κατάλογο και μετά να κάνετε symlink τις επιπρόσθετες υπηρεσίες που θέλετε να ενεργοποιήσετε από τον κατάλογο .
Αντιστοίχιση 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Η ενέργεια αυτή θα αλλάξει μόνον τον τρέχοντα στόχο και δεν έχει κανένα αποτέλεσμα στην επόμενη επανεκκίνηση. Είναι ισοδύναμη με εντολές όπως ή του Sysvinit.
Αλλαγή του αρχικού στόχου εκκίνησης
Ο εξορισμού στόχος είναι ο ο οποίος γίνεται symlink με τον graphical.target. Χονδρικά, αυτό αντιστοιχεί με το παλαιό runlevel 5.
Για να διαπιστώσετε τον τρέχοντα στόχο μέσω systemctl:
$ systemctl get-defaultΓια να αλλάξετε τον εξορισμού στόχο εκκίνησης, αλλάξετε το symlink του symlink. Μέσω systemctl:
Εναλλακτικά, προσθέστε μια από τις ακόλουθες παραμέτρους kernel στον εκκινητή σας (bootloader):
Η σειρά των εξορισμού στόχων
Το systemd επιλέγει τον σύμφωνα με την ακόλουθη σειρά:
Προσωρινά αρχεία
Η σουίτα "systemd-tmpfiles δημιουργεί, διαγράφει και εκκαθαρίζει ασαφή (volatile) και προσωρινά αρχεία και καταλόγους." Για να εντοπίσει τις ενέργειες που πρέπει να εκτελέσει, διαβάζει τα αρχεία ρυθμίσεων στους καταλόγους και . Προηγούνται τα αρχεία ρυθμίσεων του πρώτου ως άνω καταλόγου έναντι εκείνων του δεύτερου.
Συνήθως τα αρχεία ρυθμίσεων παρέχονται μαζί με τα αρχεία υπηρεσιών και παίρνουν ονόματα του στυλ /usr/lib/tmpfiles.d/πρόγραμμα.conf. Το πρόγραμμα-δαίμονας Samba, για παράδειγμα, απαιτεί την ύπαρξη του καταλόγου και σωστών αδειών. Για τον λόγο αυτό το πακέτο συνοδεύεται από την εξής ρύθμιση:
Τα αρχεία ρυθμίσεων μπορούν επίσης να χρησιμοποιηθούν για να περάσουμε τιμές σε συγκεκριμένα αρχεία, κατά την εκκίνηση. Για παράδειγμα, αν χρησιμοποιήσατε το αρχείο για να απενεργοποιήσετε την αφύπνιση από συσκευές USB μέσω , μπορείτε να χρηιμοποιήσετε το ακόλουθο tmpfile αντ' αυτού:
/etc/tmpfiles.d/disable-usb-wake.conf
# Path Mode UID GID Age Argument w /proc/acpi/wakeup - - - - USBE
Για περισσότερες λεπτομέρειες δείτε τις σελίδες εγχειριδιου και .
Χρονοδιακόπτες
Χρονοδιακόπτης είναι ένα αρχείο ρύθμισης μονάδας του οποίου το όνομα τελειώνει σε .timer και περιέχει πληροφορίες για τον χρονοδιακόπτη που ελέγχεται και επιτηρείται από το systemd. Δείτε την σελίδα systemd/Timers (Αγγλικά).
Προσάρτηση
Το systemd ευθύνεται για την προσάρτηση των κατατμήσεων και των συστημάτων αρχείων που προσδιορίζονται στο αρχείο . Το πρόγραμμα μεταφράζει όλες τις εγγραφές που υπάρχουν στο αρχείο σε μονάδες systemd. Αυτό γίνεται την στιγμή της εκκίνησης και κάθε φορά που επαναφορτώνονται οι ρυθμίσεις του διαχειριστή συστήματος.
Το systemd επεκτείνει τις συνήθεις δυνατότητες του fstab και προσφέρει επιπλέον επιλογές προσάρτησης. Οι επιλογές αυτές επηρεάζουν τις εξαρτήσεις του σημείου προσάρτησης. Μπορούν, για παράδειγμα, να εξασφαλίσουν ότι η προσάρτηση θα εκτελεστεί μόνον όταν το δίκτυο είναι ενεργό ή μόνο όταν προσαρτηθεί μια άλλη κατάτμηση. Η πλήρης λίστα συγκεκριμένων επιλογών προσάρτησης του systemd, που συνηθως έχουν προθεμα αναλύεται στο εγχειρίδιο .
Ένα παράδειγμα αυτών των επιλογών προσάρτησης όσον αφορά στο automounting, που σημαίνει προσάρτηση μόνον όταν ο πορος απαιτείται, παρά αυτόματα κατά την εκκίνηση, δίνεται στην σελίδα fstab#Automount with systemd.
Αυτοπροσάρτηση κατατμήσεων GPT
Σε έναν δίσκο κατατμημένο κατά GPT το πρόγραμμα θα προσαρτήσει τις κατατμήσεις ακολουθώντας την Προδιαγραφή Εντοπίσημων Κατατμήσεων (Αγγλικά) και έτσι μπορούν να παραλειφθούν από το fstab.
Η αυτοπροσάρτηση κατάτμησης συστήματος τύπου EFI απαιτεί ότι ο εκκινητής θα ορίσει την EFI μεταβλητή LoaderDevicePartUUID. Μόνον το systemd-boot είναι γνωστό ότι κάνει κάτι τέτοιο.
Για να λειτουργήσει η αυτοπροσάρτηση των καταλότγων και , το PARTUUID πρέπει να ταιριάζει με τον κώδικα SHA256 HMAC του UUID της κατάτμησης και τον αριθμό ID της συσκευής. Το απαιτούμενο PARTUUID μπορεί να ανακτηθεί με την εντολή:
$ systemd-id128 -u --app-specific=partition-tupe-UUID machine-idΑντικαταστείστε το με την κατάλληλη τιμή του UUID για τον τύπο της κατάτμησης όπως δίνονται από την ιστοσελίδα Discoverable Partitions Specification.
/etc/machine-id, που σημαίνει ότι είναι αδύνατον να γνωρίζουμε το απαραίτητο PARTUUID πριν την εγκατάσταση του συστήματος.Η αυτοπροσάρτηση μιας κατάτμησης μπορεί να απενεργοποιηθεί αλλάζοντας τον τύπο GUID (Αγγλικά) ή θέτοντας το μπιτ ιδιοτήτων 63 της κατάτμησης στην τιμή "να μην γίνεται αυτοπροσάρτηση". Δείτε gdisk#Prevent GPT partition automounting.
systemd-sysvcompat
Πρωταρχικός ρόλος της σουίτας (απαιτείται από το ) είναι να παρέχει το παραδοσιακό δυαδικό αρχείο του linux, init. Σε συστήματα που ελέγχονται από το systemd, το είναι ο συμβολικός σύνδεσμος στο εκτελέσιμό του, .
Επιπλέον παρέχει 6 συντομεύσεις ευκολίας στις οποίες οι χρήστες SysVinit ίσως είναι συνηθισμένοι. Οι συντομεύσεις ευκολίας είναι , , , [dead link 2020-09-13], , και [dead link 2020-09-13]. Κάθε μια από αυτές τις 6 εντολές είναι ένας συμβολικός σύνδεσμος προς το πρόγραμμα , και ελέγχεται από την συμπεριφορά του systemd. Για τον λόγο αυτό η συζήτηση στο #Διαχείριση ενέργειας αφορά στα , , και shutdown. Η συζήτηση στο #Αντιστοίχιση SysV runlevels και στόχων systemd αφορά στα και .
Σε συστήματα systemd, αυτές οι μέθοδοι συμβατότητας κατά System V μπορούν να παραλειφθούν με την χρήση παραμέτρων εκκίνησης (Αγγλικά) στο (δείτε, για παράδειγμα, [solved] /bin/init is in systemd-sysvcompat ?) και με καθαυτό παραμέτρους εντολών του .
Συμβουλές και τεχνάσματα
Εκτέλεση υπηρεσιών μετά την ενεργοποίηση του δικτύου
Για να καθυστερήσετε μια υπηρεσία μετά την ενεργοποιηση του δικτύου, προσθέστε στο αρχείο .service τις ακόλουθες εξαρτήσεις:
Πρέπει επίσης να ενεργοποιηθεί και η υπηρεσία αναμονής δικτύου της συγκεκριμένης εφαρμογής που διαχειρίζεται το δίκτυο ώστε το αρχείο network-online.target να αντιστοιχεί ορθά στην κατάσταση του δικτύου.
Για περισσότερο λεπτομερείς εξηγήσεις, δείτε την σελίδα Running services after the network is up στο wiki του systemd.
Εξορισμού ενεργοποίηση εγκατεστημένων μονάδων
Το Arch Linux συνοδεύεται από ένα αρχείο που περιέχει την οδηγία . Αυτή λέει στην εντολή systemctl preset να απενεργοποιήσει εξ ορισμού όλες τις μονάδες ώστε, όταν εγκαθίσταται ένα νέο πακέτο, ο χρήστης να πρέπει να ενεργοποιήσει την μονάδα αυτόματα.
Αν δεν επιθυμείτε μια τέτοια συμπεριφορά, απλώς δημιουργείστε ένα symlink από το αρχείο προς τον κατάλογο ώστε να παρακαμφθεί το αρχείο ρυθμίσεων. Αυτό θα προκαλέσει στην εντολή systemctl preset να ενεργοποιήσει όλες τις μονάδες που εγκαταστάθηκαν-ασχέτως τύπου μονάδας-εκτός και αν καθορίζεται σε άλλο αρχείο κάποιου καταλόγου ρυθμίσεων του systemctl preset. Οι μονάδες χρήστη δεν επηρεάζονται. Για περισσότερες πληροφορίες, δείτε .
systemd.preset.Ασφάλιση τα περιβάλλοντα των εφαρμογών
Ένα αρχείο μονάδας μπορεί να δημιουργηθεί ως περιβάλλον ασφαλείας (sanbox) ώστε οι εφαρμογές και οι διεργασίες τους να απομονωθούν μέσα σε ένα στεγανό περιβάλλον. Το systemd αξιοποιεί τα namespaces (Αγγλικά), την μαύρη/λευκή λίστα Δυνατοτήτων (Αγγλικά), και τα control groups (Αγγλικά) για να ασφαλίσει τις διεργασίες μέσω μιας εκτεταμένης διαρυθμισης εκτελεστικού περιβάλλοντος (Αγγλικά).
Η ενίσχυση ενός υπαρχοντος αρχείου μονάδας systemd με ασφάλιση εφαρμογής sandboxing απαιτεί ελέγχους δοκιμής-σφάλματος, συνοδευόμενους από γενναία χρήση , stderr και καταγραφή σφαλμάτων και εργαλείων εξόδου journalctl. Μπορείτε να βασίσετε τις δοκιμές σας σε ήδη δημοσιευμένους ελέγχους που θα βρείτε σε ανάντη τεκμηρίωση.
Μερικά παραδείγματα εφαρμογής της μεθόδου sandboxing:
Αντιμετώπιση προβλημάτων
Έρευνα των σφαλμάτων systemd
Ως παράδειγμα, μπορούμε να ερευνήσουμε κάποιο σφάλμα μέσω της υπηρεσίας :
1. Ας εντοπίσουμε την υπηρεσία systemd η οποία απέτυχε να εκκινήσει κατά την επανεκκίνηση:
Ένας άλλος τρόπος είναι η καταγραφή μηνυμάτων systemd σε πραγματικό χρόνο:
$ journalctl --follow --priority=err2. Καλώς! Βρήκαμε το πρόβλημα με την βοήθεια της υπηρεσίας . Πρέπει να μάθουμε περισσότερα:
Αν το If the δεν υπάρχει στην λίστα, απλώς επανεκκινήστε την αποτυχημένη υπηρεσία με την εντολή
3. Έχουμε τώρα την ταυτότητα (ID) της διεργασίας ώστε να ερευνήσουμε σε βάθος το σφάλμα. Πληκτολογήστε την ακόλουθη εντολή με την τρέχουσα ταυτότητα ID της διεργασίας (εδώ: 15630):
4. Βλέπουμε ότι ο πυρήνας έχει λανθασμένες ρυθμίσεις αρθρωμάτων. Για τον λόγο αυτό εξετάζουμε τις ρυθμίσεις αυτές που βρίσκονται στον κατάλογο :
5. Το μήνυμα σφάλματος The ίσως σχετίζεται με λάθος ρυθμίσεις στο αρχείο . Ας τις απενεργοποιήσουμε εισάγοντας μια # στην αρχη κάθε σειράς από τις επιλογές που εντοπίσαμε στο βήμα 3:
/etc/modules-load.d/blacklist.conf
'''#'''blacklist usblp '''#'''install usblp /bin/true
6. Προσπαθήστε, τώρα, να ξεκινήσετε την φόρτωση των αρθρωμάτων :
# systemctl start systemd-modules-loadΕφόσον η διαδικασία είναι επιτυχής, η εντολή θα ολοκληρωθεί χωρίς άλλα αιτήματα. Αν δείτε κάποιο σφάλμα, επιστρέψτε στο βήμα 3 και χρησιμοποιήστε το νέο PID για να επιλύσετε τα υπολοιπα σφάλματα.
Αν όλα εξελιχθούν ομαλά, μπορείτε να επιβεβαιώσετε ότι η υπηρεσία εκκίνησε με επιτυχια χρησιμοποιώντας:
Το πρόβλημα που υπογραμμίσαμε εδώ είναι η λανθασμένη θέση του αρχείου . Δείτε και kernel module#Blacklisting.
Διάγνωση προβλημάτων εκκίνησης του συστήματος
Το systemd έχει πολλές επιλογές διάγνωσης προβλημάτων κατά την διαδικασια εκκίνησης. Για γενικότερες οδηγίες και επιλογές σύλληψης μηνυμάτων εκκίνησης πριν το systemd αναλάβει την διαδικασία εκκίνησης συστήματος (Αγγλικά), δείτε την σελίδα αποσφαλμάτωση εκκίνησης συστήματος (Αγγλικά). Επίσης, δείτε την τεκμηρίωση αποσφαλμάτωσης του systemd (Αγγλικά).
Διάγνωση υπηρεσίας
Αν κάποια υπηρεσία systemd δεν λειτουργεί όπως πρέπει ή αν θέλετε περισσότερες πληροφορίες για ό,τι συμβαίνει, ορίστε στην μεταβλητή περιβάλλοντος (Αγγλικά) την τιμή . Για παράδειγμα, για να εκτελέσετε την δαίμοναsystemd-networkd σε περιβάλλον αποσφαλμάτωσης:
Δημιουργείστε ένα περιστασιακό αρχείο για την υπηρεσία, προσθέτοντας δυο γραμμές:
[Service] Environment=SYSTEMD_LOG_LEVEL=debugΉ, ισοδύναμα, καθορίστε χειροκίνητα την μεταβλητή περιβάλλοντος:
# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkdΕπανεκκινήστε (Αγγλικά) την υπηρεσία systemd-networkd και με την επιλογή / παρακολουθήστε το journal της υπηρεσίας.
Ο τερματισμός/επανεκκίνηση παίρνουν πάρα πολύ χρόνο
Αν η διαδικασία τερματισμού διαρκεί πάρα πολύ χρόνο (ή αν δείχνει να έχει «παγώσει») το πιθανότερο είναι να ευθύνεται κάποια υπηρεσία που δεν ολοκληρώθηκε. Το systed περιμένει για κάποιον χρόνο την έξοδο κάθε υπηρεσίας, πριν επιχειρήσει να την «σκοτώσει». Για να διαπιστώσετε αν επηρεάζεστε, δείτε αυτό το άρθρο (Αγγλικά).
Οι βραχύβιες διεργασίες δεν δείχνουν να καταγράφουν οποιοδήποτε αποτέλεσμα εξόδου
Αν η εντολή journalctl -u foounit δεν εμφανίζει αποτέλεσμα για κάποια βραχύβια υπηρεσία, κοιτάξτε το PID της. Για παράδειγμα, αν αποτύχει η υπηρεσία και η εντολή δείχνει ότι η υπηρεσία εκτελέστηκε με PID 123, τότε ίσως μπορείτε δείτε κάποιο αποτέλεσμα εξόδου στο journal για το PID αυτό, δηλαδή, . Τα πεδία μεταδεδομένων για το journal, όπως και , συμπληρώνονται ασύγχρονα και εξαρτώνται από τον κατάλογο για την υπαρχουσα διεργσία. Η επιδιόρθωση αυτής της δυσλειτουργίας απαιτεί την προσαρμογή το πυρήνα ώστε να παρέχει τα δεδομένα αυτά μέσω μιας σύνδεσης υποδοχής socket, παρόμοιας με SCM_CREDENTIALS. Εν ολίγοις, πρόκειται για σφάλμα (Αγγλικά). Να ξέρετε ότι οι υπηρεσίες που αποτυγχάνουν άμεσα δεν εμφανίζουν τίποτα στο journal, σύμφωνα και με τον σχεδιασμό του systemd.
Η διάρκεια εκκίνησης συστήματος αυξάνει με τον χρόνο
Χρησιμοποιώντας μερικοί χρήστες έχουν παρατηρήσει ότι η διάρκεια του χρόνου εκκίνησης της συσκευής έχει αυξηθεί σημαντικά σε σχέση με πριν. Η εντολή αναφέρει ότι ο NetworkManager παίρνει ασυνήθιστα αυξημένο χρόνο για να ξεκινήσει.
Για μερικούς χρήστες το πρόβλημα είναι ότι ο κατάλογος γίνεται πολύ μεγάλος. Κάτι τέτοιο μπορεί να έχει συνέπειες για την απόδοση του συστήματος, όπως και για το systemctl status ή το . Η λύση είναι να διαγραφούν όλα τα αρχεία του καταλόγου (δημιουργώντας αντίγραφο ασφαλείας, έστω και προσωρινό) και έπειτα ορίζοντας ένα όριο για το αρχείο του journal, όπως περιγράφεται στην σελίδα Systemd/Journal#Journal size limit.
Η υπηρεσια systemd-tmpfiles-setup.service αποτυγχάει να ξεκινήσει κατά την εκκινηση
Ξεκινώντας από το systemd 219, το αρχείο καθορίζει τις ιδιότητες ACL για τους καταλόγους που βρίσκονται κάτω από τον και, γι' αυτό, απαιτείται ενεργοποίηση της υποστηριξης ACL για το σύστημα αρχείου στο οποιο θα εγκατασταθεί το journal.
Για οδηγίες ενεργοποίησης του ACL σε σύστημα αρχείων που φιλοξενήσει τον κατάλογο , δείτε την σελίδα Access Control Lists#Enable ACL.
Απενεργοποίηση της λειτουργίας έκτακτης ανάγκης σε απομακρυσμένες συσκευές
Ίσως αποφασίσετε να απενεργοποιήσετε την λειτουργία εκτακτης ανάγκης σε κάποια απομακρυσμένη συσκευή, για παράδειγμα σε μια εικονική μηχανή που φιλοξενείται στο Azure ή στο Google Cloud. Και αυτό επειδή, αν μπει σε ενέργεια η λειτουργία έκτακτης ανάγκης, η συσκευή θα αποκλειστεί από την σύνδεση στο δίκτυο.
# systemctl mask emergency.service # systemctl mask emergency.target