Thứ ba, 23/07/2013 | 00:00 GMT+7

Cách cài đặt và quản lý trình giám sát trên Ubuntu và VPS Debian


Giới thiệu

Trong nhiều môi trường VPS, thường xảy ra trường hợp bạn có một số chương trình nhỏ mà bạn muốn chạy liên tục, cho dù đó là các tập lệnh shell nhỏ, ứng dụng Node.js hay bất kỳ gói nào có kích thước lớn.

Thông thường, bạn có thể viết một tập lệnh init cho mỗi chương trình này, nhưng điều này có thể nhanh chóng trở nên mất thời gian để quản lý và không phải lúc nào cũng đặc biệt minh bạch đối với user mới hơn.

Người giám sát là một người quản lý quy trình, làm cho việc quản lý một số chương trình chạy dài trở thành một nhiệm vụ nhỏ bằng cách cung cấp một giao diện nhất quán mà qua đó chúng có thể được giám sát và kiểm soát.

Hướng dẫn này giả định bạn đã quen thuộc với dòng lệnh, cài đặt gói và quản lý server cơ bản.

Cài đặt

Việc cài đặt Trình giám sát trên cả Ubuntu và Debian cực kỳ đơn giản, vì các gói dựng sẵn đã tồn tại trong repository của cả hai bản phân phối.

Với quyền là user root, hãy chạy lệnh sau để cài đặt gói Giám sát:

apt-get install supervisor

Khi quá trình này hoàn tất, trình giám sát sẽ được khởi động, vì các gói được tạo sẵn đi kèm với tập lệnh init cũng sẽ đảm bảo Trình giám sát được khởi động lại sau khi khởi động lại hệ thống. Bạn có thể đảm bảo đây là trường hợp bằng lệnh:

service supervisor restart

Bây giờ ta đã cài đặt Supervisor, ta có thể xem xét việc thêm các chương trình đầu tiên của bạn .

Thêm chương trình

Các chương trình mới được cung cấp cho Người giám sát thông qua các file cấu hình, file này thông báo file thực thi sẽ chạy, bất kỳ biến môi trường nào và cách xử lý kết quả .

Lưu ý: Tất cả các chương trình chạy trong Supervisor phải được chạy ở chế độ không daemonising (đôi khi còn gọi là 'chế độ nền trước'). Nếu theo mặc định, chương trình chuyển và quay lại khi khởi động, thì bạn có thể cần tham khảo hướng dẫn sử dụng của chương trình để tìm tùy chọn bật chế độ này, nếu không Người giám sát sẽ không thể xác định đúng trạng thái của chương trình.

Vì lợi ích của bài viết này, ta sẽ giả sử rằng ta có một tập lệnh shell mà ta muốn tiếp tục chạy liên tục mà ta đã lưu tại /usr/local/bin/long.sh và trông giống như sau:

#!/bin/bash
while true
do 
	# Echo current date to stdout
	echo `date`
	# Echo 'error!' to stderr
	echo 'error!' >&2
	sleep 1
done
chmod +x /usr/local/bin/long.sh

Theo nghĩa thực tế, tập lệnh này rõ ràng là khá vô nghĩa, nhưng nó sẽ cho phép ta bao quát các nguyên tắc cơ bản của cấu hình Người giám sát.

Các file cấu hình chương trình cho các chương trình Người giám sát được tìm thấy trong folder /etc/supervisor/conf.d , thường với một chương trình cho mỗi file và phần mở rộng .conf. Một cấu hình đơn giản cho tập lệnh của ta , được lưu tại /etc/supervisor/conf.d/long_script.conf , sẽ trông giống như sau:

[program:long_script]
command=/usr/local/bin/long.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

Ta sẽ xem xét tầm quan trọng của từng dòng và một số chỉnh sửa có thể mong muốn cho chương trình của bạn bên dưới:

[program:long_script]
command=/usr/local/bin/long.sh

Cấu hình bắt đầu bằng cách xác định một chương trình có tên 'long_script' và đường dẫn đầy đủ đến chương trình:

autostart=true
autorestart=true

Hai dòng tiếp theo xác định hành vi tự động cơ bản của script trong các điều kiện nhất định.

Tùy chọn tự khởi động cho Người giám sát biết rằng chương trình này sẽ được khởi động khi hệ thống khởi động. Đặt giá trị này thành false sẽ yêu cầu lệnh khởi động thủ công sau khi tắt hệ thống.

autorestart xác định cách Người giám sát sẽ quản lý chương trình trong trường hợp nó thoát và có ba tùy chọn:

  • false 'yêu cầu Người giám sát không bao giờ khởi động lại chương trình sau khi nó thoát
  • 'true' cho Người giám sát luôn khởi động lại chương trình sau khi nó thoát
  • 'bất ngờ' yêu cầu Người giám sát chỉ khởi động lại chương trình nếu nó thoát ra với mã lỗi không mong muốn (theo mặc định là bất kỳ thứ gì khác ngoài mã 0 hoặc 2).
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

Hai dòng cuối cùng xác định vị trí của hai file log chính cho chương trình. Theo đề nghị của các tên tùy chọn, stdout và stderr sẽ được hướng dẫn đến các địa điểm stdout_logfilestderr_logfile tương ứng. Thư mục được chỉ định được chỉ định phải tồn tại trước khi ta bắt đầu chương trình, vì Người giám sát sẽ không cố gắng tạo bất kỳ folder nào bị thiếu.

