Thứ hai, 20/04/2015 | 00:00 GMT+7

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 sang systemd . 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:

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.


Tags:

Các tin liên quan