5 Tính năng ít được biết đến của Bộ đếm thời gian systemd

Tác giả Starlink, T.M.Một 16, 2024, 11:54:38 SÁNG

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

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

Đã đến lúc xem xét kỹ hơn một chút.

  • Bộ đếm thời gian systemd có các kiểm tra nội bộ để ngăn nhiều phiên bản chạy cùng lúc, tránh xung đột tài nguyên.
  • Bật độ phân giải một giây trong bộ đếm thời gian systemd để tăng độ chính xác so với độ phân giải một phút mặc định.
  • Có báo cáo lỗi cho bạn thông qua phương tiện bạn chọn. Khởi chạy bộ đếm thời gian và dịch vụ ngay lập tức để hỗ trợ gỡ lỗi.


Bộ đếm thời gian systemd của Linux tự hào có một bộ tính năng phong phú và tinh vi. Các tính năng cơ bản xử lý hầu hết các tình huống phổ biến, nhưng bạn có thể bỏ lỡ một số chức năng thú vị như các tùy chọn ít được biết đến này.

1. Bộ đếm thời gian systemd

Bộ đếm thời gian systemd là sự thay thế hiện đại cho lệnh cron cũ. Cả hai lệnh đều cho phép bạn lên lịch một tác vụ hoặc quy trình để khởi chạy vào một thời điểm nhất định hoặc với tần suất nhất định. Ưu điểm của bộ đếm thời gian systemd là khả năng kiểm soát nhiều hơn, linh hoạt hơn và độ phân giải cao hơn bộ đếm thời gian cron.

Dựa trên các bình luận và câu hỏi tôi nhận được khi nói về chúng, bộ đếm thời gian systemd có thể là một trong những thành phần bị hiểu lầm nhiều nhất của Linux. Ngay cả khi tôi nói chuyện với những người thích bộ đếm thời gian systemd, họ thường không biết tất cả những điều trong danh sách này.

Thoạt nhìn, bộ đếm thời gian systemd có vẻ khó khăn. Có một cú pháp cấu hình mới cần học, mà nhiều người thấy khó chịu. Và bạn không chỉ tạo một tệp cấu hình duy nhất. Mỗi bộ đếm thời gian cần hai tệp riêng biệt nhưng có liên quan.

Thoạt nhìn, bộ đếm thời gian systemd có vẻ phức tạp hoặc chỉ dành cho dân công nghệ. Nhưng thực ra không đến nỗi tệ. Thật đáng tiếc khi một số người tránh chúng và gắn bó với cron, vì bộ đếm thời gian systemd có rất nhiều thủ thuật hay ho.

2. Một trường hợp tại một thời điểm

Lợi ích đầu tiên của bộ đếm thời gian systemd đến tự động. Bạn không cần phải làm gì để tận hưởng nó. Có các kiểm tra nội bộ ngăn không cho bộ đếm thời gian được kích hoạt nếu lần chạy trước của cùng một bộ đếm thời gian vẫn chưa hoàn tất.

Điều này ngăn ngừa xung đột tài nguyên và tránh những vấn đề có thể phát sinh nếu hai tác vụ sao lưu đang cố gắng chạy cùng một lúc.

Các bộ đếm thời gian không chạy không bị loại bỏ. Chúng được giữ ở trạng thái sẵn sàng và được khởi chạy khi bộ đếm thời gian chạy hoàn tất. Điều này quan trọng vì việc khởi chạy tuần tự các bộ đếm thời gian là hoàn toàn ổn. Đây là việc thực hiện đồng thời không được lên kế hoạch có thể dẫn đến các tác dụng phụ không mong muốn.

3. Bật Thời gian phân giải thứ hai

Với cron, bạn có thể lên lịch các tác vụ với độ phân giải là một phút. Bây giờ, với bộ đếm thời gian hệ thống, bạn có thể lên lịch bộ đếm thời gian để kích hoạt với độ phân giải là một giây. Trên thực tế, bạn có thể sử dụng độ phân giải micro giây nhưng, ngoài các tình huống thời gian thực chuyên biệt, rất khó để tưởng tượng khi nào bạn cần sử dụng độ phân giải đó.

Nhưng vấn đề ở đây là. Bộ đếm thời gian systemd mặc định ở độ phân giải một phút. Bạn cần bật độ chính xác của độ phân giải một giây như thế này.

Mã nguồn [Chọn]
[Timer]
AccuracySec=1

4. Sử dụng sự kiện đơn điệu để thực hiện chậm trễ

Bộ đếm thời gian systemd có một bộ phương pháp lập lịch mở rộng và linh hoạt.

Sự kiện lịch được kích hoạt tại một thời điểm cụ thể trong một ngày cụ thể hoặc một nhóm ngày cụ thể và tại một thời điểm cụ thể. Bạn có thể có nhiều hơn một bộ chỉ định thời gian cho bộ đếm thời gian, để cung cấp cho bạn các thời gian khởi chạy khác nhau vào cuối tuần và các ngày trong tuần. Ngoài ra còn có phạm vi không chỉ định thời gian, về cơ bản có nghĩa là "bất kỳ lúc nào trong ngày".

Sự kiện đơn điệu được kích hoạt sau một khoảng thời gian xác định sau một sự kiện, chẳng hạn như khởi động hệ thống. Bạn cũng có thể cấu hình bộ hẹn giờ để kích hoạt tại một thời điểm nào đó sau khi nó được kích hoạt hoặc, đáng ngạc nhiên là, bị vô hiệu hóa.

Để chạy một dịch vụ sau 45 giây kể từ khi PC khởi động, hãy sử dụng định dạng này:

Mã nguồn [Chọn]
[Timer]
OnBootSec=45 seconds

Một mẹo hay khác là kích hoạt bộ đếm thời gian nếu thời gian hoặc ngày tháng thay đổi trong đồng hồ hệ thống của PC.

Mã nguồn [Chọn]
[Timer]
OnClockChange=true

5. Kích hoạt thủ công các tác vụ có thời gian

Khi tôi phát triển một bộ đếm thời gian, tôi thích thực hiện theo từng giai đoạn. Đầu tiên, hãy đảm bảo rằng tiến trình mục tiêu mà bạn sẽ khởi chạy hoạt động như một tiến trình độc lập. Điều đó có nghĩa là chương trình, tập lệnh hoặc lệnh Linux mà bạn định khởi chạy phải hoạt động như mong đợi khi bạn sử dụng lệnh trong cửa sổ terminal.

Thứ hai, tôi tạo tệp dịch vụ và đưa lệnh đó vào đó. Cuối cùng, tôi tạo tệp hẹn giờ khởi chạy tệp dịch vụ.

Để kiểm tra bộ đếm thời gian của bạn, bạn có thể thiết lập để kích hoạt sau vài phút trong tương lai và chờ. Cách này hiệu quả, nhưng nếu bạn phải làm nhiều lần để mọi thứ hoạt động, việc điều chỉnh dòng OnCalendar= mỗi lần bạn thực hiện thay đổi sẽ sớm trở nên nhàm chán.

Bạn có thể khởi chạy bộ hẹn giờ theo cách thủ công bất cứ khi nào bạn muốn.

Mã nguồn [Chọn]
sudo systemctl start name-of-your.timer
Cách này hiệu quả, nhưng bạn cần lưu ý rằng cách này sẽ khởi chạy bộ đếm thời gian của bạn. Tuy nhiên, nếu dòng OnCalendar= của bạn hướng dẫn bộ đếm thời gian khởi chạy dịch vụ vào thứ Tư đầu tiên của tháng, bạn sẽ cần phải đợi cho đến khi dịch vụ được kích hoạt.

Nếu điều bạn thực sự muốn kiểm tra là khả năng thực thi của dịch vụ, hãy khởi động dịch vụ đó.

Mã nguồn [Chọn]
sudo systemctl start name-of-your.service
Ngoài ra còn có lệnh dừng tương ứng.

Mã nguồn [Chọn]
sudo systemctl stop name-of-your.service
Lưu ý rằng nếu các đơn vị RefuseManualStart hoặc RefuseManualStop được bao gồm trong tệp dịch vụ của bạn và được đặt thành Có, bạn sẽ không thể bắt đầu hoặc dừng dịch vụ theo cách thủ công. Nhưng nếu bạn đang gỡ lỗi bộ đếm thời gian systemd do chính bạn tạo ra, có thể bạn chưa bao gồm những đơn vị này. Nếu cần, bạn có thể bình luận chúng trong khi đang thử nghiệm.

6. Tự động báo cáo về các dịch vụ bị lỗi

Chỉ thị MAILTO là một trong những tính năng tinh vi hơn của cron. Bạn đã cung cấp địa chỉ email để nhận thông báo về lỗi hoặc lỗi. Tương đương systemd phức tạp hơn một chút, nhưng nó cung cấp nhiều tính linh hoạt hơn. Phương thức thông báo không nhất thiết phải là email. Ví dụ, bạn có thể dễ dàng gửi thông báo đến kênh Slack.

Bí quyết ở đây là kích hoạt một dịch vụ khác và yêu cầu dịch vụ đó khởi chạy quy trình gửi thông báo.

Trong tệp dịch vụ của bạn, hãy bao gồm chỉ thị OnFailure= và đặt nó thành tên dịch vụ báo cáo lỗi của bạn. Tên dịch vụ thông báo của bạn phải kết thúc bằng dấu @ "@" để chỉ ra rằng đó là dịch vụ mẫu.

Mã nguồn [Chọn]
[Unit]
#...
OnFailure=notify-error@%n.service

Dịch vụ báo cáo của chúng tôi được gọi là "[email protected]." Nếu có lỗi và dịch vụ này được gọi, tên của dịch vụ gọi sẽ được thêm vào sau "@", thay thế mã thông báo "%n". Tên đó có thể được lấy trong [email protected] dưới dạng mã thông báo "%i".

[email protected] của chúng tôi chứa:

Mã nguồn [Chọn]
[Unit]
Description=Report systemd timer errors

[Service]
Type=oneshot
ExecStart=/usr/local/bin/send-to-slack.sh %i

[Install]
WantedBy=multi-user.target

Khi dịch vụ này được kích hoạt, tên của dịch vụ gọi có thể được truy cập thông qua biến "%i". Trên máy của tôi, điều này được chuyển đến một tệp tập lệnh có tên là "send-to-slack.sh" để soạn tin nhắn và gửi đến Slack. Dòng ExecStart= có thể trỏ đến bất kỳ lệnh, chương trình hoặc tập lệnh nào mà bạn có trên máy tính của mình.

7. Và cuối cùng

Mẹo cuối cùng là sử dụng công cụ systemd-analyze với tùy chọn lịch để xác minh và chuẩn hóa ngày và giờ để sử dụng trong các câu lệnh OnCalendar trong tệp hẹn giờ của bạn.

Ví dụ, để kích hoạt bộ đếm thời gian vào lúc 13:15 hàng ngày, hãy cung cấp thời gian cho lệnh theo định dạng đơn giản và yêu cầu systemd-analyze tạo phiên bản chuẩn hóa cho bạn.

Mã nguồn [Chọn]
systemd-analyze calendar 13:15

Định dạng chuẩn hóa là định dạng được sử dụng trong tệp hẹn giờ của bạn.