Hệ thống xếp hàng đơn giản?


10

Với một PC hàng hóa, chúng tôi muốn sử dụng nó để thực hiện một số tác vụ trong nền xung quanh đồng hồ.

Về cơ bản, chúng tôi muốn có các lệnh như:

add-task *insert command here*
list-tasks
remove-task(s)

Các tác vụ được thêm vào chỉ cần được đặt trong một hàng đợi và thực hiện lần lượt từng cái khác trong nền (tiếp tục chạy sau khi đăng xuất khỏi shell).

Có kịch bản / chương trình đơn giản nào thực hiện điều này không?

Câu trả lời:


7

Có một batchlệnh tiêu chuẩn thực hiện ít nhiều những gì bạn đang theo đuổi. Chính xác hơn, batchthực thi các công việc khi tải hệ thống không quá cao, mỗi lần một công việc (vì vậy nó không thực hiện bất kỳ sự song song nào). Các batchlệnh là một phần của atgói.

echo 'command1 --foo=bar' | batch      
echo 'command2 "$(wibble)"' | batch
at -q b -l              # on many OSes, a slightly shorter synonym is: atq -q b
at -q b -r 1234         # Unschedule a pending task (atq gives the task ID)

Thật sai lầm khi nói rằng batchlệnh "không thực hiện bất kỳ sự song song hóa nào". Thường có độ trễ 60 giây mặc định giữa bắt đầu một công việc và bắt đầu công việc tiếp theo; tuy nhiên, không có gì để làm cho công việc tiếp theo chờ đợi công việc đầu tiên kết thúc - atdsẽ vui vẻ khởi động các công việc từ hàng đợi ngay khi giá trị được đặt bởi -btùy chọn đã hết (xem atdtrang hướng dẫn).
rsaw

Batch không tuần tự hóa nghiêm ngặt các tác vụ, vì vậy nếu bạn có một tài nguyên được chia sẻ duy nhất, câu trả lời của @sitaram (bộ đệm tác vụ) sẽ hoạt động tốt hơn.
ergosys

5

Một giải pháp khác là sử dụng lpdvà tạo một "trình điều khiển in" tùy chỉnh để chạy các công việc của bạn. Một người bạn đã giúp tôi giải quyết việc này khi tôi có một yêu cầu tương tự. Tạo một kịch bản như thế này và đặt nó vào /tmp/batch.sh:

#!/bin/bash

TMPFILE=$(mktemp /tmp/XXXX)
exec <"$6"
cat - > $TMPFILE
chmod a+x $TMPFILE
$TMPFILE
rm -f $TMPFILE

Sau đó chạy:

lpadmin -p batch1 -E -P /tmp/batch.sh

Điều đó bắt đầu một hàng đợi và bạn có thể tạo thêm bằng cách sử dụng các tên khác thay vì batch1. Thêm một công việc với:

lp -d batch1 /path/to/jobscript

Quản lý công việc với lpq, lprmlpstat. Nếu bạn muốn linh hoạt hơn với việc chuyển các đối số cho công việc của mình, bạn có thể làm cho tập lệnh batch.sh trở nên dễ dàng hơn.

(Tôi đã thử batchtrước khi đi xuống tuyến đường này, nhưng nó không hoạt động như một hàng đợi trên OSX, hoặc tôi đã sử dụng sai.)


Tôi nhận ra rằng @arnaud đã chỉ định "PC hàng hóa", có nghĩa là nó có thể không phải là OSX, nơi tôi đã thử nghiệm giải pháp này. Tuy nhiên, cái này nên mang theo, và nó linh hoạt hơn nhiều batch.
Joe Fusion

1
Đây có thể là một trong những hack chính hãng nhất mà tôi từng thấy.
Thiago Macedo

Đáng buồn thay, điều này không còn xuất hiện để làm việc. github.com/apple/cups/commit/
Mạnh

4

Có rất nhiều hệ thống xếp hàng, nhưng thường rất chuyên dụng.

Bạn có thể nhìn vào atlịch trình. Nó giống như crontrong một số cách nhưng nó được thiết lập giống như một hàng đợi cho các công việc một lần hơn là cho các công việc lặp lại. Nó có thể "lên lịch" mọi thứ theo các tiêu chí khác ngoài thời gian, chẳng hạn như tải hệ thống hoặc chuỗi công việc.

Bản phân phối yêu thích của bạn gần như chắc chắn sẽ có các gói cho nó.


2

Tôi nhận thấy câu hỏi này đã được vài năm tuổi, vì vậy nó có thể không giúp ích cho poster gốc, nhưng nó có thể giúp người khác.

Đầu tiên: "bộ đệm nhiệm vụ" là câu trả lời. Nó khá mạnh và ít nhất Fedora cũng có nó.

Nhưng nhiều máy chủ tôi sử dụng, tôi không thể cài đặt các gói tùy ý mà không gặp nhiều rắc rối, vì vậy tôi cần một cái gì đó lý tưởng là bash thuần túy (hoặc perl, hoặc như vậy).

Sau khi vật lộn với điều này một thời gian, tôi đã nghĩ ra một cách thực hiện bash thuần túy có vẻ hoạt động tốt cho đến nay. Bạn có thể tìm thấy nó tại https://github.com/sitaramc/bq .

Nó chỉ là một tập lệnh bash nên việc cài đặt là không đáng kể. Tuy nhiên, nó đáp ứng các yêu cầu thứ hai và thứ ba của bạn (nhưng nó cũng không quan trọng để thực hiện những yêu cầu đó).

Kịch bản được bình luận tự do và bạn sẽ có thể xem lại trong vài phút nếu bạn muốn.


gói debian là bộ đệm tác vụ, thực thi là "tsp" thay vì "ts" va chạm với thứ khác. Tôi cũng thích nó vì bạn có thể sắp xếp lại các nhiệm vụ trong hàng đợi, bạn không thể thực hiện điều đó với / lô.
ergosys
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.