Cấu hình ta đã tạo ở đây là một mẫu hợp lý tối thiểu cho chương trình Người giám sát. Tài liệu này liệt kê nhiều tùy chọn cấu hình tùy chọn khác có sẵn để tinh chỉnh cách chương trình được thực thi.

Sau khi file cấu hình của ta được tạo và lưu, ta có thể thông báo cho Người giám sát về chương trình mới của bạn thông qua lệnh supervisorctl . Đầu tiên, ta yêu cầu Người giám sát tìm kiếm bất kỳ cấu hình chương trình mới hoặc đã thay đổi nào trong folder /etc/supervisor/conf.d với:

supervisorctl reread

Tiếp theo là yêu cầu nó thực hiện bất kỳ thay đổi nào với:

supervisorctl update

Bất kỳ khi nào bạn thực hiện thay đổi đối với các file cấu hình chương trình nào, việc chạy hai lệnh trước đó sẽ làm cho các thay đổi có hiệu lực.

Đến đây, chương trình của ta hiện đang chạy và ta có thể kiểm tra trường hợp này bằng cách xem file log kết quả :

$ tail /var/log/long.out.log
Sat Jul 20 22:21:22 UTC 2013
Sat Jul 20 22:21:23 UTC 2013
Sat Jul 20 22:21:24 UTC 2013
Sat Jul 20 22:21:25 UTC 2013
Sat Jul 20 22:21:26 UTC 2013
Sat Jul 20 22:21:27 UTC 2013
Sat Jul 20 22:21:28 UTC 2013
Sat Jul 20 22:21:29 UTC 2013
Sat Jul 20 22:21:30 UTC 2013
Sat Jul 20 22:21:31 UTC 2013

Sự thành công!

Quản lý Chương trình

Khi các chương trình của ta đang chạy, chắc chắn sẽ có lúc ta muốn dừng, khởi động lại hoặc xem trạng thái của chúng. Chương trình supervisorctl, mà ta đã sử dụng lần đầu ở trên, cũng có một chế độ tương tác mà qua đó ta có thể ra lệnh để điều khiển các chương trình của bạn .

Để vào chế độ tương tác, hãy khởi động supervisorctl mà không có đối số:

$ supervisorctl
long_script                      RUNNING    pid 12614, uptime 1:49:37
supervisor>

Khi khởi động, supervisorctl ban đầu sẽ in trạng thái và thời gian hoạt động của tất cả các chương trình, sau đó hiển thị dấu nhắc lệnh. Nhập trợ giúp sẽ hiển thị tất cả các lệnh có sẵn mà ta có thể sử dụng:

supervisor> help

default commands (type help ):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version
Để bắt đầu một cách đơn giản, ta có thể bắt đầu , dừngkhởi động lại một chương trình bằng các lệnh liên quan theo sau là tên chương trình:
supervisor> stop long_script
long_script: stopped
supervisor> start long_script
long_script: started
supervisor> restart long_script
long_script: stopped
long_script: started

Sử dụng lệnh tail , ta có thể xem các mục nhập mới nhất trong log stdout và stderr cho chương trình của ta :

supervisor> tail long_script
Sun Jul 21 00:36:10 UTC 2013
Sun Jul 21 00:36:11 UTC 2013
Sun Jul 21 00:36:12 UTC 2013
Sun Jul 21 00:36:13 UTC 2013
Sun Jul 21 00:36:14 UTC 2013
Sun Jul 21 00:36:15 UTC 2013
Sun Jul 21 00:36:17 UTC 2013

supervisor> tail long_script stderr
error!
error!
error!
error!
error!
error!
error!

Sử dụng trạng thái, ta có thể xem lại trạng thái thực thi hiện tại của từng chương trình sau khi thực hiện bất kỳ thay đổi nào:

supervisor> status
long_script                      STOPPED    Jul 21 01:07 AM

Cuối cùng, sau khi hoàn tất, ta có thể thoát khỏi supervisorctl bằng Ctrl-C hoặc bằng lệnh thoát vào dấu nhắc :

supervisor> quit

Và đó là nó! Bạn đã nắm vững những điều cơ bản về quản lý các chương trình liên tục thông qua Người giám sát và việc mở rộng điều này cho các chương trình của bạn sẽ là một nhiệm vụ tương đối đơn giản. Nếu có thắc mắc hay cần tư vấn thêm, hãy để lại trong phần comment .


Tags:

Các tin trước

Cách tạo ứng dụng Node.js bằng Sails.js trên VPS Ubuntu 2013-07-16
Cách cài đặt Chef và Ruby với RVM trên VPS Ubuntu 2013-07-15
Cài đặt và sử dụng Ranger, Trình quản lý tệp đầu cuối, trên VPS Ubuntu 2013-07-12
Cách triển khai ứng dụng Flask trên VPS Ubuntu 2013-07-03
Cách cài đặt và sử dụng màn hình trên server cloud Ubuntu 2013-07-01
Cách thiết lập firewall với UFW trên server cloud Ubuntu và Debian 2013-06-25
Cách cài đặt Gerrit trên Ubuntu Cloud Server 2013-06-18
Cách cài đặt diễn đàn Vanilla trên Ubuntu 12.10 2013-06-14
Cách giới hạn mức sử dụng CPU trên Ubuntu 12.10 2013-06-08
Cách cài đặt diễn đàn phpBB® trên Ubuntu 12.10 2013-06-06