답변:
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
, lprm
및 lpstat
. 인수를 작업에 전달하여 유연성을 높이려면 batch.sh 스크립트를 더 멋지게 만들 수 있습니다.
( batch
이 경로를 내려 가기 전에 시도했지만 OSX에서 대기열로 작동하지 않거나 잘못 사용하고 있습니다.)
batch
.
이 질문은 몇 살이므로 원본 포스터에는 도움이되지 않지만 다른 사람에게는 도움이 될 수 있습니다.
첫 번째 : "작업 스풀러"가 답입니다. 그것은 꽤 강력하고 Fedora는 적어도 그것을 가지고 있습니다.
그러나 내가 사용하는 많은 서버, 많은 번거 로움없이 임의의 패키지를 설치할 수 없으므로 이상적인 bash (또는 perl 등)가 필요합니다.
잠시 동안이 문제를 해결 한 후 지금까지 제대로 작동하는 것처럼 보이는 bash 구현을 생각해 냈습니다. https://github.com/sitaramc/bq 에서 찾을 수 있습니다 .
하나의 bash 스크립트이므로 설치가 간단합니다. 그러나 두 번째 및 세 번째 요구 사항을 충족시키지 못합니다 (그러나이를 구현하는 것도 쉽지 않습니다).
스크립트는 자유롭게 주석 처리되며 원하는 경우 몇 분 안에 스크립트를 검토 할 수 있습니다.
batch
명령이 "병렬화를하지 않았다" 고 말하는 것은 잘못 입니다. 일반적으로 한 작업 시작과 다음 작업 시작 사이에는 기본 60 초의 지연이 있습니다. 그러나 다음 작업이 첫 번째 작업을 완료 할 때까지 기다리지 않아도atd
됩니다.-b
옵션에서 설정 한 값 이 경과 하자마자 배치 대기열에서 작업이 시작됩니다 (atd
Man page 참조).