Διαχείριση υπηρεσιών Linux. Στο systemd, υπάρχουν τρία επίπεδα (τύποι) ενεργειών που στοχεύουν στη διακοπή της λειτουργίας μιας υπηρεσίας ή οποιασδήποτε άλλης μονάδας

ΣΕ λειτουργικό σύστημα linux, όπως και στα Windows, εκτός τακτικά προγράμματαΥπάρχει ένας άλλος τύπος προγράμματος που μπορεί να αλληλεπιδράσει με τον χρήστη. Αυτές είναι υπηρεσίες που εκτελούνται στο παρασκήνιο. Η σημασία των υπηρεσιών δύσκολα μπορεί να υπερεκτιμηθεί, παρακολουθούν την κατάσταση του συστήματος και παρέχουν αυτόματη σύνδεση εξωτερικές συσκευέςκαι δίκτυα, επιτρέπουν στις διεργασίες να αλληλεπιδρούν με το υλικό (dbus), και ως υπηρεσίες υλοποιούνται διάφοροι διακομιστές ιστού και βάσεων δεδομένων. Διαφορετικός προγράμματα χρηστών, οι υπηρεσίες εκτελούνται στο παρασκήνιο και ο χρήστης δεν έχει άμεση πρόσβαση σε αυτές. Ο χρήστης δεν έχει συνδεθεί ακόμα, η λήψη μόλις ξεκίνησε και οι κύριες υπηρεσίες είναι ήδη σε λειτουργία.

Σε αυτό το άρθρο θα εξετάσουμε τη διαχείριση υπηρεσιών Linux. Δεν θα το αγγίξουμε άλλο ξεπερασμένα συστήματα, όπως το SysVinit, ας εστιάσουμε μόνο στο Systemd. Θα μάθετε πώς να προβάλλετε υπηρεσίες Linux που εκτελούνται και να τις σταματήσετε και να τις ξεκινήσετε μόνοι σας.

Για να διαχειριστείτε όλα αυτά, χρειάζεστε μια κύρια υπηρεσία - ένα σύστημα αρχικοποίησης που θα εκκινεί τις υπηρεσίες Linux την κατάλληλη στιγμή, θα διασφαλίζει ότι λειτουργούν κανονικά, θα καταγράφει μηνύματα καταγραφής και, το πιο σημαντικό, θα σας επιτρέπει να σταματήσετε τις υπηρεσίες. Προηγουμένως, τα σενάρια χρησιμοποιούνταν για τη διαχείριση υπηρεσιών. Είπα ήδη ότι μπορείτε να ξεκινήσετε μια υπηρεσία από το τερματικό, και έτσι, κάθε υπηρεσία ξεκίνησε στο παρασκήνιο η μία μετά την άλλη, χωρίς τη δυνατότητα παράλληλης εκκίνησης, και επέστρεψε PID διεργασίαςδέσμη ενεργειών προετοιμασίας, αποθηκεύτηκε και στη συνέχεια χρησιμοποιώντας αυτό το PID ήταν δυνατό να ελεγχθεί εάν η υπηρεσία εκτελείται και να διακοπεί η υπηρεσία linux εάν ήταν απαραίτητο. Όλα αυτά μπορούν να γίνουν χειροκίνητα.

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

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

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

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

βοηθητικό πρόγραμμα systemctl

Το Systemd έχει ειδικό εργαλείογια διαχείριση υπηρεσιών σε Linux - systemctl. Αυτό το βοηθητικό πρόγραμμα σάς επιτρέπει να κάνετε πολλά πράγματα, από την επανεκκίνηση μιας υπηρεσίας Linux και τον έλεγχο της κατάστασής της, μέχρι την ανάλυση της αποτελεσματικότητας της φόρτωσης μιας υπηρεσίας. Η σύνταξη του βοηθητικού προγράμματος είναι η εξής:

Υπηρεσία υπηρεσίας εντολών επιλογών $ systemctl...

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

Ας τα δούμε όλα με τη σειρά. Οι επιλογές εξαρτώνται πολύ από τις εντολές, επομένως θα τις εξετάσουμε αργότερα, αλλά προς το παρόν ας δούμε τις εντολές:

  • λίστα-μονάδες- προβολή όλων των υπηρεσιών (μονάδων), ανάλογα με την επιλογή -t
  • λίστα-πρίζες- προβολή όλων των υπηρεσιών πρίζας
  • αρχή- ξεκινήστε την υπηρεσία linux
  • να σταματήσει- διακοπή της υπηρεσίας linux
  • γεμίζω πάλι- ενημέρωση της διαμόρφωσης της υπηρεσίας από το αρχείο μονάδας
  • επανεκκίνηση- επανεκκινήστε την υπηρεσία
  • δοκιμάστε-επανεκκίνηση- επανεκκινήστε την υπηρεσία μόνο εάν εκτελείται
  • επαναφόρτωση ή επανεκκίνηση- ενημερώστε τη διαμόρφωση και, στη συνέχεια, επανεκκινήστε την υπηρεσία linux, εάν δεν υποστηρίζεται - απλώς κάντε επανεκκίνηση
  • απομονώνω- ξεκινήστε μόνο μία υπηρεσία μαζί με τις εξαρτήσεις της, σταματήστε όλες τις άλλες
  • σκοτώνω- στείλτε ένα σήμα τερματισμού στη διαδικασία, που χρησιμοποιείται σε συνδυασμό με τις επιλογές --signal και --kill-who
  • είναι ενεργό- ελέγξτε αν εκτελείται η υπηρεσία linux
  • είναι-αποτυχημένο- ελέγξτε εάν η υπηρεσία τερματίστηκε με σφάλμα
  • κατάσταση- δείτε την κατάσταση και την έξοδο της υπηρεσίας
  • προβολή- προβολή παραμέτρων διαχείρισης υπηρεσιών στο Linux
  • επαναφορά-αποτυχία- επανεκκινήστε τις υπηρεσίες linux που τερματίστηκαν με σφάλμα
  • λίστα-εξαρτήσεις- προβολή εξαρτήσεων υπηρεσιών linux
  • λίστα-μονάδα-αρχεία- εμφάνιση όλων των εγκατεστημένων αρχείων υπηρεσίας
  • επιτρέπω- προσθήκη υπηρεσίας στην εκκίνηση
  • καθιστώ ανίκανο- καταργήστε την υπηρεσία από την εκκίνηση
  • είναι ενεργοποιημένο- ελέγξτε εάν η υπηρεσία είναι ήδη σε εκκίνηση
  • επανενεργοποίηση- πρώτα απενεργοποιήστε και στη συνέχεια ενεργοποιήστε την υπηρεσία
  • λίστα-θέσεις εργασίας- όλες οι υπηρεσίες linux που εκτελούνται ανεξάρτητα από τον τύπο
  • στιγμιότυπο- αποθηκεύστε την κατάσταση των υπηρεσιών για επαναφορά αργότερα
  • daemon-reload- ενημερώστε τη διαμόρφωση όλων των υπηρεσιών
  • μάσκα -κάνει μια μονάδα απρόσιτη
  • ανακαλύπτω- επιστροφή αρχείου υπηρεσίας linux

Και τώρα οι κύριες επιλογές:

  • -t, --type- είδος υπηρεσιών για έξοδο
  • -a, --όλα- εμφάνιση όλων των γνωστών υπηρεσιών, ακόμη και εκείνων που δεν εκτελούνται
  • -q- ελάχιστη ανάληψη
  • --εκδοχή- έκδοση προγράμματος
  • -- χωρίς τηλεειδοποίηση- μην χρησιμοποιείτε την πλοήγηση στη σελίδα
  • --όχι-θρύλος- μην αποσύρεστε Λεπτομερής περιγραφή
  • -φά- αναγκαστική εκτέλεση εντολών
  • --χρόνος εκτέλεσης- μην αποθηκεύετε τις αλλαγές που έγιναν μετά την επανεκκίνηση
  • -n- αριθμός γραμμών εξόδου καταγραφής για την εντολή κατάστασης
  • --πεδιάδα- χρησιμοποιήστε τακτικά λειτουργία κειμένουαντί για δέντρα
  • --σκοτώστε-ποιον- ορίστε τη διαδικασία στην οποία πρέπει να σταλεί το σήμα
  • --σήμα- το σήμα που θα σταλεί.
  • --state - φιλτράρετε τη λίστα των υπηρεσιών ανά πολιτεία.

Όπως μπορείτε να δείτε, οι επιλογές θα είναι ελάχιστα χρήσιμες και είναι προτιμότερο να δίνετε μεγαλύτερη προσοχή στις εντολές, με τη βοήθεια των οποίων εκτελούνται όλες οι ενέργειες.

Διαχείριση υπηρεσιών Linux

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

systemctl list-units --type service

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

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

systemctl list-units --type service -all

systemctl list-units --type service --state running

Ή αυτά που απέτυχαν:

systemctl list-units --type service --state απέτυχε

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

systemctl list-unit-αρχεία

Τώρα ας φιλτράρουμε μόνο τις υπηρεσίες linux:

systemctl list-unit-files --type service

Εδώ μπορείτε επίσης να χρησιμοποιήσετε φίλτρα κατά συνθήκη. Τώρα ξέρετε πώς να προβάλλετε υπηρεσίες Linux που εκτελούνται, ας προχωρήσουμε.

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

sudo systemctl start application.service

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

Μπορείτε να σταματήσετε την υπηρεσία linux με την εντολή:

εφαρμογή διακοπής sudo systemctl

Η εντολή status σάς επιτρέπει να προβάλετε την κατάσταση μιας υπηρεσίας:

εφαρμογή κατάστασης sudo systemctl

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

Όπως γνωρίζετε, το systemd επιτρέπει την αυτόματη φόρτωση υπηρεσιών κατά την εκκίνηση του συστήματος, όπως απαιτείται. Η εντολή list-unit-files δείχνει εάν η υπηρεσία προστίθεται στην εκκίνηση.

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

Επομένως, για να λάβετε μια λίστα υπηρεσιών Linux που ξεκινούν αυτόματα, απλώς φιλτράρετε την έξοδό τους ανά κατάσταση:

systemctl list-unit-files --state enabled

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

sudo systemctl ενεργοποίηση εφαρμογής

Και για να το αφαιρέσετε από την εκκίνηση.

Το Systemd είναι ένας διαχειριστής συστήματος και υπηρεσιών στο λειτουργικό σύστημα Linux. Κατά την ανάπτυξή του, προσπάθησαν να το σχεδιάσουν ώστε να είναι συμβατό προς τα πίσω με τα σενάρια έναρξης SysV και να παρέχουν χρήσιμα χαρακτηριστικά, όπως η παράλληλη εκκίνηση των υπηρεσιών συστήματος κατά την εκκίνηση, η κατ' απαίτηση ενεργοποίηση δαιμόνων, η υποστήριξη για στιγμιότυπα κατάστασης συστήματος και η λογική διαχείρισης υπηρεσιών που βασίζεται στην εξάρτηση. Στο CentOS 7, το systemd αντικαθιστά το Upstart ως το προεπιλεγμένο σύστημα έναρξης.

Σε αυτό το άρθρο, θα εξετάσουμε τη διαδικασία διαχείρισης υπηρεσιών στο systemd για έναν χρήστη CentOS 7 Αυτή η γνώση θα είναι χρήσιμη σε άλλες διανομές, επειδή το systemd χρησιμοποιείται στο Fedora για μεγάλο χρονικό διάστημα και έχει προγραμματιστεί για το Ubuntu 14.10 και το Debian 8. Είτε αυτό είναι καλό είτε όχι, θα μείνει στα παρασκήνια.

