Cách chạy chương trình định kỳ bằng lệnh Watch trên Linux

Đôi khi, bạn cần chạy liên tục một lệnh hoặc chương trình để giám sát các khía cạnh khác nhau của hệ thống, như những tiến trình đang diễn ra, mức sử dụng dung lượng ổ đĩa hoặc thông tin đăng nhập của người dùng. Lệnh watch trên Linux cho phép bạn tự động hóa các tác vụ này mà không cần phải chạy đi chạy lại theo cách thủ công.

Sử dụng lệnh watch, bạn có thể giám sát các hoạt động của hệ thống trong thời gian thực như thông tin đăng nhập của người dùng, trạng thái mạng, mức sử dụng bộ nhớ và CPU, dung lượng ổ đĩa, v.v... Hãy xem cách sử dụng lệnh watch trong Linux.

Lệnh watch là gì?

Lệnh watch Linux chạy lặp đi lặp lại một lệnh hoặc một chương trình được chỉ định, đều đặn và hiển thị đầu ra của lệnh đó trong Terminal. Điều này cho phép bạn quan sát những thay đổi ở đầu ra trong thời gian thực. Nó làm mới đầu ra ở mỗi khoảng thời gian, ghi đè đầu ra trước đó của lệnh. Theo mặc định, lệnh lặp lại hai giây một lần và tiếp tục cho đến khi bạn dừng lệnh theo cách thủ công bằng Ctrl + C.

Cú pháp lệnh watch

Cú pháp của lệnh watch là:

watch options <command>

Có nhiều tùy chọn dòng lệnh khác nhau có sẵn để sử dụng với lệnh watch. Nếu bạn chạy lệnh watch mà không có bất kỳ tùy chọn nào, nó sẽ chạy lệnh được chỉ định sau mỗi hai giây. Ví dụ, phần sau đây sẽ cho bạn thấy đầu ra của lệnh ls:

watch ls -l ~/

Đầu ra sẽ hiển thị cho bạn những thay đổi trong danh sách thư mục nếu một file được tạo, xóa hoặc thay đổi kích thước, đồng thời refresh đầu ra hai giây một lần.

Xem đầu ra của lệnh ls
Xem đầu ra của lệnh ls

Chạy lệnh cứ sau X giây bằng watch

Bạn có thể thay đổi khoảng thời gian cập nhật của lệnh watch. Điều này có nghĩa là bạn có thể yêu cầu lệnh watch đợi x giây trước khi lặp lại lệnh. Để thay đổi khoảng thời gian cập nhật, hãy sử dụng tùy chọn -n theo sau là khoảng thời gian tính bằng giây.

watch -n 

Chẳng hạn, để chạy lệnh sau mỗi 5 giây, hãy chạy:

watch -n 5 <command>
Thay đổi khoảng thời gian cập nhật của lệnh watch
Thay đổi khoảng thời gian cập nhật của lệnh watch

Highlight những thay đổi giữa các bản cập nhật

Lệnh watch ghi đè đầu ra của nó mỗi lần refresh. Sử dụng tùy chọn -d, bạn cũng có thể highlight những thay đổi giữa đầu ra trước đó và đầu ra được cập nhật.

watch -d

Ẩn header trong đầu ra của lệnh watch

Theo mặc định, lệnh xem hiển thị header ở đầu mỗi đầu ra chứa khoảng thời gian cập nhật, tên lệnh và ngày giờ hiện tại của hệ thống. Bạn có thể loại bỏ header khỏi đầu ra bằng tùy chọn -t:

watch -t <command>

Phát tiếng bíp khi có lỗi

Khi một tiến trình Linux chạy xong, nó sẽ trả về một exit code. Theo quy ước, giá trị là 0 nếu thành công và khác 0 để biểu thị lỗi. Tùy chọn -b của lệnh watch sẽ phát ra âm thanh bíp nếu lệnh trả về kết quả exit khác 0.

Giả sử bạn muốn theo dõi sshd.service và nhận thông báo khi service dừng; bạn sẽ sử dụng:

watch -b sudo systemctl status sshd.service

Lệnh này sẽ phát ra tiếng bíp khi service dừng. Tiếng bíp sẽ dừng khi service tiếp tục. Để kiểm tra điều này, hãy mở một cửa sổ terminal khác và dừng service. Điều này sẽ phát ra tiếng bíp liên tục cho đến khi bạn bắt đầu lại service. Tuy nhiên, để sử dụng tính năng này, bạn phải cài đặt gói beep trên hệ thống của mình.

Thoát lệnh watch khi thay đổi đầu ra

Bạn cũng có thể yêu cầu lệnh watch ngừng chạy và thoát khi đầu ra của lệnh thay đổi. Bạn có thể thực hiện việc này bằng tùy chọn -g. Tùy chọn này rất hữu ích trong các tình huống khi bạn đang chờ đợi những thay đổi nhất định ở đầu ra.

Khi đầu ra thay đổi, lệnh watch sẽ dừng. Bạn có thể kết hợp cách sử dụng này với lệnh echo để hiển thị thông báo trên màn hình.

Ví dụ, hãy xem xét tình huống trong đó bạn đang đợi một file đến thư mục của mình. Lệnh sau sẽ giám sát thư mục cho file được chỉ định. Ngay khi nó đến, lệnh watch sẽ ngừng chạy và thông báo file arrived sẽ hiển thị trên Terminal.

watch -g "ls -l | grep filename" && echo "file arrived"

Một ví dụ hữu ích khác là thông báo khi một người dùng cụ thể đăng nhập vào hệ thống của bạn:

watch -g "who | grep username" && echo "username logged in"

Lệnh này sẽ giám sát đầu ra của lệnh who liệt kê những người dùng đã đăng nhập. Sau khi người dùng đăng nhập, lệnh watch sẽ dừng và hiển thị thông báo trên Terminal.

Tương tự, bạn có thể yêu cầu lệnh watch dừng service khi một số thay đổi được thực hiện trong một file. Hãy nhớ rằng khi sử dụng chuỗi lệnh theo đường dẫn, bạn sẽ cần phải đặt toàn bộ lệnh trong dấu ngoặc kép.

Thứ Hai, 06/11/2023 10:21
51 👨 162
0 Bình luận
Sắp xếp theo
    ❖ Linux