간단한 대기열 시스템?

간단한 대기열 시스템?

상업용 PC를 사용하여 24시간 내내 백그라운드에서 일부 작업을 수행하려고 합니다.

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

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

추가된 작업은 단순히 대기열에 넣어지고 백그라운드에서 하나씩 실행되어야 합니다(셸을 종료한 후에도 계속됨).

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

답변1

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

이렇게 하면 대기열이 시작되고 배치1이 아닌 다른 이름을 사용하여 더 많은 대기열을 생성할 수 있습니다. 작업 추가:

lp -d batch1 /path/to/jobscript

lpq, 및 를 사용하여 lprm작업을 관리합니다 lpstat. 매개변수를 작업에 더 유연하게 전달하려면 배치.sh 스크립트를 더 우아하게 만들 수 있습니다.

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

답변2

표준이 있습니다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)

답변3

이 질문을 인지한 지 몇 년이 지났기 때문에 원래 포스터에는 도움이 되지 않을 수도 있지만 다른 사람들에게는 도움이 될 수 있습니다.

첫째, "작업 스풀러"가 답입니다. 매우 강력하며 대부분의 Linux 배포판과 Homebrew에 이 기능이 있습니다.

하지만 제가 사용하는 많은 서버에서는 임의의 패키지를 쉽게 설치할 수 없기 때문에 이상적으로는 순수한 bash(또는 Perl 등)가 필요합니다.

한동안 고생한 끝에 지금까지 잘 작동하는 것처럼 보이는 순수한 bash 구현을 생각해 냈습니다. 다음에서 찾을 수 있습니다:https://github.com/sitaramc/notes/blob/master/bq, 그리고문서.

bash 스크립트이므로 설치가 간단합니다. 그러나 두 번째 및 세 번째 요구 사항을 충족합니다(그러나 구현도 간단해야 함).

스크립트에는 수많은 주석이 포함되어 있으며 원하는 경우 몇 분 안에 확인할 수 있습니다.

답변4

대기열 시스템은 많지만 일반적으로 매우 전문화되어 있습니다.

당신은 조사할 수도 있습니다at스케줄러. 어떤 면에서는 비슷 cron하지만 반복 작업을 위한 대기열이라기보다는 일회성 작업을 위한 대기열처럼 설정되어 있습니다. 시스템 로드나 작업 순서 등 시간 이외의 기준을 기반으로 트랜잭션을 "예약"할 수 있습니다.

여러분이 가장 좋아하는 배포판에는 그에 맞는 패키지가 있을 것이 거의 확실합니다.

관련 정보