간단한 큐잉 시스템?


10

상용 PC가 주어지면, 우리는 PC를 사용하여 백그라운드에서 일부 작업을 24 시간 내내 실행하고 싶습니다.

기본적으로 다음과 같은 명령을 원합니다.

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

추가 된 작업은 대기열에 넣고 백그라운드에서 차례로 실행해야합니다 (쉘에서 로그 아웃 한 후에도 계속 실행).

이를 수행하는 간단한 스크립트 / 프로그램이 있습니까?

답변:


7

batch당신이 쫓는 것을 다소간 수행 하는 표준 명령이 있습니다. 보다 정확하게는, batch시스템로드가 한 번에 하나씩 너무 높지 않을 때 작업을 실행합니다 (따라서 병렬화를 수행하지 않음). batch명령의 일부입니다 at패키지.

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)

batch명령이 "병렬화를하지 않았다" 고 말하는 것은 잘못 입니다. 일반적으로 한 작업 시작과 다음 작업 시작 사이에는 기본 60 초의 지연이 있습니다. 그러나 다음 작업이 첫 번째 작업을 완료 할 때까지 기다리지 않아도 atd됩니다. -b옵션에서 설정 한 값 이 경과 하자마자 배치 대기열에서 작업이 시작됩니다 ( atdMan page 참조).
rsaw

배치는 작업을 엄격하게 직렬화하지 않으므로 단일 공유 리소스가 있으면 @sitaram의 답변 (작업 스풀러)이 더 잘 작동합니다.
ergosys 2016 년

5

또 다른 해결책은을 사용 lpd하고 작업을 실행하는 사용자 지정 "인쇄 드라이버"를 만드는 것입니다. 비슷한 요청이 있었을 때 친구가 도와주었습니다. 다음과 같이 스크립트를 작성하여 넣습니다 /tmp/batch.sh.

#!/bin/bash

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

그런 다음 다음을 실행하십시오.

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

대기열이 시작되고 batch1 대신 다른 이름을 사용하여 더 만들 수 있습니다. 다음으로 작업을 추가하십시오.

lp -d batch1 /path/to/jobscript

와 작업 관리 lpq, lprmlpstat. 인수를 작업에 전달하여 유연성을 높이려면 batch.sh 스크립트를 더 멋지게 만들 수 있습니다.

( batch이 경로를 내려 가기 전에 시도했지만 OSX에서 대기열로 작동하지 않거나 잘못 사용하고 있습니다.)


@arnaud가 "commodity PC"를 지정했음을 알았습니다. 이는 아마도이 솔루션을 테스트 한 OSX가 아닐 것입니다. 그러나 이것은 이식 가능해야하며보다 유연합니다 batch.
Joe Fusion

1
이것은 내가 본 것 중 가장 진정한 핵 중 하나입니다.
Thiago Macedo

안타깝게도 더 이상 작동하지 않는 것 같습니다. github.com/apple/cups/commit/…
wdkrnls 3

4

많은 큐잉 시스템이 있지만 종종 매우 전문화되어 있습니다.

at스케줄러를 살펴볼 수 있습니다 . 그것은 cron어떤면에서 비슷하지만 반복 작업보다 한 번만 작업을 위해 대기열처럼 설정됩니다. 시스템로드 또는 작업 순서와 같이 시간 이외의 기준으로 항목을 "스케줄"할 수 있습니다.

가장 좋아하는 배포판에는 패키지가 포함되어 있습니다.


2

이 질문은 몇 살이므로 원본 포스터에는 도움이되지 않지만 다른 사람에게는 도움이 될 수 있습니다.

첫 번째 : "작업 스풀러"가 답입니다. 그것은 꽤 강력하고 Fedora는 적어도 그것을 가지고 있습니다.

그러나 내가 사용하는 많은 서버, 많은 번거 로움없이 임의의 패키지를 설치할 수 없으므로 이상적인 bash (또는 perl 등)가 필요합니다.

잠시 동안이 문제를 해결 한 후 지금까지 제대로 작동하는 것처럼 보이는 bash 구현을 생각해 냈습니다. https://github.com/sitaramc/bq 에서 찾을 수 있습니다 .

하나의 bash 스크립트이므로 설치가 간단합니다. 그러나 두 번째 및 세 번째 요구 사항을 충족시키지 못합니다 (그러나이를 구현하는 것도 쉽지 않습니다).

스크립트는 자유롭게 주석 처리되며 원하는 경우 몇 분 안에 스크립트를 검토 할 수 있습니다.


데비안 패키지는 작업 스풀러이며 실행 파일은 다른 것과 충돌 한 "ts"대신 "tsp"입니다. 대기열에있는 작업을 재정렬 할 수 있기 때문에 at / batch를 사용하여 작업을 수행 할 수 없기 때문에 좋아합니다.
ergosys 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.