Systemd Essentials: Làm việc với Dịch vụ, Đơn vị và Tạp chí
Trong những năm gần đây, các bản phân phối Linux ngày càng chuyển đổi từ các hệ thống init khác sangsystemd
. Bộ công cụ systemd
cung cấp một mô hình init linh hoạt và nhanh chóng để quản lý toàn bộ máy từ khi khởi động trở đi. Trong hướng dẫn này, ta sẽ cung cấp cho bạn các lệnh quan trọng nhất mà bạn muốn biết để quản lý server hỗ trợ systemd
. Những điều này sẽ hoạt động trên bất kỳ server nào cài đặt systemd
(bất kỳ version hệ điều hành nào ở hoặc cao hơn Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Bắt đầu nào.
Quản lý đơn vị cơ bản
Đối tượng cơ bản mà systemd
quản lý và hành động là một “đơn vị”. Các đơn vị có thể có nhiều loại, nhưng loại phổ biến nhất là “dịch vụ” (được biểu thị bằng file đơn vị kết thúc bằng .service
). Để quản lý các dịch vụ trên server hỗ trợ systemd
, công cụ chính của ta là lệnh systemctl
.
Tất cả các lệnh hệ thống init bình thường đều có các hành động tương đương với lệnh systemctl
. Ta sẽ sử dụng đơn vị nginx.service
để chứng minh (bạn sẽ phải cài đặt Nginx bằng trình quản lý gói của bạn để nhận file dịch vụ này).
Ví dụ: ta có thể bắt đầu dịch vụ bằng lệnh :
- sudo systemctl start nginx.service
Ta có thể dừng lại bằng lệnh :
- sudo systemctl stop nginx.service
Để khởi động lại dịch vụ, ta có thể gõ:
- sudo systemctl restart nginx.service
Để cố gắng reload dịch vụ mà không làm gián đoạn chức năng bình thường, ta có thể nhập:
- sudo systemctl reload nginx.service
Bật hoặc tắt đơn vị
Theo mặc định, hầu hết các file đơn vị systemd
không được khởi động tự động khi khởi động. Để cấu hình chức năng này, bạn cần "kích hoạt" đơn vị. Điều này kết nối nó với một “mục tiêu” khởi động nhất định, khiến nó được kích hoạt khi mục tiêu đó được khởi động.
Để cho phép một dịch vụ tự động bắt đầu khi server khởi động , hãy nhập:
- sudo systemctl enable nginx.service
Nếu bạn muốn tắt lại dịch vụ, hãy nhập:
- sudo systemctl disable nginx.service
Tìm hiểu Tổng quan về Trạng thái Hệ thống
Có rất nhiều thông tin mà ta có thể lấy từ server systemd
để có cái nhìn tổng quan về trạng thái hệ thống.
Ví dụ: để lấy tất cả các file đơn vị mà systemd
đã liệt kê là "hoạt động", hãy nhập (bạn có thể loại bỏ các list-units
vì đây là hành vi systemctl
mặc định):
- systemctl list-units
Để liệt kê tất cả các đơn vị systemd
đã nạp hoặc cố gắng để tải vào bộ nhớ, bao gồm cả những hiện không hoạt động, thêm --all
chuyển đổi:
- systemctl list-units --all
Để liệt kê tất cả các đơn vị được cài đặt trên hệ thống, bao gồm cả những đơn vị mà systemd
chưa cố gắng tải vào bộ nhớ, hãy nhập:
- systemctl list-unit-files
Xem thông tin log cơ bản
Một thành phần systemd
được gọi là journald
thu thập và quản lý các mục log từ tất cả các phần của hệ thống. Về cơ bản, đây là thông tin log từ các ứng dụng và kernel .
Để xem tất cả các mục log , bắt đầu từ mục nhập cũ nhất, hãy nhập:
- journalctl
Theo mặc định, điều này sẽ hiển thị cho bạn các mục nhập từ các lần khởi động hiện tại và trước đó nếu journald
được cấu hình để lưu các bản ghi khởi động trước đó. Một số bản phân phối cho phép điều này theo mặc định, trong khi những bản khác thì không (để bật tính năng này, hãy chỉnh sửa file /etc/systemd/journald.conf
và đặt tùy chọn Storage=
thành “dai dẳng” hoặc tạo folder liên tục bằng lệnh sudo mkdir -p /var/log/journal
).
Nếu bạn chỉ muốn xem các mục log từ lần khởi động hiện tại, hãy thêm cờ -b
:
- journalctl -b
Để chỉ xem các thông báo kernel , chẳng hạn như các thông báo thường được đại diện bởi dmesg
, bạn có thể sử dụng cờ -k
:
- journalctl -k
, bạn có thể giới hạn điều này chỉ với khởi động hiện tại bằng cách thêm cờ -b
:
- journalctl -k -b
Truy vấn các trạng thái đơn vị và log
Trong khi các lệnh trên cho phép bạn truy cập vào trạng thái hệ thống chung, bạn cũng có thể nhận thông tin về trạng thái của các đơn vị riêng lẻ.
Để xem tổng quan về trạng thái hiện tại của một đơn vị, bạn có thể sử dụng tùy chọn status
với lệnh systemctl
. Điều này sẽ cho bạn biết liệu đơn vị có đang hoạt động hay không, thông tin về quy trình và các mục log mới nhất:
- systemctl status nginx.service
Để xem tất cả các mục log cho đơn vị được đề cập, hãy cung cấp tùy chọn -u
với tên đơn vị cho lệnh journalctl
:
- journalctl -u nginx.service
Như mọi khi, bạn có thể giới hạn các mục nhập vào lần khởi động hiện tại bằng cách thêm cờ -b
:
- journalctl -b -u nginx.service
Kiểm tra đơn vị và file đơn vị
Bây giờ, bạn biết cách sửa đổi trạng thái của một đơn vị bằng cách khởi động hoặc dừng nó, đồng thời bạn biết cách xem thông tin trạng thái và log để có được ý tưởng về những gì đang xảy ra với quy trình. Tuy nhiên, ta vẫn chưa thấy cách kiểm tra các khía cạnh khác của đơn vị và profile đơn vị.
Tệp đơn vị chứa các tham số mà systemd
sử dụng để quản lý và chạy một đơn vị. Để xem toàn bộ nội dung của một file đơn vị, hãy nhập:
- systemctl cat nginx.service
Để xem cây phụ thuộc của một đơn vị (đơn vị nào systemd
sẽ cố gắng kích hoạt khi khởi động đơn vị), hãy nhập:
- systemctl list-dependencies nginx.service
Điều này sẽ hiển thị các đơn vị phụ thuộc, với các đơn vị target
mở rộng một cách đệ quy. Để mở rộng tất cả các đơn vị phụ thuộc một cách đệ quy, hãy chuyển cờ --all
:
- systemctl list-dependencies --all nginx.service
Cuối cùng, để xem chi tiết cấp thấp về cài đặt của thiết bị trên hệ thống, bạn có thể sử dụng tùy chọn show
:
- systemctl show nginx.service
Điều này sẽ cung cấp cho bạn giá trị của mỗi tham số đang được quản lý bởi systemd
.
Sửa đổi file đơn vị
Nếu bạn cần sửa đổi một file đơn vị, systemd
cho phép bạn áp dụng các thay đổi từ chính lệnh systemctl
để bạn không phải đi đến vị trí đĩa thực.
Để thêm đoạn mã file đơn vị, đoạn mã này được dùng để nối hoặc overrides cài đặt trong file đơn vị mặc định, chỉ cần gọi tùy chọn edit
trên đơn vị:
- sudo systemctl edit nginx.service
Nếu bạn muốn sửa đổi toàn bộ nội dung của file đơn vị thay vì tạo đoạn mã, hãy chuyển cờ --full
:
- sudo systemctl edit --full nginx.service
Sau khi sửa đổi file đơn vị, bạn nên reload chính quá trình systemd
để nhận các thay đổi của bạn :
- sudo systemctl daemon-reload
Sử dụng Mục tiêu (Runlevels)
Một chức năng khác của hệ thống init là chuyển đổi chính server giữa các trạng thái khác nhau. Các hệ thống init truyền thống thường gọi chúng là “runlevel”, cho phép hệ thống chỉ ở trong một runlevel tại bất kỳ thời điểm nào.
Trong systemd
, "mục tiêu" được sử dụng thay thế. Mục tiêu về cơ bản là các điểm đồng bộ hóa mà server có thể sử dụng để đưa server vào một trạng thái cụ thể. Dịch vụ và các file đơn vị khác có thể được liên kết với một mục tiêu và nhiều mục tiêu có thể hoạt động cùng một lúc.
Để xem tất cả các mục tiêu có sẵn trên hệ thống của bạn, hãy nhập:
- systemctl list-unit-files --type=target
Để xem mục tiêu mặc định mà systemd
cố gắng đạt được khi khởi động (lần lượt khởi động tất cả các file đơn vị tạo nên cây phụ thuộc của mục tiêu đó), hãy nhập:
- systemctl get-default
Bạn có thể thay đổi mục tiêu mặc định sẽ được sử dụng khi khởi động bằng cách sử dụng tùy chọn set-default
:
- sudo systemctl set-default multi-user.target
Để xem những đơn vị nào được gắn với một mục tiêu, có thể chạy lệnh:
- systemctl list-dependencies multi-user.target
Bạn có thể sửa đổi trạng thái hệ thống để chuyển đổi giữa các mục tiêu bằng tùy chọn isolate
. Điều này sẽ dừng bất kỳ đơn vị nào không gắn với mục tiêu được chỉ định. Đảm bảo rằng mục tiêu bạn đang cô lập không dừng bất kỳ dịch vụ thiết yếu nào:
- sudo systemctl isolate multi-user.target
Dừng hoặc Khởi động lại Server
Đối với một số trạng thái chính mà hệ thống có thể chuyển đổi sang, các phím tắt có sẵn. Ví dụ: để tắt server của bạn, có thể chạy lệnh:
- sudo systemctl poweroff
Nếu bạn muốn khởi động lại hệ thống, bạn có thể thực hiện điều đó bằng lệnh :
- sudo systemctl reboot
Bạn có thể khởi động vào chế độ cứu hộ bằng lệnh :
- sudo systemctl rescue
Lưu ý hầu hết các hệ điều hành bao gồm alias truyền thống cho các hoạt động này để bạn có thể chỉ cần gõ sudo poweroff
hoặc sudo reboot
mà không cần systemctl
. Tuy nhiên, điều này không được đảm bảo sẽ được cài đặt trên tất cả các hệ thống.
Bước tiếp theo
Bây giờ, bạn đã biết những điều cơ bản về cách quản lý một server sử dụng systemd
. Tuy nhiên, còn nhiều điều cần học khi nhu cầu của bạn ngày càng mở rộng. Dưới đây là các liên kết đến hướng dẫn với thông tin chuyên sâu hơn về một số thành phần mà ta đã thảo luận trong hướng dẫn này:
- Cách sử dụng Systemctl để quản lý các đơn vị và dịch vụ Systemd
- Cách sử dụng Journalctl để xem và thao tác log Systemd
- Hiểu đơn vị Systemd và file đơn vị
Bằng cách học cách tận dụng điểm mạnh của hệ thống init, bạn có thể kiểm soát trạng thái của máy và dễ dàng quản lý các dịch vụ và quy trình của bạn hơn.
Các tin liên quan