linux shell, giữ nhiệm vụ sống trong thời gian quy định


4

Tôi đang tìm kiếm một công cụ để duy trì một nhiệm vụ (khởi động lại nếu cần thiết) trong một khoảng thời gian xác định (tính bằng giây), sau đó giết nó và dừng lại. Ví dụ: keep_for 3600 rsync foo bar:faznên thử đồng bộ hóa một thư mục (khởi động lại rsync trong trường hợp mất kết nối), nhưng rõ ràng sẽ giết rsync và ngừng hồi âm sau một giờ.

Tôi đã cố gắng viết một kịch bản shell cho điều đó, nhưng thật khó để viết, với rất nhiều trường hợp cạnh (như quá trình con không bị giết, hoặc thoát khỏi các vấn đề về vỏ). Vậy ... có lẽ đã có một công cụ cho việc đó?

Câu trả lời:


3

Nếu hệ thống của bạn có Upstart , bạn có thể tạo tệp sự kiện cho tập lệnh / lệnh của mình và điều này có thể làm những gì bạn muốn (nếu không thì bây giờ có thể trong phiên bản tương lai sử dụng các tính năng được lên kế hoạch ).

Dưới đây là một vài thông tin từ events(5)trang man:

  • Khởi động bằng tay:

    bắt đầu vào <event>
    Mô tả về điều kiện nào để bắt đầu công việc này. Không có phần này, công việc chỉ có thể được bắt đầu bằng tay với lệnh initctl (8).

  • Hồi sinh:

    hô hấp
    Điều này đặt các daemon, dịch vụ và cờ hồi sinh cho công việc. Cờ hồi sinh có nghĩa là quá trình sẽ được khởi động lại khi nó kết thúc

  • Giới hạn hồi sinh:

    giới hạn hồi sinh [tính [hết thời gian]]
    Điều này cấu hình giới hạn hồi sinh. Giới hạn hồi sinh chỉ áp dụng nếu cờ hồi sinh được đặt cho công việc; thiết lập một giới hạn không tự động thiết lập khả năng hô hấp. Nếu quy trình được xử lý nhiều hơn số lần đếm trong một khoảng thời gian chờ vài giây, công việc sẽ tự động bị dừng và không được khởi động lại. Giới hạn mặc định là 10 lần trong vòng 5 giây.

Xem Bắt đầu .


Nếu tôi hiểu hướng dẫn sử dụng một cách chính xác, đây là một tính năng được lên kế hoạch ... tôi cũng nghĩ rằng đối với một lệnh ad-hoc thì nó hơi quá lớn :-) Tuy nhiên, cảm ơn bạn đã gợi ý.
liori

0

Tôi tách các nhiệm vụ, giữ chúng trong cùng một kịch bản (Tôi nghĩ đây là chương trình C, nhưng nó có thể thực hiện được như một kịch bản).

Tôi sẽ bắt đầu với một bộ đếm thời gian quy trình nền để gửi tín hiệu vào thời gian chờ. Bộ xử lý tín hiệu tắt mọi thứ sạch sẽ và thoát ra.

Sau đó bắt đầu một vòng lặp đáp ứng lệnh mong muốn bất cứ khi nào nó thoát mà không có trạng thái thành công (không).

Cố gắng theo dõi cả thời gian chờ và lệnh trong một vòng lặp sẽ trở nên quá phức tạp.


1
Nếu tôi muốn viết một kịch bản, tôi sẽ hỏi về stackoverflow. Ở đây tôi chỉ tìm kiếm một giải pháp sẵn sàng.
liori

-1

Câu hỏi này được đặt ra trong điều khoản của việc thực hiện. Tôi đề nghị bạn nên đóng khung lại theo những gì bạn đang cố gắng thực hiện để có thể mang lại một giải pháp rõ ràng (và thanh lịch) hơn.


Tôi đang tìm kiếm một công cụ mạnh mẽ chung để hồi sinh một quá trình trong một thời gian nhất định, và sau đó buộc phải dừng nó lại sau một thời gian. Tải xuống / tải lên một tập tin và phát radio internet bằng mplayer là những trường hợp sử dụng thông thường của tôi, nhưng tôi thường có các nhiệm vụ khác nhau phải được thực hiện trong một cửa sổ thời gian cụ thể. Cả hai rsyncmplayerdừng lại khi có ngắt kết nối, vì vậy tôi muốn chúng được khởi động lại. Đó là tất cả.
liori
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.