Κατά την ανάγνωση αυτού του άρθρου, μπορείτε να δοκιμάσετε το systemd σε κλασικό VPS και cloud VPS από το Infobox. Προσπαθούμε να προσθέσουμε έγκαιρα υποστήριξη για σύγχρονα λειτουργικά συστήματα, ώστε να μπορείτε να τα χρησιμοποιείτε τελευταίες τεχνολογίεςγια περισσότερα αποτελεσματική εργασία. Η ίδια η ιδέα της συγγραφής αυτού του άρθρου γεννήθηκε μετά από μια άλλη ερώτηση των χρηστών σχετικά με τη χρήση υπηρεσιών στο CentOS 7.

Εισαγωγή

Το Systemd φέρνει την έννοια των συστημικών μονάδων. Οι μονάδες αντιπροσωπεύονται από αρχεία διαμόρφωσης που βρίσκονται σε έναν από τους καταλόγους:
  • /usr/lib/systemd/system/– μονάδες από εγκατεστημένα πακέτα RPM.
  • /run/systemd/system/— μονάδες που δημιουργούνται σε χρόνο εκτέλεσης. Αυτός ο κατάλογος έχει προτεραιότητα έναντι του καταλόγου με εγκατεστημένες μονάδες από πακέτα.
  • /etc/systemd/system/- μονάδες που δημιουργούνται και διαχειρίζονται διαχειριστής συστήματος. Αυτός ο κατάλογος έχει προτεραιότητα έναντι του καταλόγου των μονάδων που δημιουργήθηκαν κατά το χρόνο εκτέλεσης.
Οι μονάδες περιέχουν πληροφορίες σχετικά με υπηρεσίες συστήματος, υποδοχές ακρόασης, αποθηκευμένα στιγμιότυπα καταστάσεων συστήματος και άλλα αντικείμενα που σχετίζονται με το σύστημα προετοιμασίας.

Συστημικοί τύποι μονάδων:

  • .υπηρεσία– υπηρεσία συστήματος
  • .στόχος- Συστημική ομάδα μονάδων
  • .αυτόματος t – σημείο αυτόματης προσάρτησης συστήματος αρχείων
  • .συσκευή– αρχείο της συσκευής που αναγνωρίζεται από τον πυρήνα
  • .βουνό– σημείο προσάρτησης συστήματος αρχείων
  • .μονοπάτι– ένα αρχείο ή κατάλογος σε ένα σύστημα αρχείων
  • .πεδίο εφαρμογής– μια διαδικασία που δημιουργείται από έξω
  • .φέτα– μια ομάδα ιεραρχικά οργανωμένων μονάδων που διαχειρίζονται τις διαδικασίες του συστήματος
  • .στιγμιότυπο– Αποθηκευμένη κατάσταση διαχείρισης συστήματος
  • .πρίζα– υποδοχή επικοινωνίας μεταξύ διεργασιών
  • .ανταλαγή– Ανταλλαγή συσκευής ή ανταλλαγής αρχείου (αρχείο ανταλλαγής)
  • .μετρών την ώραν– systemd timer

Βασικά χαρακτηριστικά του systemd στο CentOS 7

  • Ενεργοποίηση με βάση την υποδοχή. Κατά την εκκίνηση, το systemd ακούει τις υποδοχές για όλες τις υπηρεσίες συστήματος, υποστηρίζει αυτόν τον τύπο ενεργοποίησης και μεταβιβάζει υποδοχές σε αυτές τις υπηρεσίες αμέσως μετά την έναρξη των υπηρεσιών. Αυτό επιτρέπει στο systemd όχι μόνο να εκτελεί υπηρεσίες παράλληλα, αλλά παρέχει επίσης τη δυνατότητα επανεκκίνησης των υπηρεσιών χωρίς να χάνονται τα μηνύματα που τους αποστέλλονται ενώ οι υπηρεσίες δεν ήταν διαθέσιμες. Η αντίστοιχη υποδοχή παραμένει διαθέσιμη και όλα τα μηνύματα βρίσκονται στην ουρά.
  • Ενεργοποίηση βάσει D-Bus. Οι υπηρεσίες συστήματος που χρησιμοποιούν D-Bus για επικοινωνία μεταξύ διεργασιών μπορούν να ξεκινήσουν κατόπιν ζήτησης όταν εφαρμογή πελάτηπροσπαθώντας να επικοινωνήσω μαζί τους.
  • Ενεργοποίηση βάσει συσκευής. Οι υπηρεσίες συστήματος που υποστηρίζουν την ενεργοποίηση βάσει συσκευής μπορούν να ξεκινήσουν όταν ορισμένου τύπουο εξοπλισμός συνδέεται ή γίνεται διαθέσιμος.
  • Ενεργοποίηση βάσει διαδρομής. Οι υπηρεσίες συστήματος μπορούν να υποστηρίξουν αυτόν τον τύπο ενεργοποίησης εάν αλλάξει η κατάσταση ενός φακέλου ή καταλόγου.
  • Στιγμιότυπα καταστάσεων συστήματος. Το σύστημα μπορεί να αποθηκεύσει την κατάσταση όλων των μονάδων και να επαναφέρει την προηγούμενη κατάσταση του συστήματος.
  • Διαχείριση σημείων τοποθέτησης και αυτόματων μονταρισμάτων. Το Systemd παρακολουθεί και διαχειρίζεται σημεία τοποθέτησης και σημεία αυτόματης προσάρτησης.
  • Επιθετικός παραλληλισμόςΤο Systemd εκτελεί τις υπηρεσίες συστήματος παράλληλα λόγω της χρήσης ενεργοποίησης που βασίζεται στην υποδοχή. Σε συνδυασμό με υπηρεσίες που υποστηρίζουν την ενεργοποίηση κατ' απαίτηση, η παράλληλη ενεργοποίηση μειώνει σημαντικά τον χρόνο εκκίνησης του συστήματος.
  • Συναλλακτική λογική για ενεργοποίηση μονάδας. Πριν ενεργοποιηθούν ή απενεργοποιηθούν οι μονάδες, το systemd υπολογίζει τις εξαρτήσεις τους, δημιουργεί μια προσωρινή συναλλαγή και επαληθεύει την ακεραιότητα αυτής της συναλλαγής. Εάν μια συναλλαγή δεν είναι άθικτη, το systemd προσπαθεί αυτόματα να τη διορθώσει και να αφαιρέσει τις περιττές εργασίες από αυτήν πριν δημιουργήσει ένα μήνυμα σφάλματος.
  • Συμβατό προς τα πίσω με την προετοιμασία SysV. Το SystemD υποστηρίζει πλήρως τα σενάρια εκκίνησης SysV όπως περιγράφεται στην προδιαγραφή Linux Standard Base (LSB), καθιστώντας εύκολη τη μετεγκατάσταση στο systemd.

Διαχείρισης υπηρεσιών

ΣΕ ΠΡΟΗΓΟΥΜΕΝΕΣ ΕΚΔΟΣΕΙΣΤο CentOS χρησιμοποίησε SysV ή Upstart. Τα σενάρια προετοιμασίας εντοπίστηκαν στον κατάλογο /etc/rc.d/init.d/. Τέτοια σενάρια γράφονταν συνήθως στο Bash και επέτρεπαν στον διαχειριστή να διαχειρίζεται την κατάσταση των υπηρεσιών και των δαιμόνων. Στο CentOS 7, τα σενάρια έναρξης έχουν αντικατασταθεί με μονάδες υπηρεσιών.

Κατά τρόπο χρήσης, μονάδες εξυπηρέτησης .υπηρεσίαμοιάζουν με σενάρια init. Για προβολή, εκκίνηση, διακοπή, επανεκκίνηση, ενεργοποίηση ή απενεργοποίηση υπηρεσιών συστήματος, χρησιμοποιήστε την εντολή systemctl. Της ομάδας υπηρεσίαΚαι chkconfigεξακολουθούν να περιλαμβάνονται στο σύστημα, αλλά μόνο για λόγους συμβατότητας.


Όταν χρησιμοποιείτε systemctl, δεν είναι απαραίτητο να καθορίσετε την επέκταση αρχείου.

Παρακάτω είναι οι βασικές εντολές systemctl:

  • systemctl start name.service– έναρξη της υπηρεσίας.
  • systemctl stop name.service— στάση υπηρεσίας
  • systemctl επανεκκίνηση name.service- επανεκκινήστε την υπηρεσία
  • systemctl δοκιμάστε-επανεκκίνηση name.service- επανεκκινήστε την υπηρεσία μόνο εάν εκτελείται
  • systemctl reload name.service— φορτώστε ξανά τη διαμόρφωση της υπηρεσίας
  • systemctl status name.service— έλεγχος εάν η υπηρεσία εκτελείται με λεπτομερή έξοδο της κατάστασης της υπηρεσίας
  • systemctl is-active name.service— έλεγχος εάν η υπηρεσία εκτελείται με μια απλή απάντηση: ενεργή ή ανενεργή
  • systemctl list-units --type service --all– εμφάνιση της κατάστασης όλων των υπηρεσιών
  • systemctl ενεργοποιήστε το όνομα.υπηρεσία– ενεργοποιεί την υπηρεσία (της επιτρέπει να ξεκινήσει κατά την εκκίνηση του συστήματος)
  • systemctl απενεργοποιήστε το όνομα.υπηρεσία– απενεργοποιεί την υπηρεσία
  • systemctl reenable name.service– απενεργοποιεί την υπηρεσία και την ενεργοποιεί αμέσως
  • systemctl είναι –enabled name.service– ελέγχει εάν η υπηρεσία είναι ενεργοποιημένη
  • systemctl list-unit-files --type service– εμφανίζει όλες τις υπηρεσίες και ελέγχει ποιες είναι ενεργοποιημένες
  • systemctl mask name.service– αντικαθιστά το αρχείο υπηρεσίας με έναν συμβολικό σύνδεσμο στο /dev/null, καθιστώντας τη μονάδα μη διαθέσιμη στο systemd
  • systemctl αποκαλύπτει το όνομα.υπηρεσία– επιστρέφει ένα αρχείο σέρβις, καθιστώντας τη μονάδα διαθέσιμη στο systemd

Εργασία με στόχους Systemd

Προηγούμενος Εκδόσεις CentOSμε το SysV init ή Upstart περιελάμβανε ένα προκαθορισμένο σύνολο επιπέδων εκτέλεσης που αντιπροσώπευαν συγκεκριμένες λειτουργίες για λειτουργίες, με αρίθμηση από το 0 έως το 6. Στο CentOS 7, η έννοια των επιπέδων εκτέλεσης αντικαταστάθηκε από συστηματικούς στόχους.

systemd αρχεία προορισμού .στόχοςέχουν σχεδιαστεί για να ομαδοποιούν άλλες μονάδες του συστήματος μέσω μιας αλυσίδας εξάρτησης. Για παράδειγμα μονάδα γραφικός.στόχος, που χρησιμοποιείται για την έναρξη μιας γραφικής συνεδρίας, ξεκινά τις υπηρεσίες συστήματος του GNOME Display Manager ( gdm.service) και υπηρεσία λογαριασμών ( accounts–daemon.service) και ενεργοποιείται πολλαπλών χρηστών.στόχος. Με τη σειρά του πολλαπλών χρηστών.στόχοςεκτελεί άλλες υπηρεσίες συστήματος όπως το Network Manager ( NetworkManager.service) ή D-Bus ( dbus.service) και ενεργοποιεί άλλες μονάδες-στόχους βασικός.στόχος.

Το CentOS 7 έρχεται με προκαθορισμένους στόχους παρόμοιους με τυπικό σετεπίπεδα τρεξίματος. Για λόγους συμβατότητας, έχουν επίσης ψευδώνυμα για αυτούς τους στόχους που εμφανίζονται απευθείας στα επίπεδα εκτέλεσης του SysV.

  • poweroff.target (runlevel0.target)– τερματισμός λειτουργίας και τερματισμός λειτουργίας του συστήματος
  • rescue.target (runlevel1.target)– ρύθμιση του κελύφους ανάκτησης
  • multi–user.target (runlevel2.target, runlevel3.target, runlevel4.target)– ρύθμιση ενός μη γραφικού συστήματος πολλών χρηστών
  • graphical.target (runlevel5.target)– ρύθμιση ενός γραφικού συστήματος πολλών χρηστών
  • reboot.target (runlevel6.target)– τερματισμός λειτουργίας και επανεκκίνηση του συστήματος
Οι εντολές runlevel και telinit εξακολουθούν να είναι διαθέσιμες, αλλά διατηρούνται για λόγους συμβατότητας. Συνιστάται η χρήση του systemctl για την αλλαγή ή τη διαμόρφωση στόχων συστήματος.

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

Για να δείτε όλες τις φορτωμένες μονάδες προορισμού, χρησιμοποιήστε την εντολή systemctl list-units --type targetκαι για να προβάλετε όλες τις μονάδες προορισμού γενικά με την εντολή: systemctl list-units --type target --all.

Για να αλλάξετε τον προεπιλεγμένο στόχο, χρησιμοποιήστε την εντολή systemctl set-default name.target.

Για να αλλάξετε τον τρέχοντα στόχο: systemctl απομόνωση όνομα.στόχος. Η εντολή θα ξεκινήσει τη μονάδα στόχο και όλες τις εξαρτήσεις της και θα σταματήσει αμέσως όλες τις άλλες.

Στο CentOS 7, το systemctl αντικαθιστά σημαντικό αριθμό εντολών διαχείρισης ενέργειας. Οι προηγούμενες εντολές διατηρούνται για συμβατότητα, αλλά συνιστάται η χρήση του systemctl:
systemctl διακοπή– σταματά το σύστημα
systemctl poweroff– απενεργοποιεί το σύστημα
systemctl επανεκκίνηση– επανεκκινεί το σύστημα

Διαχείριση του συστήματος σε απομακρυσμένο μηχάνημα

Το Systemd σάς επιτρέπει να διαχειρίζεστε ένα απομακρυσμένο μηχάνημα μέσω SSH. Για έλεγχο χρησιμοποιήστε την εντολή:
εντολή systemctl --host user_name@host_name, όπου user_name είναι το όνομα χρήστη, host_name είναι το όνομα του κεντρικού υπολογιστή που ελέγχεται από απόσταση και εντολή είναι η εντολή systemd που πρέπει να εκτελεστεί.

Τυπικό systemd .service

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

Description=Daemon για ανίχνευση εφαρμογών που κολλάνε After=syslog.target ExecStart=/usr/sbin/abrtd Type=forking WantedBy=multi-user.target
Ας δούμε την ενότητα . Περιέχει γενικές πληροφορίες για την υπηρεσία. Αυτή η ενότητα δεν υπάρχει μόνο σε μονάδες σέρβις, αλλά και σε άλλες μονάδες (για παράδειγμα, κατά τη διαχείριση συσκευών, σημείων τοποθέτησης κ.λπ.). Στο παράδειγμά μας, παρέχουμε μια περιγραφή της υπηρεσίας και υποδεικνύουμε ότι ο δαίμονας πρέπει να ξεκινήσει μετά το Syslog.

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

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

Αυτό είναι το ελάχιστο λειτουργικό αρχείο υπηρεσίας systemd. Αφού γράψετε το δικό σας, αντιγράψτε το στο /etc/systemd/system/service_name.service για δοκιμή. Εκτελέστε τις εντολές systemctl daemon-reload. Η Systemd θα γνωρίζει για την υπηρεσία και θα μπορείτε να την ξεκινήσετε.

Επιπλέον πληροφορίες

Ένα εξαιρετικό σεμινάριο για το systemd από το RedHat, το οποίο είναι η βάση για αυτό το άρθρο.
Τεκμηρίωση για τη σύνταξη της δικής σας μονάδας σέρβις systemd.
"Systemd for administrators" από τον προγραμματιστή του systemd στα ρωσικά.

συμπέρασμα

Σε αυτό το άρθρο, μάθαμε πώς να διαχειριζόμαστε τις υπηρεσίες CentOS 7 Φυσικά, αυτή δεν είναι η μόνη λειτουργία του systemd και οι άλλες πτυχές του θα συζητηθούν στο μέλλον. Το ίδιο το λειτουργικό σύστημα είναι διαθέσιμο σε κλασικά VPS και cloud VPS από το Infobox σχεδόν από την κυκλοφορία του. Δοκιμάστε το systemd τώρα. Αυτή η γνώση θα είναι χρήσιμη σε σχέση με τη μετάβαση πολλών διανομών στο systemd.

Εάν βρείτε κάποιο σφάλμα στο άρθρο, ο συγγραφέας θα χαρεί να το διορθώσει. Παρακαλώ γράψτε σε ένα PM ή email σχετικά.
Εάν δεν μπορείτε να αφήσετε σχόλια στο Habré, μπορείτε να τα γράψετε στο ιστολόγιο

Το Systemd είναι ένας αρχικός διαχειριστής συστήματος και συστήματος που γίνεται το νέο πρότυπο για μηχανές Linux. Υπάρχει ακόμη συζήτηση σχετικά με την απόδοση του systemd σε σύγκριση με τα παραδοσιακά συστήματα έναρξης SysV, ωστόσο, οι περισσότερες διανομές σχεδιάζουν να εφαρμόσουν αυτό το σύστημα, και πολλές το έχουν ήδη κάνει.

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

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

Διαχείρισης υπηρεσιών

Ο κύριος σκοπός του συστήματος init είναι να προετοιμάσει στοιχεία που θα πρέπει να ξεκινούν μετά την εκκίνηση Πυρήνες Linux(παραδοσιακά αυτά ονομάζονται στοιχεία "χρήστη"). Το σύστημα init χρησιμοποιείται επίσης για τη διαχείριση υπηρεσιών διακομιστή και δαιμόνων. Έχοντας αυτό κατά νου, ας ξεκινήσουμε την εισαγωγή μας στο systemd με απλές λειτουργίες διαχείρισης υπηρεσιών.

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

Για εργασίες διαχείρισης υπηρεσιών, προορίζονται αρχεία μονάδας με το επίθημα .service. Ωστόσο, στις περισσότερες περιπτώσεις το επίθημα .service μπορεί να παραλειφθεί επειδή το systemd είναι αρκετά έξυπνο ώστε να καταλάβει τι πρέπει να κάνει όταν χρησιμοποιείτε εντολές διαχείρισης υπηρεσιών χωρίς το επίθημα.

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

Για να ξεκινήσετε την υπηρεσία systemd, χρησιμοποιήστε την εντολή start. Εάν δεν εκτελείτε μια περίοδο λειτουργίας χρήστη root, θα χρειαστεί να χρησιμοποιήσετε το sudo καθώς αυτή η εντολή θα επηρεάσει την κατάσταση του λειτουργικού συστήματος:

sudo systemctl start application.service

Όπως αναφέρθηκε προηγουμένως, το systemd ξέρει να αναζητά αρχεία *.service για εντολές διαχείρισης υπηρεσιών, επομένως αυτή η εντολή μπορεί να εισαχθεί ως εξής:

εφαρμογή έναρξης sudo systemctl

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

Για να διακόψετε την υπηρεσία, απλώς εισάγετε την εντολή διακοπής:

sudo systemctl stop application.service

Κάντε επανεκκίνηση και επανεκκίνηση

Για επανεκκίνηση της υπηρεσίας, χρησιμοποιήστε επανεκκίνηση:

sudo systemctl επανεκκίνηση του application.service

Εάν η εν λόγω εφαρμογή μπορεί να φορτώσει ξανά τα αρχεία διαμόρφωσής της (χωρίς επανεκκίνηση), μπορεί να χρησιμοποιηθεί η επαναφόρτωση:

sudo systemctl reload application.service

Εάν δεν γνωρίζετε εάν μια υπηρεσία μπορεί να φορτώσει ξανά τα αρχεία της, χρησιμοποιήστε την εντολή reload-or-restart. Θα επανεκκινήσει την υπηρεσία και αν αυτό δεν είναι δυνατό, θα την επανεκκινήσει.

sudo systemctl reload-or-restart application.service

Ενεργοποίηση και απενεργοποίηση υπηρεσιών

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

Υπάρχει μια εντολή ενεργοποίησης για αυτό:

sudo systemctl ενεργοποίηση application.service

Αυτό θα δημιουργήσει συμβολικός σύνδεσμοςσε ένα αντίγραφο του αρχείου υπηρεσίας (συνήθως /lib/systemd/system ή /etc/systemd/system) στο σημείο του δίσκου όπου το systemd αναζητά αρχεία εκκίνησης (συνήθως /etc/systemd/system/some_target.target.want, περισσότερα για αυτό - περαιτέρω στο εγχειρίδιο).

Για να καταργήσετε μια υπηρεσία από την εκκίνηση, πρέπει να εισαγάγετε:

sudo systemctl απενεργοποιήστε την εφαρμογή.υπηρεσία

Λάβετε υπόψη ότι η ενεργοποίηση μιας υπηρεσίας δεν την εκκινεί στην τρέχουσα περίοδο λειτουργίας. Εάν θέλετε να ξεκινήσετε την υπηρεσία και να την ενεργοποιήσετε κατά την εκκίνηση, πρέπει να εκτελέσετε την έναρξη και να ενεργοποιήσετε τις εντολές.

Έλεγχος κατάστασης υπηρεσίας

Για να ελέγξετε την κατάσταση της υπηρεσίας, εισαγάγετε:

systemctl status application.service

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

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

nginx.service - Ένας διακομιστής web υψηλής απόδοσης και ένας διακομιστής αντίστροφης μεσολάβησης
Φόρτωσε: φορτώθηκε (/usr/lib/systemd/system/nginx.service; ενεργοποιημένο; προκαθορισμένο προμηθευτή: απενεργοποιημένο)
Ενεργό: ενεργό (σε λειτουργία) από την Τρίτη 27-01-2015 19:41:23 EST. πριν από 22 ώρες
Κύριο PID: 495 (nginx)
CGroup: /system.slice/nginx.service
├─495 nginx: κύρια διαδικασία /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;
└─496 nginx: διαδικασία εργασίας
27 Ιανουαρίου 19:41:23 επιτραπέζιο σύστημα: Εκκίνηση Ένας διακομιστής web υψηλής απόδοσης και ένας διακομιστής αντίστροφης μεσολάβησης...
27 Ιανουαρίου 19:41:23 επιτραπέζιο σύστημα: Ξεκίνησε Διακομιστής Ιστού υψηλής απόδοσης και διακομιστής ανάστροφου διακομιστή μεσολάβησης.

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

Υπάρχουν επίσης μέθοδοι δοκιμής για συγκεκριμένες συνθήκες. Για παράδειγμα, για να ελέγξετε εάν μια δεδομένη μονάδα είναι ενεργή (εκτελείται), μπορείτε να χρησιμοποιήσετε την εντολή is-active:

systemctl is-active application.service

Αυτό θα εμφανίσει την τρέχουσα κατάσταση της μονάδας, συνήθως ενεργή ή ανενεργή. Ο κωδικός εξόδου θα είναι "0" εάν η μονάδα είναι ενεργή, γεγονός που απλοποιεί τη διαδικασία ανάλυσης.

Για να μάθετε εάν μια μονάδα είναι ενεργοποιημένη, μπορείτε να χρησιμοποιήσετε την εντολή is-enabled:

systemctl είναι ενεργοποιημένο application.service

Αυτή η εντολή θα αναφέρει εάν η υπηρεσία είναι ενεργοποιημένη και θα ορίσει ξανά τον κωδικό εξόδου ως "0" ή "1" ανάλογα με το αποτέλεσμα.

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

systemctl is-failed application.service

Η εντολή θα επιστρέψει ενεργή εάν η μονάδα λειτουργεί σωστά και θα αποτύχει εάν παρουσιαστεί σφάλμα. Εάν η μονάδα διακόπηκε σκόπιμα, η εντολή μπορεί να επιστρέψει άγνωστη ή ανενεργή. Ο κωδικός εξόδου "0" υποδεικνύει ότι συνέβη μια αποτυχία και το "1" υποδεικνύει οποιαδήποτε άλλη κατάσταση.

Επισκόπηση κατάστασης συστήματος

Προηγουμένως, εξετάσαμε τις εντολές που απαιτούνται για τον έλεγχο ξεχωριστές υπηρεσίες, αλλά δεν είναι πολύ χρήσιμα για τη μελέτη της τρέχουσας κατάστασης του συστήματος. Υπάρχουν πολλές εντολές systemctl που παρέχουν αυτές τις πληροφορίες.

Δείτε μια λίστα με τις τρέχουσες μονάδες

Για να ζητήσετε μια λίστα με τις τρέχουσες μονάδες systemd, χρησιμοποιήστε την εντολή list-units:

systemctl λίστα-μονάδες

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

ΦΟΡΤΙΟ ΜΟΝΑΔΑΣ ΕΝΕΡΓΗ ΥΠΟ ΠΕΡΙΓΡΑΦΗ
atd.service φορτωμένο ενεργό τρέχον δαίμονα ATD
Το avahi-daemon.service φορτώθηκε ενεργό και εκτελεί τη Στοίβα mDNS/DNS-SD του Avahi
Το dbus.service φορτώθηκε ενεργό σε λειτουργία Δίαυλος μηνυμάτων συστήματος D-Bus
Το dcron.service έχει φορτώσει ενεργό και τρέχει το περιοδικό χρονοδιάγραμμα εντολών
Το dkms.service loaded ενεργό έφυγε από το Dynamic Kernel Modules System
[email προστατευμένο]φορτώθηκε ενεργή εκτέλεση Getty στο tty1
. . .

Η έξοδος έχει τις ακόλουθες στήλες:

  • UNIT είναι το όνομα της συστημικής μονάδας.
  • LOAD – αναφέρει εάν η διαμόρφωση της μονάδας έχει υποστεί επεξεργασία από το systemd. Η διαμόρφωση των φορτωμένων μονάδων αποθηκεύεται στη μνήμη.
  • ACTIVE – συνοπτική κατάσταση της μονάδας. Αυτό σας επιτρέπει συνήθως να προσδιορίσετε γρήγορα εάν η τρέχουσα μονάδα ξεκίνησε με επιτυχία.
  • ΥΠΟ: δηλώστε περισσότερα χαμηλό επίπεδο, το οποίο αναφέρει λεπτομερείς πληροφορίες για τη συσκευή. Αυτό συχνά εξαρτάται από τον τύπο της μονάδας, την κατάσταση και την πραγματική μέθοδο με την οποία λειτουργεί η μονάδα.
  • ΠΕΡΙΓΡΑΦΗ Σύντομη περιγραφήλειτουργίες μονάδας.

Δεδομένου ότι η εντολή λίστας μονάδων εμφανίζει μόνο ενεργές μονάδες από προεπιλογή, όλες οι παραπάνω εγγραφές θα εμφανίζονται φορτωμένες στη στήλη LOAD και ενεργές στη στήλη ACTIVE. Αυτή η μορφή είναι η προεπιλεγμένη συμπεριφορά του systemctl όταν καλείται χωρίς πρόσθετες εντολέςοπότε θα δείτε το ίδιο πράγμα αν καλέσετε το systemctl χωρίς ορίσματα:

Χρησιμοποιώντας το systemctl μπορείτε να κάνετε ερωτήσεις διάφορες πληροφορίεςμε την προσθήκη σημαιών. Για παράδειγμα, για να δείτε όλες τις μονάδες που έχει φορτώσει το systemd (ή προσπάθησε να φορτώσει), ανεξάρτητα από το αν είναι ενεργές αυτήν τη στιγμή, μπορείτε να χρησιμοποιήσετε τη σημαία -όλα:

systemctl list-units --all

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

Μπορείτε να χρησιμοποιήσετε άλλες σημαίες για να φιλτράρετε τα αποτελέσματα. Για παράδειγμα, η σημαία --state= μπορεί να χρησιμοποιηθεί για να ορίσει καταστάσεις LOAD, ACTIVE ή SUB. Η σημαία --all πρέπει να παραμείνει έτσι ώστε το σύστημα να εμφανίζει ανενεργές μονάδες:

systemctl list-units --all --state=inactive

Ένα άλλο δημοφιλές φίλτρο είναι -type=. Σας επιτρέπει να φιλτράρετε μονάδες ανά τύπο. Για παράδειγμα, για να υποβάλετε ερώτημα μόνο σε ενεργές μονάδες, θα μπορούσατε να εισαγάγετε:

systemctl list-units --type=service

Κατάλογος αρχείων μονάδας

Η εντολή list-units εμφανίζει μόνο τις μονάδες που το σύστημα έχει προσπαθήσει να επεξεργαστεί και να φορτώσει στη μνήμη. Επειδή το systemd διαβάζει επιλεκτικά μόνο τα αρχεία μονάδας που πιστεύει ότι χρειάζεται, η λίστα δεν θα περιλαμβάνει όλα τα διαθέσιμα αρχεία μονάδας. Για να παραθέσετε όλα τα διαθέσιμα αρχεία μονάδας (συμπεριλαμβανομένων εκείνων που το σύστημα δεν προσπάθησε να φορτώσει), χρησιμοποιήστε την εντολή list-unit-files.

systemctl list-unit-αρχεία

Οι μονάδες είναι αναπαραστάσεις πόρων που γνωρίζει το σύστημα. Εφόσον το systemd δεν διαβάζει απαραίτητα όλους τους ορισμούς μονάδων, παρουσιάζει μόνο πληροφορίες για τα ίδια τα αρχεία. Η έξοδος αποτελείται από δύο στήλες: UNIT FILE και STATE.

ΚΑΤΑΣΤΑΣΗ ΑΡΧΕΙΟΥ ΜΟΝΑΔΑΣ
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount static
var-lib-nfs-rpc_pipefs.mount static
org.cups.cupsd.path ενεργοποιήθηκε
. . .

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

Διαχείριση μονάδας

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

Εμφάνιση αρχείου μονάδας

Για να εμφανίσετε το αρχείο μονάδας που φορτώθηκε το systemd, μπορείτε να χρησιμοποιήσετε την εντολή cat (η οποία προστέθηκε στην έκδοση systemd 209). Για παράδειγμα, για να δείτε το αρχείο μονάδας δαίμονα προγραμματισμού atd, θα μπορούσατε να εισαγάγετε:

systemctl cat atd.service
Description=Δαίμονας ATD
Τύπος=διχαλωτή
ExecStart=/usr/bin/atd
WantedBy=multi-user.target

