Cách đặt giới hạn thời gian cho lệnh Linux | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Cách đặt giới hạn thời gian cho lệnh Linux

Chia sẻ kiến thức 05/03/2022

Bạn muốn chạy một lệnh trên Linux nhưng không muốn nó chiếm quá nhiều tài nguyên? Giải pháp là đặt ra một giới hạn thời gian cho nó.


Đối với quản trị viên hệ thống, những người chịu trách nhiệm kiểm soát các máy chủ Linux, quản lý tài nguyên là một nhiệm vụ quan trọng. Đôi khi, các lệnh Linux chiếm một lượng lớn tài nguyên hệ thống và cần phải dừng lại.

May mắn là bạn có thể giới hạn thời gian chạy các lệnh của mình bằng các tiện ích như timelimit. Trong bài viết này, chúng tôi sẽ thảo luận lý do tại sao bạn nên thêm giới hạn thời gian cho các lệnh của mình và cách thực hiện bằng các lệnh như timelimit và timeout.

Tại sao giới hạn thời gian chạy của lệnh?

Đầu tiên, bạn có thể đang chạy một máy tính hoặc một máy chủ cũ và không muốn hệ thống của mình lãng phí tài nguyên ở những quá trình xử lý không mong muốn.

Thứ hai, các tác vụ có giới hạn thời gian, chẳng hạn như chuyển file (file transfer) kết thúc sau một khoảng thời gian nhất định, nhưng quá trình của chúng không dừng ngay lập tức. Để hạn chế chương trình chiếm thêm thời gian và bộ nhớ của CPU, bạn có thể thêm giới hạn để dừng quá trình sau khi quá trình truyền hoàn tất.

Thêm giới hạn bằng lệnh timeout

Lệnh timeout là lựa chọn đầu tiên của nhiều người dùng Linux để thêm giới hạn thời gian vào các lệnh của họ. Vì công cụ này là một phần của gói GNU Core Utilities, nên nó được cài đặt sẵn trên hầu hết mọi bản phân phối Linux.

Cú pháp cơ bản của lệnh timeout là:

timeout limit command

… trong đó limit là lượng thời gian lệnh sẽ chạy và command là lệnh Linux mà bạn muốn thực thi với giới hạn thời gian.

Ví dụ: nếu bạn muốn nhận chi tiết quy trình bằng cách sử dụng lệnh top trong 10 giây:

timeout 10s top

Lệnh top không bao giờ kết thúc và bạn phải thoát nó theo cách thủ công bằng Ctrl + C. Lệnh nói trên sẽ chạy top trong 10 giây và khi hết giờ, timeout sẽ ngừng thực thi nó. Lưu ý rằng thời gian chờ lấy second (giây) làm đơn vị thời gian mặc định, có nghĩa là  10 và 10s  giống nhau.

Bạn cũng có thể sử dụng mh và d cho minute (phút), hour (giờ) và day (ngày).

Gửi tín hiệu kill theo cách thủ công với timeout

Theo mặc định, lệnh timeout gửi SIGTERM làm tín hiệu hủy. SIGTERM là viết tắt của Signal Termina, nghĩa là kết thúc quá trình ngay lập tức.

Bạn cũng có thể gửi các tín hiệu khác bằng cách sử dụng cờ (flag) -s . Ví dụ: để gửi tín hiệu SIGKILL:

timeout -s SIGKILL 10 top

Cũng có thể chỉ định tín hiệu với số tín hiệu của nó. Lệnh sau cũng gửi tín hiệu SIGKILL đến lệnh top: 

timeout -s 9 10 top

… trong đó 9 là số tín hiệu cho SIGKILL.

Để nhận danh sách tất cả các tín hiệu có sẵn:

kill -l

Một số lệnh không dừng hoàn toàn ngay cả khi giới hạn thời gian đã được thêm. Trong những tình huống như vậy, việc thêm tín hiệu kill bằng lệnh timeout sẽ thực hiện được điều này. 

timeout -k 15 10 top

Lệnh nói trên trước tiên sẽ chạy lệnh top trong 10 giây và nếu lệnh không dừng, nó sẽ gửi tín hiệu kết thúc quá trình sau 15 giây.

Hạn chế thời gian chạy lệnh với timelimit

Không giống như lệnh timeout, timelimit không phải là một trong những gói tiêu chuẩn được cài đặt sẵn trên các bản phân phối Linux. Do đó, bạn sẽ phải cài đặt thủ công timelimit trên hệ thống của mình.

Để cài đặt trên các bản phân phối dựa trên Debian:

sudo apt install timelimit

Timelimit không có sẵn trong kho lưu trữ chính thức của Arch. Tuy nhiên, bạn có thể cài đặt nó bằng trình quản lý gói AUR như yay.

sudo yay -S timelimit

Để cài đặt trên Fedora:

sudo dnf install timelimit

Trên RHEL và CentOS:

sudo yum install timelimit

Ngoài ra, nếu bạn vẫn không thể cài đặt gói trên hệ thống của mình, hãy tải xuống mã nguồn từ trang web chính thức và cài đặt theo cách thủ công.

Tải xuốngtimelimit

Để chạy lệnh top trong 10 giây bằng cách sử dụng timelimit:

timelimit -t10 top

Timelimit nhận nhiều đối số (argument) như warntimewarnsigkilltime và killsig. Nếu người dùng không cung cấp các đối số này, các giá trị mặc định của chúng sẽ được lấy: warntime=3600 giây, warnsig=15killtime=120, and killsig=9

Quản lý vòng đời của một lệnh trong Linux

Việc giám sát các lệnh và kiểm soát các quy trình rất quan trọng nếu máy Linux của bạn có tài nguyên hạn chế. Các tiện ích như timeout và timelimit là một cứu cánh vì chúng cho phép bạn thêm các giới hạn thời gian vào các lệnh của mình.

Dịch từ: https://www.makeuseof.com/how-to-set-a-time-limit-on-linux-commands/

Vân Nguyễn

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại