Mục lục:

Tập lệnh giám sát dịch vụ cho máy chủ Linux: 4 bước
Tập lệnh giám sát dịch vụ cho máy chủ Linux: 4 bước

Video: Tập lệnh giám sát dịch vụ cho máy chủ Linux: 4 bước

Video: Tập lệnh giám sát dịch vụ cho máy chủ Linux: 4 bước
Video: LAB | Thiết lập Zabbix (bản 6.4) trên Ubuntu Server (22.04.3) 2024, Tháng bảy
Anonim
Tập lệnh giám sát dịch vụ cho máy chủ Linux
Tập lệnh giám sát dịch vụ cho máy chủ Linux

Có một hệ thống ổn định, luôn chạy, ngay cả khi bạn đang sử dụng Linux có thể là một nhiệm vụ khó khăn.

Do sự phức tạp của các gói phần mềm hiện đại và mã hóa kém, chắc chắn một số quy trình có thể gặp sự cố theo thời gian. Đây có thể là một điều tồi tệ nếu bạn đang chạy một máy chủ và một số người sử dụng các dịch vụ này.

Bước 1: Sử dụng các phương pháp do Systemd cung cấp

Như bạn có thể đã biết, hầu hết các hệ điều hành Linux hiện đại đang sử dụng systemd.

Nếu bạn không quen thuộc với systemd, thì đây là, theo wikipedia:

"… Một hệ thống init được sử dụng trong các bản phân phối Linux để khởi động không gian người dùng và quản lý tất cả các quy trình sau đó, thay vì các hệ thống init Hệ thống UNIX V hoặc Berkeley Software Distribution (BSD).…"

Nhiều người vẫn đang tranh cãi tại sao cần phải thay thế hệ thống init cũ tốt bằng hệ thống quản lý quy trình phức tạp hơn này, nhưng trên liên kết sau, người ta có thể tìm thấy một lời giải thích tốt:

www.tecmint.com/systemd-replaces-init-in-l…

Cải tiến quan trọng nhất là nó có thể khởi động hệ thống nhanh hơn init, do xử lý đồng thời và song song khi khởi động thay vì cách tiếp cận tuần tự của init

Nếu không đi sâu vào systemd, để thêm một quy trình vào systemd, bạn phải tạo một tệp dịch vụ. Cú pháp của một tệp như vậy có thể từ rất đơn giản đến cực kỳ phức tạp và chúng tôi sẽ không đi vào chi tiết. Để có một tệp.service cơ bản, chỉ cần sử dụng các mục sau:

[Unit] Description = Mô tả ứng dụngDocumentation = https://wikipedia.org/ After = local-fs.target network.target [Service] Type = simpleExecStart = / usr / sbin / applicationExecReload = / usr / sbin / application reloadExecStop = / usr / sbin / application stopRestart = always [Cài đặt] WantedBy = multi-user.target

Đặt chúng vào tệp application.service trong thư mục / lib / systemd / system.

Những gì mỗi tùy chọn này làm được giải thích trong liên kết sau:

access.redhat.com/documentation/en-US/Red_…

Trong oder để bắt đầu ứng dụng của bạn, hãy đưa ra lệnh sau:

sudo systemctl start application.service

Lưu ý: có thể bỏ qua phần mở rộng.service.

Để dừng ứng dụng:

sudo systemctl dừng application.service

Nếu tệp cấu hình đã được thay đổi và bạn muốn tải lại cài đặt:

sudo systemctl tải lại application.service

Để khởi động lại ứng dụng:

sudo systemctl khởi động lại application.service

Để kích hoạt tính năng tự động khởi động khi khởi động:

sudo systemctl kích hoạt application.service

Nếu điều này được bật, thì trình quản lý quy trình systemd sẽ cố gắng khởi động ứng dụng dựa trên cài đặt được cung cấp bởi tệp hệ thống.

Để vô hiệu hóa nó, sử dụng lệnh tương tự như trên, nhưng với tham số 'vô hiệu hóa'.

Nếu bạn đặt Restart = always trong tệp dịch vụ, thì systemd sẽ theo dõi quá trình và nếu không thể tìm thấy nó trong danh sách quá trình, nó sẽ cố gắng khởi động lại tự động.

Nếu bạn đặt

RestartSec = 30

sau lệnh khởi động lại, nó sẽ đợi 30 giây trước khi cố gắng khởi động lại quá trình. Điều này có thể hữu ích, vì nỗ lực khởi động lại liên tục của một dịch vụ / ứng dụng bị lỗi có thể dẫn đến nhu cầu cao trên hệ thống (ghi nhật ký lỗi, v.v.)

Như bạn có thể thấy, systemd đã cung cấp một số phương tiện để giám sát các quy trình. Tuy nhiên, trong một số trường hợp, điều này có thể không đủ. Điều gì sẽ xảy ra nếu một tiến trình không thoát (nó sẽ vẫn nằm trong danh sách tiến trình), nhưng nó ngừng phản hồi. Trong trường hợp này, để đảm bảo rằng một quy trình thực sự đang hoạt động, bạn có thể cần thực hiện các kiểm tra bổ sung.

