Cách quản lý dịch vụ Linux Systemd với Systemctl

Tác giả sysadmin, T.Một 02, 2023, 01:48:18 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách quản lý dịch vụ Linux Systemd với Systemctl


Trong nhiều hệ điều hành dựa trên Linux như Debian 8, Red Hat Enterprise Linux (RHEL) và CentOS 7 systemd hiện là hệ thống khởi tạo mặc định và được sử dụng để quản lý dịch vụ.

Ở đây chúng tôi sẽ đề cập đến việc quản lý dịch vụ bằng lệnh systemctl, lệnh này được sử dụng để kiểm soát trạng thái của trình quản lý dịch vụ và hệ thống systemd.

Dưới đây là một số ví dụ phác thảo cách sử dụng lệnh systemctl để quản lý các dịch vụ khác nhau.

1. Kiểm tra trạng thái của một dịch vụ

Tình trạng hiện tại của một dịch vụ có thể được kiểm tra như hình dưới đây.

Mã nguồn [Chọn]
[root@centos ~]# systemctl status chronyd.service
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
   Active: active (running) since Mon 2015-08-24 15:52:20 AEST; 2 days ago
 Main PID: 718 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─718 /usr/sbin/chronyd -u chrony

Ở đây chúng ta có thể thấy rằng đơn vị chronyd.service hiện đang ở trạng thái "hoạt động (đang chạy)", cũng như dịch vụ được bật nghĩa là nó hiện được định cấu hình để khởi động khi khởi động hệ thống. Chúng tôi không cần chỉ định.service ở cuối dịch vụ mỗi lần vì phần này được tự động đặt ở cuối theo mặc định, nó sẽ bị bỏ qua sau đó.

Ngoài ra, chúng tôi cũng có thể kiểm tra xem một dịch vụ có đang hoạt động hay không bằng cách sử dụng 'đang hoạt động', điều này sẽ hiển thị nếu dịch vụ hiện đang chạy hay không.

Mã nguồn [Chọn]
[root@centos ~]# systemctl is-active chronyd
active

Tương tự, chúng ta cũng có thể kiểm tra xem một dịch vụ có được kích hoạt để bắt đầu khởi động hay không bằng cách sử dụng 'is-enabled'.

Mã nguồn [Chọn]
[root@centos ~]# systemctl is-enabled chronyd
enabled

2. Bắt đầu, dừng và khởi động lại dịch vụ

Systemctl có thể được sử dụng để bắt đầu, dừng và khởi động lại các dịch vụ như đã minh họa.

Tại đây, chúng tôi dừng dịch vụ chronyd và xác nhận rằng nó không còn hoạt động nữa.

Mã nguồn [Chọn]
[root@centos ~]# systemctl stop chronyd
[root@centos ~]# systemctl is-active chronyd
inactive

Chúng tôi có thể bắt đầu sao lưu dịch vụ và xác nhận rằng nó đang hoạt động trở lại.

Mã nguồn [Chọn]
[root@centos ~]# systemctl start chronyd
[root@centos ~]# systemctl is-active chronyd
active

Thay vì thực hiện dừng rồi bắt đầu theo hai bước, thay vào đó, chúng ta có thể khởi động lại dịch vụ. Nếu bạn kiểm tra trạng thái của dịch vụ sau đó, thì thời gian hoạt động kể từ đó sẽ thay đổi khi dịch vụ được khởi động lại và PID cũng sẽ thay đổi.

Mã nguồn [Chọn]
[root@centos ~]# systemctl restart chronyd
Nếu bạn cố gắng khởi động lại một dịch vụ hiện không hoạt động, dịch vụ đó sẽ khởi động. Thay vào đó, chúng tôi có thể sử dụng 'thử khởi động lại' để chỉ thực hiện khởi động lại nếu dịch vụ hiện đang chạy. Nếu dịch vụ chưa chạy và bạn sử dụng 'thử khởi động lại' thì dịch vụ sẽ không khởi động.

Mã nguồn [Chọn]
[root@centos ~]# systemctl is-active chronyd
active
[root@centos ~]# systemctl stop chronyd
[root@centos ~]# systemctl is-active chronyd
inactive
[root@centos ~]# systemctl try-restart chronyd
[root@centos ~]# systemctl is-active chronyd
inactive
[root@centos ~]# systemctl restart chronyd
[root@centos ~]# systemctl is-active chronyd
active

Một dịch vụ có thể được tải lại, dịch vụ này sẽ chỉ làm mới những thứ như thay đổi tệp cấu hình, tuy nhiên, quy trình chính sẽ tiếp tục chạy nên PID sẽ không thay đổi.

Mã nguồn [Chọn]
[root@centos ~]# systemctl reload sshd
3. Kích hoạt và vô hiệu hóa dịch vụ

Nếu một dịch vụ được kích hoạt, nó sẽ tự động khởi động trong khi khởi động hệ thống, tuy nhiên nếu một dịch vụ bị vô hiệu hóa, nó sẽ không tự động khởi động trong khi khởi động hệ thống. Người dùng hoặc dịch vụ khác có thể tự khởi động dịch vụ bị vô hiệu hóa.

