간단한 큐잉 시스템? 실행하고 싶습니다. 기본적으로 다음과 같은

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

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

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

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

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



답변

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)

답변

또 다른 해결책은을 사용 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에서 대기열로 작동하지 않거나 잘못 사용하고 있습니다.)


답변

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

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

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


답변

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

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

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

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

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

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