Đây là nơi mà các tập lệnh từ hướng dẫn này sẽ có ích.

Bước 2: Định cấu hình và sử dụng tập lệnh của trình kiểm tra dịch vụ

Nếu bạn cần kiểm soát nhiều hơn các quy trình / dịch vụ đang chạy của mình, chắc chắn những tập lệnh này sẽ hữu ích.

Vì mã hơi lớn, nó được tải lên github và có thể được tìm thấy trong kho lưu trữ sau:

github.com/trex2000/Service-Monitor-Scripts/blob/master/checkService.sh

'Trái tim' của toàn bộ gói là

checkService.sh

Trước khi sử dụng nó, bạn phải thay thế đường dẫn đầy đủ đến thư mục dịch vụ. Điều này có thể được tìm thấy ở phần đầu của script.

Tập lệnh có thể giám sát một số quy trình và thực hiện tác vụ bổ sung, như được mô tả bên dưới:

Nó đi qua từng tệp từ thư mục con / services có phần mở rộng.serv hoặc.check và sẽ kiểm tra xem có quá trình đang hoạt động được gọi là 'ứng dụng' hay không.

Nếu không có tệp '.check' cho một ứng dụng, chỉ có tệp application.serv:

Nếu quá trình đang hoạt động, nó sẽ coi quá trình là đang hoạt động

Nếu quá trình không hoạt động, thì nó sẽ khởi động lại dịch vụ bằng cách nhập lệnh sau:

ứng dụng khởi động lại systemctl

nếu tệp.serv trống!

Nếu tệp.serv không trống và có quyền thực thi, nó sẽ cố gắng chạy nó dưới dạng tập lệnh BASH thuần túy.

Điều này rất hữu ích nếu bạn phải thực hiện thêm việc gì đó ngoài việc khởi động lại dịch vụ.

Ví dụ: trong tệp spamd.serv, từ repo ở trên, trong trường hợp dịch vụ spamd đã chết, dịch vụ spamassassin cần được khởi động lại thay vào đó, dịch vụ này cũng sẽ khởi động lại spamd. Chỉ khởi động lại spamd sẽ không đủ.

Người ta có thể chỉnh sửa nội dung của một tệp serv như vậy theo nhu cầu.

Một ví dụ khác là tệp pcscd.serv. Trong trường hợp này, một số tiến trình khác cũng bị khởi động lại / bị giết.

Nếu có một tệp kiểm tra, sau khi kiểm tra nếu tiến trình đang chạy, nó cũng sẽ chạy tệp kịch bản này để thực hiện kiểm tra bổ sung.

Ví dụ: đối với dịch vụ oscam, chúng tôi đã tạo một tệp kiểm tra cố gắng kết nối với giao diện web của nó để xem nó có thành công hay không. Nếu không, thì, mặc dù quá trình đang hoạt động, dịch vụ không phản hồi và cần được khởi động lại. Việc khởi động lại dịch vụ phải được thực hiện / được gọi bởi chính tệp.check.

Một ví dụ khác là dịch vụ DLNA trung gian.

Đây là một máy chủ nhỏ cung cấp nội dung video / âm thanh cho các máy khách DLNA và tự phát trên mạng. Đôi khi dịch vụ bị treo và không thể khám phá được nữa, nhưng quá trình này sẽ vẫn hoạt động. Để kiểm tra xem dịch vụ có thể khám phá hay không, tiện ích CLI có tên là gssdp-explore đã được sử dụng. Toàn bộ mã kiểm tra máy chủ DLNA được đặt bên trong một tập lệnh mediatomb.check.

Đây chỉ là một vài ví dụ về cách bạn có thể sử dụng các tệp.serv và.check.

Để theo dõi một dịch vụ mới, bạn phải tạo một.serv và nếu cần cũng có một tệp kiểm tra và viết tập lệnh tương ứng bên trong chúng.

Nếu chỉ kiểm tra sự hiện diện của quá trình nếu đủ, thì một tệp.serv trống sẽ là đủ. Nếu phải thực hiện các kiểm tra bổ sung, thì tệp.check phải được tạo và một tập lệnh nhỏ phải được viết để thực hiện công việc.

Đối với phiên bản Cource, tập lệnh.sh phải được chạy định kỳ, do đó, một công việc cron cũng phải được tạo cho nó:

#check các dịch vụ đang chạy cứ sau 5 phút * / 5 * * * * /var/bin/ServiceCheck/checkService.sh> / dev / null

Bước 3: Kết luận

Tôi hy vọng bạn sẽ thấy gói này hữu ích vì nó có thể rất đơn giản trong việc giám sát các quy trình Linux và hy vọng sẽ giảm thiểu thời gian ngừng hoạt động của các dịch vụ của bạn.

Hãy tải các tập lệnh bổ sung lên github nếu bạn tạo các tập lệnh mới. Chỉ cần cho tôi biết và tôi sẽ thêm bạn làm cộng tác viên.

Đề xuất: