Πώς να διαχειριστείτε τις υπηρεσίες και τις μονάδες Systemd χρησιμοποιώντας το Systemctl στο Linux
Το Systemctl είναι ένα βοηθητικό πρόγραμμα systemd που είναι υπεύθυνο για τον έλεγχο του systemd του διαχειριστή συστήματος και υπηρεσιών. Το Systemd είναι μια συλλογή από δαίμονες διαχείρισης συστήματος, βοηθητικά προγράμματα και βιβλιοθήκες που χρησιμεύει ως αντικατάσταση του δαίμονα System V init. Το Systemd λειτουργεί ως κεντρική πλατφόρμα διαχείρισης και διαμόρφωσης για σύστημα τύπου UNIX.
Στο Linux, το Ecosystem Systemd έχει εφαρμοστεί στο μεγαλύτερο μέρος της τυπικής διανομής Linux με μερικές εξαιρέσεις. Το Systemd είναι η μητρική διαδικασία όλων των άλλων δαιμόνων συχνά αλλά όχι πάντα.
Αυτό το άρθρο στοχεύει να ρίξει φως στο \Πώς να ελέγχετε το σύστημα και τις υπηρεσίες” σε ένα σύστημα που εκτελεί το σύστημα.
Ξεκινώντας με Systemtd και Systemctl Basics
1. Αρχικά, ελέγξτε εάν το systemd είναι εγκατεστημένο στο σύστημά σας ή όχι και ποια είναι η έκδοση του τρέχοντος εγκατεστημένου Systemd;
# systemctl --version systemd 215 +PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR
Είναι σαφές από το παραπάνω παράδειγμα ότι έχουμε εγκαταστήσει την έκδοση 215 του συστήματος.
2. Ελέγξτε πού είναι εγκατεστημένα τα δυαδικά αρχεία και οι βιβλιοθήκες των systemd και systemctl.
# whereis systemd systemd: /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz # whereis systemctl systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
3. Ελέγξτε εάν το systemd εκτελείται ή όχι.
# ps -eaf | grep [s]ystemd root 1 0 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 root 444 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-journald root 469 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-udevd root 555 1 0 16:27 ? 00:00:00 /usr/lib/systemd/systemd-logind dbus 556 1 0 16:27 ? 00:00:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
Σημείωση: το systemd εκτελείται ως γονικός δαίμονας (PID=1). Στην παραπάνω εντολή ps με (-e) επιλέξτε όλες τις διεργασίες, (-a) επιλέξτε όλες τις διεργασίες εκτός από τους οδηγούς περιόδου σύνδεσης και ( -f) για καταχώριση πλήρους μορφής (π.χ. -eaf).
Επίσης, σημειώστε τις αγκύλες στο παραπάνω παράδειγμα και τα υπόλοιπα παραδείγματα που θα ακολουθήσουν. Η έκφραση τετράγωνης αγκύλης είναι μέρος της αντιστοίχισης μοτίβων κατηγορίας χαρακτήρων του grep.
4. Αναλύστε τη διαδικασία εκκίνησης του συστήματος.
# systemd-analyze Startup finished in 487ms (kernel) + 2.776s (initrd) + 20.229s (userspace) = 23.493s
5. Αναλύστε το χρόνο που χρειάζεται κάθε διαδικασία κατά την εκκίνηση.
# systemd-analyze blame 8.565s mariadb.service 7.991s webmin.service 6.095s postfix.service 4.311s httpd.service 3.926s firewalld.service 3.780s kdump.service 3.238s tuned.service 1.712s network.service 1.394s lvm2-monitor.service 1.126s systemd-logind.service ....
6. Αναλύστε την κρίσιμη αλυσίδα κατά την εκκίνηση.
# systemd-analyze critical-chain The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. multi-user.target @20.222s └─mariadb.service @11.657s +8.565s └─network.target @11.168s └─network.service @9.456s +1.712s └─NetworkManager.service @8.858s +596ms └─firewalld.service @4.931s +3.926s └─basic.target @4.916s └─sockets.target @4.916s └─dbus.socket @4.916s └─sysinit.target @4.905s └─systemd-update-utmp.service @4.864s +39ms └─auditd.service @4.563s +301ms └─systemd-tmpfiles-setup.service @4.485s +69ms └─rhel-import-state.service @4.342s +142ms └─local-fs.target @4.324s └─boot.mount @4.286s +31ms └─\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d19608096 └─dev-disk-by\x2duuid-79f594ad\x2da332\x2d4730\x2dbb5f\x2d85d196080964.device @4
Σημαντικό: Το Systemctl δέχεται υπηρεσίες (.service), σημείο τοποθέτησης (.mount), πρίζες ( .socket) και συσκευές (.device) ως μονάδες.
7. Καταχωρίστε όλες τις διαθέσιμες μονάδες.
# systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.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 disabled brandbot.path disabled .....
8. Καταχωρίστε όλες τις εκτελούμενες μονάδες.
# systemctl list-units UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File Syste sys-devices-pc...0-1:0:0:0-block-sr0.device loaded active plugged VBOX_CD-ROM sys-devices-pc...:00:03.0-net-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter sys-devices-pc...00:05.0-sound-card0.device loaded active plugged 82801AA AC'97 Audio Controller sys-devices-pc...:0:0-block-sda-sda1.device loaded active plugged VBOX_HARDDISK sys-devices-pc...:0:0-block-sda-sda2.device loaded active plugged LVM PV Qzyo3l-qYaL-uRUa-Cjuk-pljo-qKtX-VgBQ8 sys-devices-pc...0-2:0:0:0-block-sda.device loaded active plugged VBOX_HARDDISK sys-devices-pl...erial8250-tty-ttyS0.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS0 sys-devices-pl...erial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1 sys-devices-pl...erial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2 sys-devices-pl...erial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3 sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices/virtual/block/dm-0 sys-devices-virtual-block-dm\x2d1.device loaded active plugged /sys/devices/virtual/block/dm-1 sys-module-configfs.device loaded active plugged /sys/module/configfs ...
9. Καταχωρίστε όλες τις μονάδες που απέτυχαν.
# systemctl --failed UNIT LOAD ACTIVE SUB DESCRIPTION kdump.service loaded failed failed Crash recovery kernel arming LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 1 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
10. Ελέγξτε εάν μια Μονάδα (cron.service) είναι ενεργοποιημένη ή όχι;.
# systemctl is-enabled crond.service enabled
11. Ελέγξτε εάν μια Μονάδα ή μια Υπηρεσία εκτελείται ή όχι;.
# systemctl status firewalld.service firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since Tue 2015-04-28 16:27:55 IST; 34min ago Main PID: 549 (firewalld) CGroup: /system.slice/firewalld.service └─549 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Apr 28 16:27:51 tecmint systemd[1]: Starting firewalld - dynamic firewall daemon... Apr 28 16:27:55 tecmint systemd[1]: Started firewalld - dynamic firewall daemon.
Έλεγχος και διαχείριση υπηρεσιών με χρήση Systemctl
12. Καταχωρίστε όλες τις υπηρεσίες (συμπεριλαμβανομένων των ενεργοποιημένων και απενεργοποιημένων).
# systemctl list-unit-files --type=service UNIT FILE STATE arp-ethers.service disabled auditd.service enabled disabled blk-availability.service disabled brandbot.service static collectd.service disabled console-getty.service disabled console-shell.service disabled cpupower.service disabled crond.service enabled dbus-org.fedoraproject.FirewallD1.service enabled ....
13. Πώς μπορώ να ξεκινήσω, να επανεκκινήσω, να σταματήσω, να φορτώσω ξανά και να ελέγξω την κατάσταση μιας υπηρεσίας (httpd.service) στο Linux.
# systemctl start httpd.service # systemctl restart httpd.service # systemctl stop httpd.service # systemctl reload httpd.service # systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: active (running) since Tue 2015-04-28 17:21:30 IST; 6s ago Process: 2876 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) Main PID: 2881 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─2881 /usr/sbin/httpd -DFOREGROUND ├─2884 /usr/sbin/httpd -DFOREGROUND ├─2885 /usr/sbin/httpd -DFOREGROUND ├─2886 /usr/sbin/httpd -DFOREGROUND ├─2887 /usr/sbin/httpd -DFOREGROUND └─2888 /usr/sbin/httpd -DFOREGROUND Apr 28 17:21:30 tecmint systemd[1]: Starting The Apache HTTP Server... Apr 28 17:21:30 tecmint httpd[2881]: AH00558: httpd: Could not reliably determine the server's fully q...ssage Apr 28 17:21:30 tecmint systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full.
Σημείωση: Όταν χρησιμοποιούμε εντολές όπως start, restart, stop και reload με systemctl, δεν θα λάβουμε έξοδο στο τερματικό, η μόνη εντολή status θα εκτυπώσει την έξοδο.
14. Πώς να ενεργοποιήσετε μια υπηρεσία και να ενεργοποιήσετε ή να απενεργοποιήσετε μια υπηρεσία κατά την εκκίνηση (αυτόματη εκκίνηση της υπηρεσίας κατά την εκκίνηση του συστήματος).
# systemctl is-active httpd.service # systemctl enable httpd.service # systemctl disable httpd.service
15. Τρόπος κάλυψης (καθιστώντας αδύνατη την εκκίνηση) ή απομάκρυνσης μιας υπηρεσίας (httpd.service).
# systemctl mask httpd.service ln -s '/dev/null' '/etc/systemd/system/httpd.service' # systemctl unmask httpd.service rm '/etc/systemd/system/httpd.service'
16. Πώς να σκοτώσετε μια υπηρεσία χρησιμοποιώντας την εντολή systemctl.
# systemctl kill httpd # systemctl status httpd httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: failed (Result: exit-code) since Tue 2015-04-28 18:01:42 IST; 28min ago Main PID: 2881 (code=exited, status=0/SUCCESS) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" Apr 28 17:37:29 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:29 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:39 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:39 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:49 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:49 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:59 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 17:37:59 tecmint systemd[1]: httpd.service: Got notification message from PID 2881, but recepti...bled. Apr 28 18:01:42 tecmint systemd[1]: httpd.service: control process exited, code=exited status=226 Apr 28 18:01:42 tecmint systemd[1]: Unit httpd.service entered failed state. Hint: Some lines were ellipsized, use -l to show in full.
Έλεγχος και διαχείριση σημείων προσάρτησης χρησιμοποιώντας το Systemctl
17. Καταχωρίστε όλα τα σημεία προσάρτησης του συστήματος.
# systemctl list-unit-files --type=mount UNIT FILE STATE dev-hugepages.mount static dev-mqueue.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 disabled
18. Πώς μπορώ να τοποθετήσω, να αποσυναρμολογήσω, να επανατοποθετήσω, να φορτώσω ξανά τα σημεία στήριξης του συστήματος και επίσης να ελέγξω την κατάσταση των σημείων προσάρτησης στο σύστημα;
# systemctl start tmp.mount # systemctl stop tmp.mount # systemctl restart tmp.mount # systemctl reload tmp.mount # systemctl status tmp.mount tmp.mount - Temporary Directory Loaded: loaded (/usr/lib/systemd/system/tmp.mount; disabled) Active: active (mounted) since Tue 2015-04-28 17:46:06 IST; 2min 48s ago Where: /tmp What: tmpfs Docs: man:hier(7) http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems Process: 3908 ExecMount=/bin/mount tmpfs /tmp -t tmpfs -o mode=1777,strictatime (code=exited, status=0/SUCCESS) Apr 28 17:46:06 tecmint systemd[1]: Mounting Temporary Directory... Apr 28 17:46:06 tecmint systemd[1]: tmp.mount: Directory /tmp to mount over is not empty, mounting anyway. Apr 28 17:46:06 tecmint systemd[1]: Mounted Temporary Directory.
19. Πώς να ενεργοποιήσετε, να ενεργοποιήσετε ή να απενεργοποιήσετε ένα σημείο προσάρτησης κατά την εκκίνηση (αυτόματη προσάρτηση κατά την εκκίνηση του συστήματος).
# systemctl is-active tmp.mount # systemctl enable tmp.mount # systemctl disable tmp.mount
20. Τρόπος απόκρυψης (καθιστώντας αδύνατη την εκκίνηση) ή απομάκρυνσης ενός σημείου προσάρτησης στο Linux.
# systemctl mask tmp.mount ln -s '/dev/null' '/etc/systemd/system/tmp.mount' # systemctl unmask tmp.mount rm '/etc/systemd/system/tmp.mount'
Έλεγχος και διαχείριση υποδοχών χρησιμοποιώντας το Systemctl
21. Καταχωρίστε όλες τις διαθέσιμες υποδοχές συστήματος.
# systemctl list-unit-files --type=socket UNIT FILE STATE dbus.socket static dm-event.socket enabled lvm2-lvmetad.socket enabled rsyncd.socket disabled sshd.socket disabled syslog.socket static systemd-initctl.socket static systemd-journald.socket static systemd-shutdownd.socket static systemd-udevd-control.socket static systemd-udevd-kernel.socket static 11 unit files listed.
22. Πώς μπορώ να ξεκινήσω, να επανεκκινήσω, να σταματήσω, να φορτώσω ξανά και να ελέγξω την κατάσταση μιας υποδοχής (παράδειγμα: cups.socket) στο Linux.
# systemctl start cups.socket # systemctl restart cups.socket # systemctl stop cups.socket # systemctl reload cups.socket # systemctl status cups.socket cups.socket - CUPS Printing Service Sockets Loaded: loaded (/usr/lib/systemd/system/cups.socket; enabled) Active: active (listening) since Tue 2015-04-28 18:10:59 IST; 8s ago Listen: /var/run/cups/cups.sock (Stream) Apr 28 18:10:59 tecmint systemd[1]: Starting CUPS Printing Service Sockets. Apr 28 18:10:59 tecmint systemd[1]: Listening on CUPS Printing Service Sockets.
23. Τρόπος ενεργοποίησης μιας υποδοχής και ενεργοποίησης ή απενεργοποίησης κατά την εκκίνηση (αυτόματη εκκίνηση υποδοχής κατά την εκκίνηση του συστήματος).
# systemctl is-active cups.socket # systemctl enable cups.socket # systemctl disable cups.socket
24. Τρόπος κάλυψης (καθιστώντας αδύνατη την εκκίνηση) ή ξεμάσκας μιας υποδοχής (κύπελλα. πρίζα).
# systemctl mask cups.socket ln -s '/dev/null' '/etc/systemd/system/cups.socket' # systemctl unmask cups.socket rm '/etc/systemd/system/cups.socket'