Cách tạo một service systemd mới trên Linux

systemd là trình quản lý service cho nhiều bản phân phối Linux nổi tiếng. Service là một đơn vị của chương trình thường chạy trong nền. Về bản chất, các service sẽ tự động chạy ngay khi hệ thống khởi động và có thể hoạt động mà không cần giám sát.

Nếu cần tạo một tác vụ hoặc chương trình tự động bắt đầu thực thi mỗi khi bạn khởi động hoặc khởi động lại hệ thống của mình, bạn có thể cân nhắc tạo một service mới. Hãy tìm hiểu cách tạo một service systemd mới, tùy chỉnh trên Linux.

Bước 1: Tạo file service

Có một số bước cần thiết để tạo file service systemd mới. Việc đầu tiên là tạo file unit cho service. Trước khi tạo một file service, bạn phải hiểu cấu trúc của nó.

Hãy nghiên cứu file service bằng cách lấy một file service thực, đang hoạt động từ hệ thống Linux của bạn. Bên dưới, bạn có thể xem file service cho service daemon vmtools.

File service daemon vmtools
File service daemon vmtools

Service cụ thể này có thể không có trên hệ thống của bạn trừ khi bạn cũng đang chạy Linux trên VMware có cài đặt các công cụ VMware. Service được đề cập không quan trọng vì tất cả các service, hay đúng hơn là những file unit service, có cùng cấu trúc cơ sở với một số tùy chỉnh theo yêu cầu.

Tất cả các file service systemd phải có 3 phần: [Service], [Unit][Install] và một vài tham số trong mỗi phần. Đây là những gì mỗi phần chứa và tại sao chúng lại quan trọng:

1. Unit

Phần Unit bao gồm siêu dữ liệu quan trọng như mô tả và các dependency của service. Nó có 3 tham số: Description, BeforeAfter. Tương tự như vậy, tham số Description cung cấp một số ngữ cảnh của service và chức năng của nó.

Các tham số BeforeAfter xác định những điều kiện cần đáp ứng để service thực thi. Ví dụ, nếu bạn đang bắt đầu một service web server, bạn sẽ muốn nó chỉ bắt đầu sau khi service mạng trực tuyến. Vì vậy, bạn sẽ đặt giá trị của tham số After cho service mạng.

2. Service

Phần Service chứa hai tham số bắt buộc: ExecStart, Type và một vài tham số tùy chọn khác như ExecReload, v.v...

ExecStart xác định lệnh sẽ được thực thi khi service bắt đầu, trong khi tham số Type xác định loại tiến trình sẽ xuất hiện.

3. Install

Phần này và dữ liệu của nó được gọi bất cứ khi nào bạn bật hoặc tắt service bằng lệnh systemctl.

Nó có một vài tham số. Một trong những cái phổ biến và cần thiết là WantedBy. Tham số WantedBy xác định các đơn vị mục tiêu sẽ bắt đầu bất cứ khi nào service được bật. Giá trị mặc định là multi-user.target.

Lưu ý: Các tham số được đề cập ở đây không phải là những tham số duy nhất bạn có thể đặt trong file unit. Bạn có thể lấy danh sách đầy đủ các tham số từ tài liệu systemd.exec chính thức hoặc bằng cách nhập man systemd.exec trong một terminal.

File unit service systemd luôn kết thúc bằng phần mở rộng ".service" và phải được lưu trữ trong thư mục /etc/systemd/system/. Tạo file service bằng lệnh touch với các đặc quyền nâng cao bằng cách thêm tiền tố vào nó bằng lệnh sudo:

sudo touch /etc/systemd/system/<filename>.service 

Bây giờ bạn đã tạo file service, hãy bắt đầu điền cú pháp cần thiết để làm cho service hợp lệ và hoạt động.

Bước 2: Cấu hình file service

Cấu hình của service nmap tùy chỉnh
Cấu hình của service nmap tùy chỉnh

Bạn sẽ tạo một service mẫu thực thi Nmap để quét các cổng trên máy và lưu kết quả đầu ra trong một file 30 giây một lần. Để đạt được nhiệm vụ này, đây là cách cấu trúc file unit service:

[Unit]
Description=Demonstration of custom nmap service.
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/nmap -sS -O -oN /home/<user>/results.txt localhost
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

Mặc dù các tham số được đề cập đã được giải thích trước đây, nhưng hãy tìm hiểu xem chúng ảnh hưởng như thế nào đến service mới tạo và cũng khám phá những tham số mới được giới thiệu trong phần này: Restart, RestartSecUser.

Dưới đây là ý nghĩa của các tham số trong mỗi phần:

  • Description: Văn bản mà con người có thể đọc được để mô tả các chức năng của service.
  • After=network.target: Ra lệnh cho systemd rằng service này phụ thuộc vào network.target và chỉ nên bắt đầu sau khi service network.target đã được khởi động. Lưu ý rằng After không được sử dụng để thiết lập bất kỳ mối quan hệ phụ thuộc trực tiếp nào, nó chỉ hoạt động như một trình kích hoạt.
  • Type=simple: Có nhiều loại service. Tuy nhiên, service trong bản demo này là một tiến trình thông thường. Bạn có thể tìm thấy tất cả các giá trị khác nhau cho điều này trên trang tài liệu chính thức được liên kết trước đó.
  • Restart=always: Điều này có nghĩa là bất cứ khi nào service thoát, nó sẽ luôn khởi động lại.
  • RestartSec=30: Điều này đặt khoảng thời gian giữa mỗi lần bắt đầu service thành 30 giây.
  • User=root: Điều này xác định rằng service sẽ chạy với tư cách là người dùng root. Trong trường hợp này, đây là bước phải làm vì Nmap sẽ không thể chạy nếu không có quyền root.
  • ExecStart: Lệnh này giữ đường dẫn tuyệt đối đến chương trình sẽ được thực thi cùng với tất cả các flag bắt buộc hoặc đối số cần thiết để chương trình hoạt động bình thường.
  • WantedBy=multi-user.target: Tham số này trong file service chỉ định mục tiêu nào sẽ bao gồm hoặc "muốn" service. Khi một service được bao gồm trong một mục tiêu, điều đó có nghĩa là service đó sẽ bắt đầu khi hệ thống đạt đến mục tiêu đó trong quá trình khởi động. Trong trường hợp này, service sẽ bắt đầu khi hệ thống chuyển sang chế độ nhiều người dùng. Chế độ nhiều người dùng là trạng thái hệ thống được khởi động hoàn toàn, cho phép nhiều người dùng đăng nhập và sử dụng hệ thống.

Bước 3: Kích hoạt và bắt đầu service

Trạng thái service nmap
Trạng thái service nmap

Bây giờ, bạn đã tạo file unit, các bước duy nhất còn lại là kích hoạt và chạy service. Bạn có thể kích hoạt và bắt đầu service của mình bằng lệnh systemctl.

Đây là cách sử dụng systemctl để bật, bắt đầu và kiểm tra trạng thái service của bạn:

sudo systemctl enable <filename>.service
sudo systemctl start <filename>.service
sudo systemctl status <filename>.service

Bây giờ, service tùy chỉnh của bạn sẽ được thiết lập và chạy! Trong trường hợp này, bạn sẽ thấy quá trình quét Nmap chạy 30 giây một lần và đầu ra được lưu trữ trong file results.txt trong thư mục home.

Thứ Sáu, 30/06/2023 11:37
51 👨 1.026
0 Bình luận
Sắp xếp theo
    ❖ Linux