Στην οθόνη θα δείτε ένα αρχείο μονάδας που είναι γνωστό στην τρέχουσα διαδικασία systemd που εκτελείται. Αυτό μπορεί να είναι σημαντικό εάν έχετε τροποποιήσει πρόσφατα αρχεία μονάδας ή εάν παρακάμπτετε ορισμένες παραμέτρους σε ένα απόσπασμα αρχείου μονάδας (θα μιλήσουμε γι' αυτό αργότερα).

Χαρτογράφηση εξάρτησης

Για να προβάλετε το δέντρο εξαρτήσεων μιας μονάδας, χρησιμοποιήστε την εντολή:

systemctl list-dependencies sshd.service

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

sshd.service
├─system.slice
└─βασικός.στόχος
├─microcode.service
├─rhel-autorelabel-mark.service
├─rhel-autorelabel.service
├─rhel-configure.service
├─rhel-dmesg.service
├─rhel-loadmodules.service
├─ μονοπάτια.στόχος
├─φέτες.στόχος
. . .

Οι αναδρομικές εξαρτήσεις εμφανίζονται μόνο για μονάδες .target που υποδεικνύουν καταστάσεις συστήματος. Για να απαριθμήσετε αναδρομικά όλες τις εξαρτήσεις, προσθέστε τη σημαία --all.

Για να εμφανίσετε αντίστροφες εξαρτήσεις (μονάδες που εξαρτώνται από ένα καθορισμένο στοιχείο), μπορείτε να προσθέσετε τη σημαία --reverse στην εντολή. Χρήσιμες είναι επίσης οι σημαίες -πριν και -μετά, εμφανίζουν μονάδες που εξαρτώνται από την καθορισμένη μονάδα και εκκινούνται πριν ή μετά από αυτήν.

Έλεγχος ιδιοτήτων μονάδας

Για να δείτε τις ιδιότητες χαμηλού επιπέδου μιας μονάδας, μπορείτε να χρησιμοποιήσετε την εντολή show. Αυτό θα εμφανίσει μια λίστα με τις ιδιότητες της καθορισμένης μονάδας σε μορφή κλειδιού=τιμής.

systemctl εμφανίζει το sshd.service
Id=sshd.service
Names=sshd.service
Requires=basic.target
Θέλει=σύστημα.φέτα
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice
Description=Δαίμονας διακομιστή OpenSSH
. . .

Για να εμφανίσετε μία από τις ιδιότητες, περάστε τη σημαία -p και καθορίστε το όνομα της ιδιότητας. Για παράδειγμα, για να δείτε διενέξεις στη μονάδα sshd.service, πρέπει να εισαγάγετε:

systemctl εμφάνιση sshd.service -p Συγκρούσεις
Conflicts=shutdown.target

Καμουφλάζ μονάδας

Το Systemd μπορεί να αποκλείσει μια μονάδα (αυτόματα ή χειροκίνητα) δημιουργώντας έναν συμβολικό σύνδεσμο στο /dev/null. Αυτό ονομάζεται Unit masking και γίνεται με την εντολή mask:

sudo systemctl mask nginx.service

Τώρα η υπηρεσία Nginx δεν θα ξεκινήσει αυτόματα ή χειροκίνητα ενώ είναι ενεργοποιημένη η κάλυψη.

Εάν ελέγξετε τα αρχεία list-unit-files, θα δείτε ότι η υπηρεσία έχει επισημανθεί ως καλυμμένη:

systemctl list-unit-αρχεία
. . .
kmod-static-nodes.service static
ldconfig.service static
mandb.service static
messagebus.service static
nginx.service μασκοφόρος
quotaon.service static
rc-local.service static
Το rdisc.service απενεργοποιήθηκε
διάσωση.υπηρεσία στατικός
. . .

Εάν προσπαθήσετε να ξεκινήσετε την υπηρεσία, θα λάβετε αυτό το μήνυμα:

sudo systemctl start nginx.service
Αποτυχία εκκίνησης του nginx.service: Η μονάδα nginx.service είναι καλυμμένη.

Για να αποκαλύψετε (ξεκλειδώσετε) μια μονάδα και να την κάνετε προσβάσιμη, χρησιμοποιήστε την απομάκρυνση:

sudo systemctl αποκαλύπτω το nginx.service

Αυτό θα επαναφέρει την υπηρεσία στην προηγούμενη κατάστασή της.

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

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

Η εντολή επεξεργασίας από προεπιλογή ανοίγει ένα απόσπασμα αρχείου μονάδας:

sudo systemctl επεξεργασία nginx.service

Αυτό θα είναι ένα κενό αρχείο που μπορεί να χρησιμοποιηθεί για την παράκαμψη ή την προσθήκη οδηγιών στον ορισμό της μονάδας. Θα δημιουργηθεί ένας κατάλογος στον κατάλογο /etc/systemd/system που περιέχει το όνομα της συσκευής με το επίθημα.d. Για παράδειγμα, ένας κατάλογος nginx.service.d θα δημιουργηθεί για το nginx.service.

Ένα απόσπασμα που ονομάζεται override.conf θα δημιουργηθεί μέσα σε αυτόν τον κατάλογο. Όταν φορτωθεί μια μονάδα, το systemd θα συγχωνεύσει το απόσπασμα παράκαμψης στη μνήμη με το υπόλοιπο αρχείο της μονάδας. Οι οδηγίες αποσπάσματος θα υπερισχύουν εκείνων που καθορίζονται στο αρχείο της μονάδας προέλευσης.

Εάν θέλετε να επεξεργαστείτε ολόκληρο το αρχείο ενότητας αντί να δημιουργήσετε ένα απόσπασμα, μπορείτε να περάσετε τη σημαία --full:

sudo systemctl edit --full nginx.service

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

Για να αφαιρέσετε τυχόν προσθήκες που κάνατε, διαγράψτε τον κατάλογο config.d ή το τροποποιημένο αρχείο υπηρεσίας από το /etc/systemd/system. Για παράδειγμα, για να καταργήσετε ένα απόσπασμα, θα μπορούσατε να εισαγάγετε:

sudo rm -r /etc/systemd/system/nginx.service.d

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

sudo rm /etc/systemd/system/nginx.service

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

sudo systemctl daemon-reload

Αλλαγή επιπέδων τρεξίματος

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

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

Για παράδειγμα, υπάρχει ένα swap.target που χρησιμοποιείται για να υποδείξει ότι η ανταλλαγή είναι έτοιμη για χρήση. Οι μονάδες που αποτελούν μέρος αυτής της διαδικασίας μπορούν να συγχρονιστούν για το σκοπό αυτό χρησιμοποιώντας τις οδηγίες WantedBy= ή RequiredBy=. Οι μονάδες που απαιτούν ανταλλαγή μπορούν να καθορίσουν αυτήν τη συνθήκη μέσω των προδιαγραφών Wants=, Requires= ή After=.

Έλεγχος και ορισμός προεπιλεγμένων στόχων

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

systemctl get-default
πολλαπλών χρηστών.στόχος

Εάν θέλετε να ορίσετε έναν διαφορετικό στόχο ως προεπιλογή, μπορείτε να χρησιμοποιήσετε το set-default. Για παράδειγμα, εάν έχετε εγκαταστήσει μια γραφική επιφάνεια εργασίας και θέλετε το σύστημα να την εκκινήσει από προεπιλογή, μπορείτε να αλλάξετε τον στόχο ανάλογα:

sudo systemctl set-default graphical.target

Λίστα διαθέσιμων στόχων

Μπορείτε να δείτε τη λίστα των διαθέσιμων στόχων χρησιμοποιώντας την εντολή:

systemctl list-unit-files --type=target

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

systemctl list-units --type=target

Απομόνωση στόχου

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

Για παράδειγμα, εάν εργάζεστε σε ένα γραφικό περιβάλλον όπου το graphical.target είναι ενεργό, μπορείτε να απενεργοποιήσετε το σύστημα γραφικών και να θέσετε το σύστημα σε κατάσταση πολλών χρηστών γραμμή εντολών, απομόνωση multi-user.target. Δεδομένου ότι το graphical.target εξαρτάται από το multi-user.target, αλλά όχι το αντίστροφο, όλες οι μονάδες γραφικών θα διακοπούν.

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

systemctl list-dependencies multi-user.target

Εάν είστε ευχαριστημένοι με τα πάντα, μπορείτε να απομονώσετε τον στόχο:

sudo systemctl απομόνωση multi-user.target

Συντομογραφίες

Υπάρχουν στόχοι που έχουν καθοριστεί για σημαντικά συμβάντα, όπως ο τερματισμός λειτουργίας ή η επανεκκίνηση. Το systemctl προσφέρει επίσης αρκετές συντομεύσεις.

Για παράδειγμα, για να θέσετε το σύστημα σε λειτουργία εντοπισμού σφαλμάτων, μπορείτε απλώς να εισαγάγετε τη διάσωση αντί για την απομόνωση του rescue.target:

sudo systemctl rescue

Αυτό θα παρέχει πρόσθετη λειτουργικότητα - θα ειδοποιεί όλους τους χρήστες του συστήματος για το συμβάν.

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

sudo systemctl διακοπή

Για να ξεκινήσετε έναν πλήρη τερματισμό λειτουργίας, μπορείτε να χρησιμοποιήσετε την εντολή poweroff:

sudo systemctl poweroff

Η επανεκκίνηση μπορεί να ξεκινήσει χρησιμοποιώντας την εντολή επανεκκίνησης:

επανεκκίνηση sudo systemctl

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

Για παράδειγμα, για να επανεκκινήσετε το σύστημα, θα μπορούσατε απλώς να εισάγετε:

συμπέρασμα

Τώρα είστε εξοικειωμένοι με τους βασικούς μηχανισμούς του systemctl και γνωρίζετε πώς να ελέγχετε το σύστημα init χρησιμοποιώντας αυτό το εργαλείο.

Αν και το systemctl λειτουργεί κυρίως με τη διαδικασία systemd, υπάρχουν άλλα στοιχεία στο σύστημα systemd που ελέγχονται από άλλα βοηθητικά προγράμματα. Για παράδειγμα, ξεχωριστοί δαίμονες και βοηθητικά προγράμματα χρησιμοποιούνται για τη διαχείριση των περιόδων καταγραφής και χρήστη (journald/journalctl και logind/loginctl, αντίστοιχα).

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

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

Τα αρχεία υπηρεσίας συστήματος που έχουν εγκατασταθεί χρησιμοποιώντας τη διαχείριση πακέτων βρίσκονται στον κατάλογο /lib/systemd/system/. Τα αρχεία υπηρεσίας χρήστη βρίσκονται στον κατάλογο /etc/systemd/system/. Έχουν προτεραιότητα έναντι των συστημικών. Εάν πρέπει να αλλάξετε το αρχείο υπηρεσίας συστήματος, απλώς αντιγράψτε το στον κατάλογο αρχείων υπηρεσίας χρήστη και επεξεργαστείτε το όπως χρειάζεται.

1. Μορφή αρχείου υπηρεσίας

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

  • Ενότητα ενότητας

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

    Περιγραφή - γραμμή περιγραφής.

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

  • Τμήμα εξυπηρέτησης

    Περιέχει πληροφορίες ειδικά για την περιγραφή της υπηρεσίας.

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

    Τύπος - καθορίζει πώς το systemd θα παρακολουθεί εάν η υπηρεσία έχει ξεκινήσει.

    • διχάλωση- μια τρέχουσα διεργασία γεννά μια άλλη διαδικασία και τελειώνει μόνη της. Το systemd θεωρεί μια υπηρεσία που εκτελείται όταν τερματίζεται η εκτελούμενη διαδικασία. Η κύρια διαδικασία μιας υπηρεσίας θεωρείται η διαδικασία του παιδιού.
    • dbus- μετά την εκκίνηση, η υπηρεσία θα εγγραφεί στο δίαυλο Dbus με το όνομα που καθορίζεται στη ρύθμιση BusName. Το systemd θα μπορεί να παρακολουθεί την κατάσταση της υπηρεσίας μέσω Dbus.
    Όνομα λεωφορείου - το όνομα της υπηρεσίας με την οποία θα εγγραφεί στο δίαυλο Dbus. Αυτή η οδηγία χρησιμοποιείται όταν η οδηγία Τύποςπαίρνει την αξία dbus .

    Επανεκκίνηση - η οδηγία καθορίζει έναν τρόπο επανεκκίνησης της υπηρεσίας σε περίπτωση σφάλματος.

    • επανεκκίνηση-πάντα- Εάν κολλήσει, επανεκκινήστε πάντα την υπηρεσία.
    EnvironmentFile - σας επιτρέπει να καθορίσετε ένα αρχείο με μεταβλητές περιβάλλοντος για την υπηρεσία. Μόνο ορισμοί μεταβλητών επιτρέπονται στο αρχείο.
  • Ενότητα εγκατάστασης

    WantedBy - περιγράφει σε ποιες περιπτώσεις θα πρέπει να ενεργοποιηθεί η μονάδα.

Ένα παράδειγμα απλού αρχείου υπηρεσίας δόθηκε ήδη στην προηγούμενη ανάρτηση:
Description=openntpd After=network.target Type=simple ExecStart=/usr/sbin/ntpd -dsf /etc/openntpd/ntpd.conf ExecStartPost=/bin/chown ntpd /var/lib/openntpd/ntpd.drift=ExecS /hwclock -w WantedBy=multi-user.target 2. Περιπτώσεις εξυπηρέτησης

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

Όταν καθίσταται απαραίτητο να δημιουργηθεί μια πρόσθετη παρουσία μιας υπηρεσίας που βασίζεται σε ένα πρότυπο, δημιουργείται ένας συμβολικός σύνδεσμος προς το πρότυπο στον κατάλογο /etc/systemd/system/*.wants. Το όνομα του συμβολικού συνδέσμου είναι το ίδιο με το όνομα του προτύπου, αλλά το αναγνωριστικό παρουσίας υπηρεσίας προστίθεται μετά το σύμβολο @. Για παράδειγμα, ας δημιουργήσουμε μια παρουσία της υπηρεσίας serial-getty on σειριακή θύρα/dev/ttyS2 (η εντολή systemctl enable δεν υποστηρίζεται για παρουσίες υπηρεσίας στο Debian Wheezy):
# systemctl εκκίνηση [email προστατευμένο]# mkdir /etc/systemd/system/getty.target.wants/ # ln -s /lib/systemd/system/ [email προστατευμένο]/etc/systemd/system/getty.target.wants/ [email προστατευμένο]Το αναγνωριστικό παρουσίας υπηρεσίας αντικαθίσταται στο πρότυπο αρχείου υπηρεσίας στη θέση των ακόλουθων χαρακτήρων μπαλαντέρ:
%I - το αναγνωριστικό παρουσίας υπηρεσίας εισάγεται στο πρότυπο ως έχει,
%i - το αναγνωριστικό παρουσίας υπηρεσίας εισάγεται στο πρότυπο σε μορφή διαφυγής. Αυτό μπορεί να είναι απαραίτητο εάν το αναγνωριστικό παρουσίας υπηρεσίας είναι μια διαδρομή συσκευής που περιέχει κάθετες προς τα εμπρός. Για να χρησιμοποιήσετε αυτήν τη διαδρομή στο όνομα αρχείου της μονάδας συσκευής (dev-%i.device), πρέπει να διαφύγετε από όλους τους ειδικούς χαρακτήρες.

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

Για παράδειγμα, αν κάποιοι μεμονωμένες ρυθμίσειςγια το getty στο tty2, απλώς δημιουργήστε ένα αρχείο υπηρεσίας /etc/systemd/system/ [email προστατευμένο]και εισάγετε μεμονωμένες ρυθμίσεις σε αυτό. Οι χαρακτήρες μπαλαντέρ συνεχίζουν να λειτουργούν σε αυτό το αρχείο. Μια πλήρης λίστα με αυτά μπορείτε να βρείτε στη σελίδα man systemd.unit(5).

Παράδειγμα προτύπου αρχείου υπηρεσίας [email προστατευμένο]:
Description=Serial Getty στο %I BindTo=dev-%i.device After=dev-%i.device systemd-user-sessions.service ExecStart=-/sbin/agetty -s %I 115200,38400,9600 Restart=πάντα RestartSec =0 Πλήρη έκδοσητο αρχείο μπορεί να προβληθεί σε πραγματικό σύστημα.

3. Εκτελέστε το getty στις κονσόλες

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

Το systemd έχει δύο πρότυπα αρχείων υπηρεσίας για τερματικά:
[email προστατευμένο] - πρότυπο για την εκκίνηση εικονικών τερματικών, η μεταβλητή TERM χρησιμοποιεί την τιμή linux,
[email προστατευμένο] - πρότυπο για την εκκίνηση τερματικών σειριακές θύρες. η μεταβλητή TERM χρησιμοποιεί την τιμή vt102. Σε αυτό το πρότυπο, σε αντίθεση με το προηγούμενο, δεν υπάρχουν ρυθμίσεις για την εκκαθάριση του buffer κύλισης, αφού απλά δεν υπάρχει.

Η κύρια διαφορά μεταξύ του systemd και του SysV init είναι ότι τα τερματικά εκκινούνται κατόπιν ζήτησης και όχι κατά την εκκίνηση του συστήματος. Υπάρχουν μόνο δύο εξαιρέσεις: η κονσόλα tty1 ξεκινά αυτόματα, σε γραφική λειτουργία εκκινείται η διαχείριση οθόνης σε αυτήν και getty σε λειτουργία κειμένου, η κονσόλα tty6 ξεκινά επίσης αυτόματα και το getty εκκινείται πάντα σε αυτήν, έτσι ώστε να υπάρχει πάντα τουλάχιστον μία κονσόλα κειμένου για την επίλυση διαφόρων προβλημάτων.

Οι προεπιλεγμένες ρυθμίσεις μπορούν να αλλάξουν στο αρχείο /etc/systemd/systemd-logind.conf(το αρχείο /etc/systemd/logind.conf καθορίστηκε στο εγχειρίδιο):
NAutoVTs- αριθμός τερματικών που εκκινούνται αυτόματα (προεπιλογή - 6),
ReserveVT- αριθμός της δεσμευμένης εικονικής κονσόλας (προεπιλογή - 6).

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

Για να ρυθμίσει αυτόματα άλλες σειριακές κονσόλες, το systemd χρησιμοποιεί το πρόγραμμα systemd-getty-generator, το οποίο εντοπίζει τις διαθέσιμες σειριακές κονσόλες και ξεκινά μια παρουσία της υπηρεσίας σε καθεμία από αυτές [email προστατευμένο]. Αυτό μπορεί να περιλαμβάνει κονσόλες που παρέχονται από συστήματα εικονικοποίησης. Για να εκκινήσετε ένα τερματικό σε οποιαδήποτε σειριακή κονσόλα, πρέπει να χρησιμοποιήσετε τις ήδη γνωστές εντολές:

4. Ενεργοποίηση υποδοχής

Η ενεργοποίηση πρίζας είναι μια τεχνική για την εκκίνηση υπηρεσιών κατά την πρόσβαση στην αντίστοιχη υποδοχή, παρόμοια με αυτή που εφαρμόζεται στους δαίμονες inetd και xinetd. Το systemd υποστηρίζει τρία σχήματα εκκίνησης υπηρεσιών χρησιμοποιώντας την ενεργοποίηση υποδοχής:

1. Σχέδιο που επικεντρώνεται στην παράλληλη έναρξη των υπηρεσιών και στην απλοποίηση των εξαρτήσεων μεταξύ τους. Για παράδειγμα, το syslog και το dbus μπορούν να εκτελούνται παράλληλα με τις υπηρεσίες που τα χρησιμοποιούν. Το systemd δημιουργεί ένα αρχείο υποδοχής και ξεκινά τόσο τις υπηρεσίες που εξυπηρετούν το αρχείο υποδοχής όσο και τις υπηρεσίες που το χρησιμοποιούν. Εάν η εξυπηρέτηση καταναλωτή ξεκινήσει πριν από την υπηρεσία παρόχου, το αίτημα θα μεταβεί στο αρχείο υποδοχής και θα περιμένει για επεξεργασία μέχρι να ξεκινήσει η υπηρεσία παρόχου.

2. Ένα σύστημα που επικεντρώνεται στην κατ' απαίτηση ενεργοποίηση μεμονωμένων, σπάνια χρησιμοποιούμενων υπηρεσιών. Ένα παράδειγμα μιας τέτοιας υπηρεσίας θα ήταν ο δαίμονας εκτύπωσης CUPS. Το systemd δημιουργεί ένα αρχείο υποδοχής που ακούει μόνο του. Όταν έρχεται ένα αίτημα για το αρχείο υποδοχής, το systemd θα ξεκινήσει το CUPS και θα του μεταβιβάσει το αρχείο υποδοχής.

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

Για παράδειγμα, ας διαμορφώσουμε την ενεργοποίηση υποδοχής SSH. Για να το κάνετε αυτό, πρέπει να δημιουργήσετε δύο αρχεία μονάδας: ένα αρχείο μονάδας που περιγράφει την υποδοχή και ένα αρχείο μονάδας που περιγράφει την υπηρεσία.

Τα περιεχόμενα του αρχείου sshd.socket φαίνονται παρακάτω:
Description=Υποδοχή SSH για διακομιστές ανά σύνδεση ListenStream=22 Accept=yes WantedBy=sockets.target Η οδηγία ListenStream καθορίζει τον αριθμό θύρας TCP στην οποία θα ακούγονται οι συνδέσεις.

Η οδηγία Accept καθορίζει τον τρόπο με τον οποίο η systemd πρέπει να αντιμετωπίζει τα εισερχόμενα αιτήματα. Εάν η τιμή είναι ναι, το ίδιο το systemd αποδέχεται τη σύνδεση και μεταβιβάζει το αρχείο υποδοχής σύνδεσης στην υπηρεσία, το οποίο αντιστοιχεί στο τρίτο σχήμα εκκίνησης υπηρεσιών. Εάν οριστεί σε όχι, το systemd μεταβιβάζει την υποδοχή ακρόασης στην υπηρεσία χωρίς να δέχεται συνδέσεις, σύμφωνα με το δεύτερο σχήμα εκκίνησης.

Με τη σειρά του, το αρχείο [email προστατευμένο]ως εξής:
Description=SSH Per-Connection Server για %I ExecStart=-/usr/sbin/sshd -i StandartInput=socket Το σύμβολο μείον μπροστά από τη γραμμή εντολών ExecStart σημαίνει ότι το systemd δεν θα θυμάται τον κωδικό εξόδου κάθε διεργασίας. Μπορείτε να επαναφέρετε τους κωδικούς ολοκλήρωσης όλων των υπηρεσιών χρησιμοποιώντας την εντολή systemctl επαναφορά-αποτυχία.

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

Για να ξεκινήσει η υπηρεσία, χρησιμοποιείται ένα αρχείο που περιγράφει την υποδοχή υπηρεσίας:
# systemctl enable sshd.socket # systemctl start sshd.socket Ως συνήθως, η κατάσταση της υπηρεσίας μπορεί να ελεγχθεί χρησιμοποιώντας την εντολή systemctl status sshd.socket. Μεταξύ άλλων πληροφοριών, η κατάσταση θα περιέχει έναν μετρητή για τον αριθμό των συνδέσεων που έγιναν αποδεκτές από την έναρξη της υπηρεσίας (Αποδεκτό) και έναν μετρητή για τον αριθμό των δραστικές ενώσεις(Συνδεδεμένος).

Μπορείτε να δείτε τη λίστα των ενεργών συνεδριών χρησιμοποιώντας την εντολή:
# systemctl --full | grep sshd Και οποιαδήποτε από τις παρουσίες υπηρεσίας μπορεί να τερματιστεί αναγκαστικά προσδιορίζοντας το αναγνωριστικό της:
# systemctl kill [email προστατευμένο]:22-172.31.0.4:47779.service Με αυτόν τον τρόπο, μπορείτε να ενεργοποιήσετε μόνο εκείνες τις υπηρεσίες που υποστηρίζουν τη λήψη ενός αρχείου υποδοχής. Οι υπηρεσίες που ανοίγουν ένα αρχείο υποδοχής από μόνες τους δεν μπορούν να ενεργοποιηθούν με αυτόν τον τρόπο.

Αξίζει να σημειωθεί ότι το systemd δεν υλοποιεί το πλήρες σύνολο χαρακτηριστικών που παρέχονται από τους δαίμονες inetd και xinetd. Ωστόσο, τα περισσότερα από αυτά είτε είναι ξεπερασμένα είτε εφαρμόζονται εύκολα με άλλα μέσα. Για παράδειγμα, η υποστήριξη για TCPMUX, RPC και ενσωματωμένες υπηρεσίες όπως ηχώ, ώρα, ημέρα, απόρριψη μπορεί να θεωρηθεί ξεπερασμένη. Ένα παράδειγμα μιας δυνατότητας που μπορεί να υλοποιηθεί με άλλα μέσα είναι οι λίστες ελέγχου πρόσβασης από διευθύνσεις IP: αυτό μπορεί να υλοποιηθεί χρησιμοποιώντας το φίλτρο πακέτων iptables. Ταυτόχρονα, το iptables σάς επιτρέπει να οργανώνετε πιο λεπτούς και αποτελεσματικούς περιορισμούς πρόσβασης, για παράδειγμα, να αποκλείετε διευθύνσεις IP που υπερβαίνουν το όριο των προσπαθειών σύνδεσης ανά μονάδα χρόνου κ.λπ.

5. Ενεργοποίηση υποδοχής δοχείων

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

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

Για τη δημιουργία ενός εικονικού περιβάλλοντος, το systemd χρησιμοποιεί αυτήν τη στιγμή το βοηθητικό πρόγραμμα systemd-nspawn, το οποίο οι συγγραφείς ελπίζουν ότι σύντομα θα αντικατασταθεί από το libvirt-lxc (μια ελαφρώς πιο λεπτομερής περιγραφή του systemd-nspawn θα εμφανιστεί στην επόμενη ανάρτηση).

Μπορεί να εγκατασταθεί μέσα στο δοχείο Διανομή Linux, διαφορετική από τη διανομή στο κεντρικό σύστημα. Για παράδειγμα, για Εγκαταστάσεις Fedoraκαι Debian, μπορείτε να χρησιμοποιήσετε τις αντίστοιχες εντολές:
# yum --releasever=19 --nogpg --installroot=/srv/mycontainer/ --disablerepo="*" --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal # debootstrap --arch=amd64 unstable / srv/mycontainer/ Αφού επαληθεύσετε ότι το κοντέινερ έχει φορτωθεί και εκτελείται, μπορείτε να ξεκινήσετε τη ρύθμιση του αρχείου υπηρεσίας για να ενεργοποιήσετε το κοντέινερ /etc/systemd/system/mycontainer.service:
Περιγραφή=Το μικρό μου κοντέινερ ExecStart=/usr/bin/systemd-nspawn -jbD /srv/mycontainer 3 KillMode=διαδικασία Δεν είναι ακόμη δυνατή η πρόσβαση στο κοντέινερ που προκύπτει, επομένως πρέπει να διαμορφώσετε έναν διακομιστή SSH σε αυτό. Αρχικά, ας διαμορφώσουμε το κοντέινερ ώστε να περιμένει για σύνδεση με τον διακομιστή SSH στο κεντρικό σύστημα στο αρχείο /etc/systemd/system/mycontainer.socket:
Περιγραφή=Η υποδοχή SSH του μικρού μου κοντέινερ ListenStream=23 Θύρα 23 του κεντρικού συστήματος θα χρησιμοποιηθεί για σύνδεση μέσω SSH στο κοντέινερ. Εάν θέλετε, μπορείτε επίσης να χρησιμοποιήσετε τη θύρα 22, η οποία περιμένει για σύνδεση σε ξεχωριστή διεύθυνση IP.

Τώρα πρέπει να ρυθμίσουμε την ενεργοποίηση υποδοχής του διακομιστή SSH μέσα στο κοντέινερ. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε τα αρχεία sshd.socket και [email προστατευμένο]από την προηγούμενη ενότητα, απλά πρέπει να θυμάστε να αλλάξετε τη θύρα 22 σε 23. Το μόνο που μένει είναι να δημιουργήσετε τους σωστούς συμβολικούς συνδέσμους για να ενεργοποιήσετε την υπηρεσία μέσα στο κοντέινερ. Επειδή η εντολή systemctl enable δεν υποστηρίζεται προηγούμενες εκδόσεις systemd, μπορείτε να το κάνετε ως εξής:
# chroot /srv/mycontainer ln -s /etc/systemd/system/sshd.socket /etc/systemd/system/sockets.target.wants Περισσότερα πιο πρόσφατες εκδόσειςΤο systemd μπορεί να το κάνει πιο απλά:
# systemctl --root=/srv/mycontainer enable sshd.socket Τώρα, όταν προσπαθείτε να συνδεθείτε στο 23 Θύρα TCPστο κεντρικό σύστημα, το κοντέινερ θα εκκινηθεί αυτόματα, μια υποδοχή θα περάσει σε αυτό και το systemd, που βρίσκεται μέσα στο κοντέινερ, θα εκκινήσει μια παρουσία της υπηρεσίας SSH για την εξυπηρέτηση της σύνδεσης.

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

Η εντολή systemd-nspawn run από το παράδειγμα αρχείου υπηρεσίας κοντέινερ περιέχει την επιλογή -j, η οποία δίνει εντολή στην εντολή να δημιουργήσει έναν συμβολικό σύνδεσμο στο κεντρικό σύστημα με το αρχείο καταγραφής journald που εκτελείται μέσα στο κοντέινερ. Όταν εκδίδετε την εντολή systemd-journalctl με την επιλογή -m στο κεντρικό σύστημα, μπορείτε να προβάλετε το συνδυασμένο ημερολόγιο του κεντρικού συστήματος και των κοντέινερ.

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

6. Ελέγξτε για εικονικότητα

Ορισμένα σενάρια πρέπει να εκτελούν μια υπηρεσία μόνο σε εικονικό περιβάλλον ή το αντίστροφο - μόνο στο κεντρικό σύστημα. Για να γίνει αυτό, τα κατάλληλα μέσα για την ανίχνευση του εικονικού περιβάλλοντος και τον προσδιορισμό του τύπου του προστίθενται στο σενάριο προετοιμασίας. Για να διευκολύνει αυτά τα κοινά βήματα, το systemd έχει προσθέσει πολλά εργαλεία ορισμού εικονικού περιβάλλοντος, καθένα από τα οποία μπορεί να είναι χρήσιμο σε συγκεκριμένες καταστάσεις. Αυτά τα εργαλεία σάς επιτρέπουν να ορίσετε έναν συγκεκριμένο τύπο εικονικοποίησης ενός από τους ακόλουθους τύπους:

1. Πλήρης εικονικοποίηση (vm): quemu, kvm, vmware, microsoft, oracle, xen, bochs,

2. Εικονική διαμόρφωση κοντέινερ (container): chroot, openvz, lxc, lxc-libvirt, systemd-nspawn.

Χρησιμοποιώντας μια οδηγία ConditionVirtualizationμπορείτε να καθορίσετε την προϋπόθεση για την έναρξη της υπηρεσίας: ναι - η υπηρεσία θα ξεκινήσει μέσα στο εικονικό περιβάλλον, όχι - η υπηρεσία θα ξεκινήσει μόνο στο κεντρικό σύστημα. Μπορείτε να καθορίσετε την τιμή vm ή κοντέινερ εάν η υπηρεσία πρέπει να εκκινηθεί μόνο όταν εντοπιστεί ένα εικονικό περιβάλλον από μία από αυτές τις ομάδες. Μπορείτε επίσης να καθορίσετε έναν συγκεκριμένο τύπο εικονικού περιβάλλοντος. Για να αντιστρέψετε την τιμή της επιλογής, χρησιμοποιήστε Θαυμαστικόστην αρχή της τιμής. Για παράδειγμα, η τιμή "!xen" δίνει εντολή στην υπηρεσία να εκτελείται στο κεντρικό σύστημα και μέσα σε οποιοδήποτε εικονικό περιβάλλον, με εξαίρεση το xen.

Χρησιμοποιώντας την εντολή systemd-detect-virtμπορείτε να προσδιορίσετε την παρουσία ενός εικονικού περιβάλλοντος και τον τύπο του από σενάρια. Εάν η εντολή εντοπίσει ότι εκτελέστηκε από εικονικό περιβάλλον, θα επιστρέψει έναν κωδικό εξόδου 0 και μια μη μηδενική τιμή εάν δεν βρέθηκε εικονικό περιβάλλον. Εάν εντοπιστεί εικονικό περιβάλλον, η εντολή εκτυπώνει τον τύπο του σε τυπική έξοδο. Χρησιμοποιώντας την επιλογή -qμπορείτε να απενεργοποιήσετε την έξοδο τύπου εικονικό περιβάλλον. Επιλογές -ντοΚαι -vΣας επιτρέπει να εντοπίζετε μόνο εργαλεία εικονικοποίησης κοντέινερ ή μόνο εργαλεία πλήρους εικονικοποίησης.

Τα προγράμματα που λειτουργούν με το δίαυλο DBus μπορούν να ανακαλύψουν τον τύπο του εικονικού περιβάλλοντος ζητώντας την αντίστοιχη ιδιότητα από το δίαυλο συστήματος:
$ gdbus κλήση --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1 --method org.freedesktop.DBus.Properties.Get org.freedesktop.systemd1.Manager Virtualization Εάν δεν βρεθεί εικονικοποίηση , αυτή η ιδιότητα περιέχει την κενή συμβολοσειρά. (Η εντολή θυμάται πολύ εύκολα, έτσι δεν είναι; Δόξα τω Θεώ για τα ρομπότ!)

Το Debian Wheezy διατίθεται με μια έκδοση του systemd που δεν υποστηρίζει έλεγχο εικονικότητας. Στο man systemd.unit γίνεται αναφορά στην οδηγία ConditionVirtualization, αλλά δεν υπάρχει εντολή systemd-detect-virt και η ερώτηση για την ιδιότητα DBus επιστρέφει ένα σφάλμα.

7. Τεκμηρίωση σέρβις

Τα αρχεία με περιγραφές υπηρεσιών ενδέχεται να περιέχουν οδηγίες με συνδέσμους σε τεκμηρίωση που σχετίζονται με αυτή η υπηρεσία. Για παράδειγμα, η ενότητα Unit ενός αρχείου υπηρεσίας μπορεί να μοιάζει με αυτό:
Description=openntpd Documentation=man:openntpd(8) http://www.openntpd.org Υποστηρίζονται τα συστήματα After=network.target Man/info και http/https. Εάν υπάρχουν σύνδεσμοι προς τεκμηρίωση στο αρχείο υπηρεσίας, θα δείτε γραμμές Εγγράφων και συνδέσμους προς τεκμηρίωση στην έξοδο πληροφοριών σχετικά με την κατάσταση της υπηρεσίας χρησιμοποιώντας την εντολή systemctl status. Εάν χρησιμοποιείτε ένα τερματικό που εκτελείται σε λειτουργία γραφικών, οι σύνδεσμοι θα επισημανθούν και κάνοντας κλικ σε αυτούς θα ανοίξει η τεκμηρίωση.

Εάν δεν έχετε γραφικό τερματικό, μπορείτε να ανοίξετε συνδέσμους προς την τεκμηρίωση χρησιμοποιώντας την ακόλουθη εντολή:
$ systemctl help openntpd.service Δυστυχώς, αυτή η δυνατότητα δεν υποστηρίζεται στο systemd που αποστέλλεται με το Debian Wheezy.

8. Χρονόμετρα Watchdog

Το Systemd υποστηρίζει δύο τύπους φυλάκων - υλικό και λογισμικό.

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

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

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

8.1. Hardware watchdog timer

Η παρακολούθηση υλικού αντιπροσωπεύεται στο σύστημα από το αρχείο συσκευής /dev/watchdog. Οι ρυθμίσεις συστήματος που σχετίζονται με το χρονόμετρο υλικού βρίσκονται στο αρχείο /etc/systemd/system.conf.

Διευθυντικός RuntimeWatchdogSec Η προεπιλογή είναι μηδέν, γεγονός που απενεργοποιεί τη χρήση του χρονοδιακόπτη υλικού του συστήματος. Εάν καθορίσετε μια μη μηδενική τιμή, το systemd θα στείλει σήματα στον επιτηρητή υλικού με περίοδο ίση με το μισό της καθορισμένης περιόδου.

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

Μπορείτε να προσδιορίσετε εάν υπάρχει χρονόμετρο παρακολούθησης υλικού στο σύστημα χρησιμοποιώντας την εντολή wdctlαπό τη συσκευασία util-linux(Το Debian Wheezy δεν έχει τέτοια εντολή σε αυτό το πακέτο).

8.2. Λογισμικό παρακολούθησης χρονόμετρα

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

Οι ρυθμίσεις στο αρχείο υπηρεσίας σάς επιτρέπουν να προσδιορίσετε πώς αντιδρά το systemd στην απουσία σημάτων από την υπηρεσία κατά τη διάρκεια της περιόδου λήξης.

Διευθυντικός WatchdogSec ορίζει την περίοδο αναμονής για σήματα από την υπηρεσία. Αυτή η τιμή μεταβιβάζεται στην υπηρεσία στη μεταβλητή περιβάλλοντος WATCHDOG_USEC.

Διευθυντικός Επανεκκίνηση καθορίζει ρυθμίσεις για τις συνθήκες επανεκκίνησης της υπηρεσίας. Η τιμή on-failure αντιστοιχεί στην επανεκκίνηση της υπηρεσίας εάν αποτύχει και περιλαμβάνει επίσης την κατάσταση κατά την ενεργοποίηση του χρονοδιακόπτη παρακολούθησης.

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

Διευθυντικός StartLimitBurst καθορίζει τον αριθμό των αποτυχιών μετά την επίτευξη των οποίων θα εκτελεστεί η ενέργεια.

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

Διευθυντικός StartLimitAction καθορίζει την ενέργεια που θα εκτελεστεί. Εννοια κανέναςδεν προσδιορίζει καμία ενέργεια. Εννοια επανεκκίνησηυποδεικνύει την ανάγκη επανεκκίνησης ολόκληρου του συστήματος σε κανονική λειτουργία. Εννοια επανεκκίνηση-δύναμηθα στείλει το σύστημα για επανεκκίνηση χωρίς να σταματήσει σωστά τις υπηρεσίες. Εννοια επανεκκίνηση-άμεσηθα στείλει το σύστημα σε άμεση επανεκκίνηση χωρίς να σταματήσει σωστά οι υπηρεσίες και να αποσυναρμολογηθεί τα συστήματα αρχείων.

Διευθυντικός OnFailureσας επιτρέπει να καθορίσετε τη μονάδα που θα εκκινηθεί σε περίπτωση αποτυχίας σέρβις. Αυτή η μονάδα μπορεί να διαμορφωθεί, για παράδειγμα, με ένα σενάριο για την αποστολή ειδοποιήσεων στον διαχειριστή συστήματος από ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗή μέσω SMS.

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

Το Systemd έχει τρία επίπεδα (τύπους) ενεργειών που στοχεύουν στη διακοπή μιας υπηρεσίας ή οποιασδήποτε άλλης μονάδας.

* Μπορείτε να σταματήσετε την υπηρεσία, δηλαδή να σταματήσετε να τρέχετε ήδη τρέχουσες διαδικασίεςΥπηρεσίες. Ταυτόχρονα, παραμένει η δυνατότητα μεταγενέστερης εκτόξευσης, τόσο χειροκίνητα (μέσω της εντολής systemctl start) όσο και αυτόματα (όταν εκκινεί το σύστημα, όταν φθάνει ένα αίτημα μέσω πρίζας ή διαύλου συστήματος, όταν ενεργοποιείται ο χρονοδιακόπτης, όταν συνδέετε τον κατάλληλο εξοπλισμό κ.λπ.).
Ως εκ τούτου, η διακοπή της υπηρεσίας είναι ένα προσωρινό μέτρο και δεν παρέχει καμία εγγύηση για το μέλλον.
Για παράδειγμα, εξετάστε το ενδεχόμενο διακοπής της υπηρεσίας NTPd, η οποία είναι υπεύθυνη για το συγχρονισμό του χρόνου μέσω του δικτύου:


systemctl stop ntpd.service

Το ανάλογο αυτής της εντολής στο κλασικό SysV init είναι


υπηρεσία ntpd στάση

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

* Μπορείτε να απενεργοποιήσετε μια υπηρεσία, δηλαδή να την αποσυνδέσετε από όλους τους κανόνες ενεργοποίησης. Ως αποτέλεσμα, η υπηρεσία δεν θα ξεκινά πλέον αυτόματα είτε κατά την εκκίνηση του συστήματος, είτε κατά την πρόσβαση σε πρίζα ή διεύθυνση στο λεωφορείο, είτε κατά τη σύνδεση εξοπλισμού κ.λπ. Αλλά ταυτόχρονα, παραμένει δυνατή η «μη αυτόματη έναρξη» της υπηρεσίας με την εντολή systemctl start. Λάβετε υπόψη ότι όταν είναι απενεργοποιημένο, υπηρεσία λειτουργίας, η εκτέλεσή του στην τρέχουσα συνεδρία δεν σταματά - αυτό πρέπει να γίνει ξεχωριστά, διαφορετικά οι διαδικασίες υπηρεσίας θα εκτελούνται μέχρι να απενεργοποιηθεί το σύστημα (αλλά, φυσικά, δεν θα ξεκινήσει την επόμενη φορά που θα ενεργοποιηθεί).
Ας δούμε την απενεργοποίηση μιας υπηρεσίας χρησιμοποιώντας το ίδιο NTPd ως παράδειγμα:



Στα κλασικά συστήματα SysV, μια παρόμοια εντολή θα μοιάζει


chkconfig ntpd απενεργοποιημένο

Όπως και στην προηγούμενη περίπτωση, στο Fedora 15 η δεύτερη από αυτές τις εντολές θα λειτουργεί παρόμοια με την πρώτη.
Πολύ συχνά πρέπει να συνδυάσετε τις ενέργειες απενεργοποίησης και διακοπής μιας υπηρεσίας - αυτή η συνδυασμένη λειτουργία διασφαλίζει ότι οι ήδη εκτελούμενες διεργασίες υπηρεσίας τερματίζονται και η υπηρεσία δεν θα ξεκινά πλέον αυτόματα (αλλά μπορεί να ξεκινήσει χειροκίνητα):


systemctl απενεργοποιήστε το ntpd.service
systemctl stop ntpd.service

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

* Μπορείτε να αποκλείσετε (μάσκα) την υπηρεσία. Αυτή η λειτουργία είναι παρόμοια με την απενεργοποίηση, αλλά έχει ισχυρότερο αποτέλεσμα. Εάν η απενεργοποίηση ακυρώνει μόνο τη δυνατότητα αυτόματη εκκίνησηυπηρεσίες, αλλά η πιθανότητα παραμένει χειροκίνητη εκκίνηση, τότε ο αποκλεισμός εξαλείφει και τις δύο αυτές δυνατότητες. Λάβετε υπόψη ότι η χρήση αυτής της επιλογής, εάν δεν κατανοείτε τις αρχές λειτουργίας της, μπορεί να οδηγήσει σε δύσκολα διαγνωστικά σφάλματα.
Ωστόσο, ας δούμε ένα παράδειγμα αποκλεισμού της ίδιας υπηρεσίας NTPd:


ln -s /dev/null /etc/systemd/system/ntpd.service
systemctl daemon-reload

Έτσι, ο αποκλεισμός καταλήγει στη δημιουργία ενός συμβολικού συνδέσμου με το όνομα της αντίστοιχης υπηρεσίας να δείχνει στο /dev/null.
Σημείωση Μετάφραση: Στη συνέχεια, προστέθηκε υποστήριξη για τις εντολές mask and unmask στο πρόγραμμα systemctl, απλοποιώντας τη διαδικασία αποκλεισμού και ξεμπλοκαρίσματος μονάδων. Για παράδειγμα, για να αποκλείσετε την υπηρεσία ntpd.service, η εντολή systemctl mask ntpd.service είναι πλέον επαρκής. Αυτό θα κάνει ουσιαστικά το ίδιο πράγμα με την παραπάνω εντολή ln.
Μετά από μια τέτοια λειτουργία, η υπηρεσία δεν μπορεί να ξεκινήσει ούτε χειροκίνητα ούτε αυτόματα. Ο συμβολικός σύνδεσμος δημιουργείται στον κατάλογο /etc/systemd/system/ και το όνομά του πρέπει να ταιριάζει με το όνομα του αρχείου περιγραφής υπηρεσίας από τον κατάλογο /lib/systemd/system/ (στην περίπτωσή μας, ntpd.service).

Σημειώστε ότι το systemd διαβάζει αρχεία διαμόρφωσης και από τους δύο αυτούς καταλόγους, αλλά τα αρχεία από το /etc (που διαχειρίζεται ο διαχειριστής του συστήματος) έχουν
προτεραιότητα έναντι των αρχείων από το /lib (τα οποία διαχειρίζεται ο διαχειριστής πακέτων). Δημιουργώντας λοιπόν έναν συμβολικό σύνδεσμο (ή ένα κανονικό αρχείο)
Το /etc/systemd/system/ntpd.service αποτρέπει την ανάγνωση του τυπικού αρχείου διαμόρφωσης /lib/systemd/system/ntpd.service.
Στην έξοδο κατάστασης systemctl, οι αποκλεισμένες υπηρεσίες επισημαίνονται με τη λέξη masked. Η προσπάθεια εκκίνησης τέτοιων υπηρεσιών με την εντολή systemctl start θα αποτύχει.
Στην κλασική αρχή SysV, δεν υπάρχει τυπική υλοποίηση αυτής της δυνατότητας. Ένα παρόμοιο αποτέλεσμα μπορεί να επιτευχθεί χρησιμοποιώντας "πατερίτσες", για παράδειγμα, προσθέτοντας την εντολή exit 0 στην αρχή του σεναρίου έναρξης. Ωστόσο, τέτοιες λύσεις έχουν μια σειρά από μειονεκτήματα, για παράδειγμα, την πιθανότητα διενέξεων με τον διαχειριστή πακέτων (με την επόμενη ενημέρωση, το διορθωμένο σενάριο μπορεί απλώς να αντικατασταθεί από το αντίστοιχο αρχείο από το πακέτο).

Αξίζει να σημειωθεί ότι ο αποκλεισμός μιας υπηρεσίας, όπως και η απενεργοποίησή της, είναι μόνιμο μέτρο.
Σημείωση Μετάφραση: Έχοντας περιγράψει λεπτομερώς την αρχή λειτουργίας του αποκλεισμού μιας υπηρεσίας (μονάδας), ο συγγραφέας ξεχνά να δώσει πρακτικά παραδείγματα καταστάσεων όταν αυτό το χαρακτηριστικό αποδεικνύεται χρήσιμο. Ειδικότερα, μερικές φορές είναι απαραίτητο να αποτραπεί εντελώς η έναρξη μιας υπηρεσίας σε οποιαδήποτε κατάσταση. Ταυτόχρονα, μην ξεχνάτε ότι στα σενάρια μετά την εγκατάσταση του διαχειριστή πακέτων ή, ας πούμε, στις εργασίες cron, αντί για systemctl try-restart (υπηρεσία condrestart), μπορεί να οριστεί λανθασμένα systemctl restart (service restart), το οποίο είναι μια άμεση ένδειξη έναρξης της υπηρεσίας, εάν δεν εκτελείται ήδη. Ως αποτέλεσμα τέτοιων σφαλμάτων, μια απενεργοποιημένη υπηρεσία μπορεί να «ζωντανέψει» την πιο ακατάλληλη στιγμή.

Αφού διαβάσει τα παραπάνω, ο αναγνώστης μπορεί να έχει μια ερώτηση: πώς να αναιρέσετε τις αλλαγές που έγιναν; Λοιπόν, δεν υπάρχει τίποτα περίπλοκο εδώ: το systemctl start ακυρώνει τη δράση του systemctl stop, το systemctl enable ακυρώνει τη δράση του systemctl disable και το rm ακυρώνει τη δράση του ln.