Tiêu đề thiết bị đầu cuối động: hiển thị trạng thái tải máy chủ ở khoảng thời gian X giây


0

Khi tôi có một loạt các thiết bị đầu cuối mở trong WM của mình, thật tuyệt nếu tiêu đề cửa sổ thiết bị đầu cuối phản ánh người dùng và máy chủ hiện tại (dễ dàng) cùng với chi tiết tải máy chủ động, được cập nhật tại một số khoảng thời gian (khó).

Sử dụng PROMPT_COMMAND Tôi có thể nhận được dữ liệu mong muốn vào tiêu đề cửa sổ đầu cuối; tuy nhiên, nó yêu cầu tôi làm một cái gì đó (ví dụ thay đổi thư mục) cho tiêu đề cửa sổ để cập nhật thông tin mới nhất. Lý tưởng nhất, giống như nhiều người, tôi không muốn làm gì cả.

Vì vậy, có một số loại phép thuật khoảng thời gian chờ mà tôi có thể áp dụng để có được tiêu đề cửa sổ được cập nhật động mà không cần tương tác của người dùng?

function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} [`curr_load`]\007"'

Cảm ơn vì manh mối

Câu trả lời:


2

Cách duy nhất tôi biết sẽ là một quá trình nền. Bạn có thể tự động khởi động điều này bằng .bash_profile hoặc tương tự (nhưng bạn có thể muốn kiểm tra xem bạn đang ở trong xterm và điều này cũng sẽ gây ra tải vì mọi cửa sổ sẽ hiển thị nó) hoặc khởi động một lần theo cách thủ công khi bạn đăng nhập.

Vì vậy, ví dụ sử dụng mã của bạn ở trên, hãy tạo một tệp trong PATH được gọi là printload được đặt thành exec có chứa:

#!/bin/bash
function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
while true; 
do 
   echo -ne "\033]0;${USER}@${HOSTNAME} [`curr_load`]\007"
   sleep 3
done

Và sau đó chỉ cần bắt đầu in với:

printload &

Tất nhiên bạn có thể tự đặt mình vào một tập lệnh để được gọi tự động hoặc thủ công.

** LƯU Ý: Không được kiểm tra cú pháp nhưng sẽ hoạt động trên lý thuyết **


Bây giờ, +1 thú vị thế nào, chỉ đơn giản là grep'ing lệnh hàng đầu cho dòng tải trong chế độ hàng loạt + thời gian trễ trong hàm current_load? Điều đó có vẻ là một cách tiếp cận đơn giản và ít tốn tài nguyên hơn
virtualeyes

Tôi đã nghĩ thời gian hoạt động sẽ ít chuyên sâu hơn những thứ như top -b -n 1 | grep "top -" và tôi cũng có một số thông tin khác trong đó? Nhưng bất kỳ cách nào bạn tạo ra để hiển thị phương thức (vòng lặp nền) là cách dễ nhất tôi có thể nghĩ đến để thực hiện cập nhật định kỳ.
Dave C

đúng, thời gian hoạt động hiển thị một tập hợp thông tin hạn chế và ý tưởng vòng lặp là một ý tưởng tốt về nguyên tắc. Chỉ cần đọc lên chế độ hàng loạt của hàng đầu và nghĩ rằng việc kết hợp cờ trim -i (chỉ hiển thị tóm tắt) và cờ khoảng -d để xuất ra mỗi, giả sử, 30 giây, sẽ là một vấn đề tài nguyên không phải là vấn đề. Tôi sẽ thử cách tiếp cận của bạn, bất cứ điều gì hoàn thành công việc, không ai trong số này sẽ khiến máy chủ bị đình trệ ;-)
virtualeyes

Tất nhiên tất cả phụ thuộc vào thông tin bạn muốn. Chạy với cờ trim trên đầu vẫn trả về nhiều dòng dữ liệu, dòng đầu tiên dường như có cùng thông tin với thời gian hoạt động nhưng vẫn sẽ cần phải được nối. Tất nhiên nếu bạn muốn nhận được nhiều thông tin từ các dòng khác nhau thì kết hợp lại thì top sẽ rất tuyệt. Dù bằng cách nào bạn nói không có gì nên khiến thế giới bị đình trệ. Chúc may mắn.
Dave C

Vui lòng chỉnh sửa câu trả lời của bạn và tôi sẽ kiểm tra lại - vì vậy, runlevel của bạn dường như là một vòng lặp vô hạn, tôi nghĩ rằng bạn có nghĩa là "in tải" thay cho "runload" trong dòng này: "runload 2> & 1> / dev / null & "trong tệp tải. Ngoài ra, chuyển hướng ra ngoài tiêu chuẩn và err to / dev / null sẽ ngăn tiêu đề thiết bị đầu cuối hiển thị. Có vẻ như với các chuỗi thoát vỏ "\ 033] 0;" và "\ 007" không có đầu ra từ tiếng vang, hoặc ít nhất là không có bất kỳ thứ gì có thể được dẫn. Ví dụ: "./runload> foo.txt" không tạo ra gì ngoài một tệp trống, trong khi "./runload &" tạo tiêu đề thiết bị đầu cuối động như mong muốn.
virtualeyes

0

Đây là những gì tôi đã làm, sử dụng phương pháp tiếp cận tác vụ nền của @Dave C với 2 tập lệnh bash thực thi trên máy chủ từ xa, trạng thái thuật ngữ và trạng thái chạy trạng thái.

#!/bin/bash
function curr_load { cat /proc/loadavg | awk '{print $1 " " $2 " " $3}' }
function mem_free {
  cat /proc/meminfo | grep MemFree|awk '{print sprintf("%.0f", $2/1024)" MB"}'    
}
while true; 
do
  echo -ne "\033]0;${USER}@${HOSTNAME} `mem_free` [`curr_load`]\007"
  sleep 5
done

******
#!/bin/bash
~/scripts/./term-status &

Với các tệp được đặt trên máy chủ từ xa, tôi sửa đổi các bí danh bash hiện có thành ssh vào các máy từ xa đích, thêm lệnh để chạy khi đăng nhập như vậy:
alias goapache = 'ssh -i $ {key} user @ some-ip -t ~ / scripts /./term-status-run; bash --login '

Trong các trình quản lý cửa sổ xếp chồng Linux (i3) của tôi được kết nối với máy chủ từ xa hiện có các tiêu đề như:

foo@serv1 226MB [0.43 0.50 0.35]
bar@serv2 332MB [0.23 0.38 0.27]
baz@serv3 295MB [0.15 0.22 0.26]

phản ánh bộ nhớ trống và tải trung bình ở các khoảng thời gian 5 giây.

Liệu mẹo, loại tốt để xem trạng thái máy chủ trong thanh tiêu đề thiết bị đầu cuối, chưa kể đến việc dễ dàng hơn để phân biệt các thiết bị đầu cuối cục bộ với điều khiển từ xa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.