Dưới đây chúng ta có thể thấy rằng dịch vụ chronyd đã được bật, sau khi tắt nó, liên kết tượng trưng sẽ bị xóa. Sau khi bị vô hiệu hóa, dịch vụ sẽ vẫn hoạt động tích cực, tuy nhiên nếu hệ thống được khởi động lại, dịch vụ sẽ không khởi động trừ khi được khởi động thủ công.

Mã nguồn [Chọn]
[root@centos ~]# systemctl is-enabled chronyd
enabled
[root@centos ~]# systemctl disable chronyd
rm '/etc/systemd/system/multi-user.target.wants/chronyd.service'
[root@centos ~]# systemctl is-enabled chronyd
disabled
[root@centos ~]# systemctl is-active chronyd
active

Liên kết tượng trưng sẽ được tạo lại khi dịch vụ được kích hoạt để khởi động trong quá trình khởi động hệ thống.

Mã nguồn [Chọn]
[root@centos ~]# systemctl enable chronyd
ln -s '/usr/lib/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'

Nếu bạn cố bật một dịch vụ đã được bật, dịch vụ này sẽ không tạo lại liên kết tượng trưng đã tồn tại nên sẽ không có đầu ra. Chúng tôi có thể đặt lại liên kết tượng trưng bằng cách sử dụng 'có thể kích hoạt lại', thao tác này trước tiên sẽ xóa liên kết tượng trưng và sau đó tạo lại liên kết đó.

Mã nguồn [Chọn]
[root@centos ~]# systemctl enable chronyd
[root@centos ~]# systemctl reenable chronyd
rm '/etc/systemd/system/multi-user.target.wants/chronyd.service'
ln -s '/usr/lib/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'

Để ngăn dịch vụ được khởi động tự động và thủ công bởi người dùng hoặc các dịch vụ khác, chúng tôi có thể che dấu dịch vụ. Việc che dấu dịch vụ về cơ bản hướng liên kết tượng trưng đến/dev/null để khi nó được sử dụng, không có gì xảy ra.

Mã nguồn [Chọn]
[root@centos ~]# systemctl mask chronyd
ln -s '/dev/null' '/etc/systemd/system/chronyd.service'

Khi dịch vụ được che dấu, nó sẽ không khởi động khi khởi động và không thể khởi động thủ công. Nếu một tiến trình đang chạy bị che đi, nó sẽ vẫn hoạt động.

Mã nguồn [Chọn]
[root@centos ~]# systemctl is-active chronyd
active
[root@centos ~]# systemctl stop chronyd
[root@centos ~]# systemctl start chronyd
Failed to issue method call: Unit chronyd.service is masked.

Để chứng minh điều này, máy chủ thử nghiệm đã được khởi động lại trong khi dịch vụ bị ẩn và một trạng thái trên dịch vụ đã được thực hiện sau khi máy chủ đã khởi động lại, xác nhận rằng nó không chạy.

Mã nguồn [Chọn]
[root@centos ~]# systemctl status chronyd
chronyd.service
   Loaded: masked (/dev/null)
   Active: inactive (dead)
[root@centos ~]# systemctl is-active chronyd
inactive

Để đảo ngược điều này, dịch vụ có thể được vạch mặt, sau đó dịch vụ có thể được khởi động thành công.

Mã nguồn [Chọn]
[root@centos ~]# systemctl unmask chronyd
rm '/etc/systemd/system/chronyd.service'
[root@centos ~]# systemctl start chronyd
[root@centos ~]# systemctl is-active chronyd
active

4. Xem trạng thái của tất cả các dịch vụ

Có thể xem danh sách trạng thái hiện tại của tất cả các dịch vụ bằng lệnh bên dưới, xóa --all để chỉ liệt kê các dịch vụ đang hoạt động.

Mã nguồn [Chọn]
systemctl list-units --type service --all
Có thể xem danh sách tất cả các dịch vụ để xem chúng hiện có được bật hay không bằng lệnh bên dưới.

Mã nguồn [Chọn]
systemctl list-unit-files --type service
Còn nhiều điều nữa mà systemctl có thể làm, để biết thêm thông tin, hãy xem trang hướng dẫn bằng cách nhập 'man systemctl' tại dòng lệnh.

Với systemctl, chúng tôi có thể kiểm tra xem một dịch vụ hiện đang hoạt động hay được bật để tự động khởi động trong khi khởi động hệ thống. Chúng tôi có thể bắt đầu, dừng, khởi động lại và tải lại các dịch vụ, cũng như vô hiệu hóa chúng khởi động trong quá trình khởi động hệ thống và thậm chí che giấu chúng để ngăn chúng khởi động hoàn toàn.

Khi systemd trở nên phổ biến và thay thế các giải pháp thay thế cũ hơn, điều quan trọng hơn là phải hiểu cách làm việc với các dịch vụ bằng systemctl.