Chạy một tập lệnh với bash và cung cấp thời gian kết thúc [trùng lặp]


6

Câu hỏi này đã có câu trả lời ở đây:

Có thể chạy tập lệnh từ bash (ví dụ python) với thời gian kết thúc, nghĩa là nếu tập lệnh này chạy lâu hơn X giây, hãy chấm dứt nó?

Câu trả lời:


5

Có, có thể chạy tập lệnh bash với thời gian chờ cho việc chấm dứt. Bạn có thể làm điều đó bằng cách:

1. Sử dụng thời gian chờ :

Nó chạy một lệnh với giới hạn thời gian. Cú pháp chung bao gồm:

timeout signal duration command/script arguments

Ở đâu :

  • tín hiệu là tên tín hiệu hoặc số tương ứng. Xem tín hiệu man 7
  • Thời lượng là Hết giờ được chỉ định bằng số có hậu tố như tính bằng sgiây, tính mbằng phút, hgiờ, giờ d.
  • Mặc định là giây, Khi bạn chỉ xác định một số. Ví dụ: bạn muốn chấm dứt tập lệnh của mình sau 2 phút, sau đó:

    timeout 2m /path/to/script arg1 arg2
  • NOTE: Tín hiệu hết thời gian mặc định là SIGTERMmột số quy trình không kết thúc. Trong trường hợp đó chúng ta cần sử dụng SIGKILLtín hiệu để giết quá trình.

        timeout -s KILL 2m /path/to/script arg1 arg2

    HOẶC LÀ

        timeout -k 30 2m /path/to/slow-command arg1 arg2

    Trong trường hợp này, thời gian chờ đầu tiên sẽ gửi SIGTERMtín hiệu sau khi hết thời gian ban đầu là 2 phút. Sau đó, đợi thêm 30 giây nữa và gửi SIGKILLcho quá trình nếu nó vẫn chạy.

2. Tôi không cótimeout lệnh:

Vâng, có nhiều lựa chọn thay thế hoặc cách giải quyết, Nếu vì lý do nào đó bạn không thể sử dụng timeout. Đó là :

  1. Điều kiện sleepsau đó kill:

       /path/to/script arg1 arg2 & sleep 2m ; kill $!
  2. Báo động Perl (Điều này có thể được sử dụng trong một tập lệnh liên tiếp.):

       perl -e "alarm 120; exec @ARGV" "/path/to/script arg1 arg2"
  3. Sử dụng lệnh mong đợi :

       time_out=120
       command="/path/to/script arg1 arg2"
    
       expect -c " set echo \"-noecho\";
                   set timeout $time_out;
                   spawn -noecho $command;
                   expect timeout { exit 1 } eof { exit 0 } "

Hãy thoải mái để thêm chi tiết.

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.