Cách quản lý dịch vụ Systemd bằng Systemctl trên Linux

theanh

Administrator
Nhân viên
Systemd là một quy trình chuẩn để quản lý các dịch vụ khởi động trong hệ điều hành Linux. Nó được sử dụng để kiểm soát các chương trình nào chạy khi hệ thống Linux khởi động. Nó là một trình quản lý hệ thống và đã trở thành tiêu chuẩn mới cho các hệ điều hành Linux. Systemd cho phép bạn tạo một dịch vụ systemd tùy chỉnh để chạy và quản lý bất kỳ quy trình nào. Trong hướng dẫn này, chúng tôi sẽ giải thích cách quản lý các dịch vụ bằng systemd trên Linux.

Điều kiện tiên quyết​

  • Một máy chủ chạy Linux với Systemd, tôi sẽ sử dụng máy chủ Ubuntu 20.04 ở đây.
  • Một mật khẩu gốc được cấu hình cho máy chủ.

Xác minh Systemd​

Theo mặc định, Systemd được cài đặt sẵn trong tất cả các hệ điều hành chính. Bạn có thể xác minh phiên bản Systemd đã cài đặt bằng lệnh sau:
Mã:
systemctl --version
Bạn sẽ thấy kết quả sau:
Mã:
systemd 245 (245.4-4ubuntu3)+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
Bạn có thể tìm vị trí của Systemd bằng lệnh sau:
Mã:
whereis systemd
Bạn sẽ nhận được kết quả sau:
Mã:
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
Để tìm vị trí systemctl, hãy chạy lệnh sau:
Mã:
systemctl ở đâu
Bạn sẽ nhận được kết quả đầu ra sau:
Mã:
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
Bạn cũng có thể xác minh xem Systemd có đang chạy hay không bằng lệnh sau:
Mã:
ps -eaf | grep systemd
Bạn sẽ nhận được kết quả sau:
Mã:
root 269 1 0 09:57 ? 00:00:01 /lib/systemd/systemd-journaldroot 294 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-udevdsystemd+ 297 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-networkdmessage+ 319 1 0 09:57 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-onlyroot 329 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-logindsystemd+ 382 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-resolvedroot 1128 1 0 10:47 ? 00:00:00 /lib/systemd/systemd --userroot 1177 1152 0 10:48 pts/0 00:00:00 grep --color=auto systemd
Bạn cũng có thể phân tích thời gian thực hiện của từng tiến trình khi khởi động hệ thống bằng lệnh sau:
Mã:
systemd-analyze blame
Bạn sẽ nhận được kết quả sau:
Mã:
3.662 giây csm.service1.899 giây apt-daily-upgrade.service1.798 giây dev-sda1.device1.400 giây systemd-logind.service1.336 giây fstrim.service1.207 giây systemd-networkd.service1.131 giây systemd-resolved.service 856 giây man-db.service 842 giây systemd-journald.service 415 giây e2scrub_reap.service 320ms keyboard-setup.service 295ms networkd-dispatcher.service 239ms systemd-udev-trigger.service
Để phân tích chuỗi quan trọng khi khởi động bằng lệnh sau:
Mã:
systemd-analyze critical-chain
Bạn sẽ nhận được kết quả sau:
Mã:
Thời gian khi thiết bị hoạt động hoặc bắt đầu được in sau ký tự "@".Thời gian thiết bị mất để bắt đầu được in sau ký tự "+".graphics.target @4.948 giây??multi-user.target @4.946 giây ??csm.service @1.282 giây +3.662 giây ??basic.target @1.277 giây ??sockets.target @1.276 giây ??dbus.socket @1.274 giây ??sysinit.target @1.257 giây ??systemd-update-utmp.service @1.247 giây +8ms ??systemd-tmpfiles-setup.service @1.228 giây +17ms ??systemd-journal-flush.service @1.201 giây +24ms ??systemd-journald.service @356ms +842ms ??systemd-journald.socket @313ms ??system.slice @225ms ??-.slice @225ms

Quản lý Dịch vụ với Systemd​

Systemctl cung cấp một cách dễ dàng hơn để quản lý các dịch vụ systemd.

Để khởi động dịch vụ Apache, hãy chạy lệnh sau:
Mã:
systemctl start apache2
Để khởi động lại dịch vụ Apache, hãy chạy lệnh sau:
Mã:
systemctl restart apache2
Để dừng dịch vụ Apache, hãy chạy lệnh sau:
Mã:
systemctl stop apache2
Để tải lại dịch vụ Apache, hãy chạy lệnh sau:
Mã:
systemctl reload apache2
Để cho phép dịch vụ Apache khởi động sau khi khởi động lại hệ thống, hãy chạy lệnh sau:
Mã:
systemctl enable apache2
Để xóa dịch vụ Apache khỏi quá trình khởi động hệ thống, hãy chạy lệnh sau:
Mã:
systemctl disable apache2
Để tắt dịch vụ Apache, hãy chạy lệnh sau lệnh:
Mã:
systemctl kill apache2
Để che giấu dịch vụ Apache, hãy chạy lệnh sau:
Mã:
systemctl mask apache2
Để bỏ ẩn quy trình Apache, hãy chạy lệnh sau:
Mã:
systemctl unmask apache2
Để kiểm tra xem dịch vụ Apache đã được bật hay chưa, hãy chạy lệnh sau:
Mã:
systemctl is-enabled apache2
Để kiểm tra trạng thái của dịch vụ Apache, hãy chạy lệnh sau:
Mã:
systemctl status apache2
Nếu dịch vụ đang chạy, bạn sẽ nhận được đầu ra sau:
Mã:
? apache2.service - Máy chủ HTTP Apache Đã tải: đã tải (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Đang hoạt động: đang hoạt động (đang chạy) kể từ Sat 2021-01-09 10:53:12 UTC; 26 giây trước Tài liệu: https://httpd.apache.org/docs/2.4/ PID chính: 1708 (apache2) Nhiệm vụ: 55 (giới hạn: 2353) Bộ nhớ: 5,8M CGroup: /system.slice/apache2.service ??1708 /usr/sbin/apache2 -k start ??1709 /usr/sbin/apache2 -k start ??1710 /usr/sbin/apache2 -k start09/01 10:53:12 ubuntu2004 systemd[1]: Đang khởi động Máy chủ HTTP Apache...
Sau khi đổi tên hoặc xóa bất kỳ tệp systemd nào, bạn sẽ cần tải lại tệp đó để áp dụng các thay đổi. Để tải lại tệp dịch vụ systemd, hãy chạy lệnh sau:
Mã:
systemctl daemon-reload

Quản lý tệp đơn vị Systemd​

Các lệnh trên sẽ hữu ích để quản lý các dịch vụ đơn lẻ. Tuy nhiên, không thể sử dụng để tìm trạng thái hiện tại của hệ thống. Có rất nhiều lệnh khác hữu ích để cung cấp thông tin này.

Để xem danh sách tất cả các đơn vị khả dụng, hãy chạy lệnh sau:
Mã:
systemctl list-unit-files
Bạn sẽ thấy danh sách tất cả các tệp đơn vị trong đầu ra sau:
Mã:
UNIT FILE STATE VENDOR PRESETproc-sys-fs-binfmt_misc.automount static enabled-.mount created enableddev-hugepages.mount static enableddev-mqueue.mount static enabledproc-sys-fs-binfmt_misc.mount disabled enabledsys-fs-fuse-connections.mount static enabledsys-kernel-config.mount static enabledsys-kernel-debug.mount static enabledsys-kernel-tracing.mount static enabledacpid.path enabled enabledntp-systemd-netif.path enabled enabledsystemd-ask-password-console.path static enabledsystemd-ask-password-wall.path static enabledsession-2.scope transient enabledacpid.service disabled enabledapt-daily-upgrade.service static enabledapt-daily.service static enabled[emailprotected] enabled enabledconsole-getty.service disabled disabledconsole-setup.service enabled enabled[emailprotected] static enabledcron.service enabled enabledcryptdisks-early.service masked enabledcryptdisks.service masked enabledcsm.service enabled enableddbus-org.freedesktop.hostname1.service static enableddbus-org.freedesktop.locale1.service static enabled
Để xem danh sách tất cả các đơn vị đang hoạt động, hãy chạy lệnh sau:
Mã:
systemctl list-units
Bạn sẽ thấy đầu ra sau:
Mã:
TẢI ĐƠN VỊ HOẠT ĐỘNG PHỤ MÔ TẢ > proc-sys-fs-binfmt_misc.automount đã tải đang hoạt động đang chờ Thực thi tùy ý Fil> sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device đã tải đang hoạt động đã cắm thiết bị mạng Virtio > sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device đã tải đang hoạt động đã cắm thiết bị mạng Virtio > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device đã tải đang hoạt động đã cắm QEMU_HARDDISK 1 > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.thiết bị được tải đang hoạt động đã cắm QEMU_HARDDISK > sys-devices-platform-serial8250-tty-ttyS1.thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS10.thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS11.thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS12.thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS13. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS14. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS15. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS16. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS17. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS18. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS19. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS2. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS20. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS21. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS22. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS23. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS24. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS25. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS26. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS27. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS28. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS29. thiết bị được tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS3.thiết bị đã tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS30.thiết bị đã tải đang hoạt động đã cắm /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS31.device đã tải đang hoạt động đã cắm /sys/devices/platform/se>
Để xem danh sách tất cả các đơn vị bị lỗi, hãy chạy lệnh sau:
Mã:
systemctl --failed
Để liệt kê tất cả các dịch vụ bao gồm các dịch vụ đã bật và đã tắt, hãy chạy lệnh sau:
Mã:
systemctl list-unit-files --type=service
Bạn sẽ thấy đầu ra sau:
Mã:
UNIT FILE STATE VENDOR PRESETacpid.service đã tắt đã bậtapache-htcacheclean.service đã tắt đã bật[emailprotected] đã tắt đã bậtapache2.service đã bật đã bật[emailprotected] đã tắt đã bậtapt-daily-upgrade.service đã bật tĩnhapt-daily.service đã bật tĩnh[emailprotected] đã bật đã bậtconsole-getty.service đã tắt đã tắtconsole-setup.service đã bật đã bật[emailprotected] tĩnh đã bậtcron.service đã bật đã bậtcryptdisks-early.service masked đã bậtcryptdisks.service masked đã bậtcsm.service đã bật đã bậtdbus-org.freedesktop.hostname1.service tĩnh đã bậtdbus-org.freedesktop.locale1.service tĩnh đã bậtdbus-org.freedesktop.login1.service tĩnh đã bậtdbus-org.freedesktop.resolve1.service đã bật đã bậtdbus-org.freedesktop.timedate1.service tĩnh đã bậtdbus-org.freedesktop.timesync1.service masked đã bậtdbus.service tĩnh đã bậtdebug-shell.service đã tắt đã tắtdmesg.service đã bật đã bật[emailprotected] tĩnh đã bậte2scrub_all.service tĩnh đã bật[emailprotected] tĩnh đã bậte2scrub_reap.service đã bật đã bậtemergency.service tĩnh đã bậtfstrim.service tĩnh đã bậtgetty-static.service tĩnh enabled[emailprotected] enabled enabled
Bạn có thể xem các thuộc tính của đơn vị SSH, hãy chạy lệnh sau:
Mã:
systemctl show sshd.service
Bạn sẽ thấy kết quả sau:
Mã:
Id=sshd.serviceNames=sshd.serviceRequires=basic.targetWants=system.sliceWantedBy=multi-user.targetConflicts=shutdown.targetBefore=shutdown.target multi-user.targetAfter=syslog.target network.target auditd.service systemd-journald.socket basic.target system.sliceDescription=OpenSSH server daemon

Quản lý Socket bằng Systemctl​

Bạn cũng có thể quản lý socket bằng lệnh Systemctl.

Để liệt kê tất cả các socket hệ thống khả dụng, hãy chạy lệnh sau:
Mã:
systemctl list-unit-files --type=socket
Bạn sẽ thấy đầu ra sau:
Mã:
UNIT FILE STATE VENDOR PRESETacpid.socket enabled đã bậtdbus.socket tĩnh đã bậtssh.socket vô hiệu hóa đã bậtsyslog.socket tĩnh đã tắtsystemd-fsckd.socket tĩnh đã bậtsystemd-initctl.socket tĩnh đã bậtsystemd-journald-audit.socket tĩnh đã bậtsystemd-journald-dev-log.socket tĩnh đã bật[emailprotected] tĩnh đã bậtsystemd-journald.socket tĩnh đã bật[emailprotected] tĩnh đã bậtsystemd-networkd.socket vô hiệu hóa đã bậtsystemd-rfkill.socket tĩnh đã bậtsystemd-udevd-control.socket tĩnh đã bậtsystemd-udevd-kernel.socket tĩnh đã bật
Để khởi động socket SSH, hãy chạy lệnh sau:
Mã:
systemctl start ssh.socket
Để dừng socket SSH, hãy chạy lệnh sau:
Mã:
systemctl stop ssh.socket
Để khởi động lại socket SSH, hãy chạy lệnh sau:
Mã:
systemctl restart ssh.socket
Để kiểm tra trạng thái của socket SSH, hãy chạy lệnh sau:
Mã:
systemctl status ssh.socket
Để bật và tắt socket SSH khi khởi động, hãy chạy lệnh sau:
Mã:
systemctl enable ssh.socket
systemctl disable ssh.socket

Các lệnh bổ sung của Systemctl​

Bạn có thể thực hiện một số tác vụ bằng lệnh systemctl. Nếu bạn muốn đưa hệ thống vào chế độ người dùng đơn, hãy chạy lệnh sau:
Mã:
systemctl rescue
Để dừng hệ thống, hãy chạy lệnh sau:
Mã:
systemctl halt
Để tắt hệ thống, hãy chạy lệnh sau:
Mã:
systemctl poweroff
Để khởi động lại hệ thống, hãy chạy lệnh sau:
Mã:
systemctl reboot

Kết luận​

Trong hướng dẫn trên, bạn đã học cách quản lý và kiểm soát dịch vụ systemd trên Linux. Tôi hy vọng điều này sẽ giúp bạn tương tác và kiểm soát phiên bản systemd của mình. Hãy thoải mái hỏi tôi nếu bạn có bất kỳ câu hỏi nào.
 
Back
Bên trên