한 번에 하나의 작업을 처리하는 일괄 처리

한 번에 하나의 작업을 처리하는 일괄 처리

저는 유연한 큐잉 구성 가능성을 갖춘 IBM i(AS/400) 일괄 처리에 익숙합니다. 비슷한 Linux용 일괄 처리 도구를 찾고 있습니다.

가장 중요한 것은 대기열에서 한 번에 하나의 작업을 가져와서 실행하는 것입니다. 그 후에는 더 많은 항목을 찾기 위해 대기열을 검색합니다. 그렇다면 다음 작업을 실행하세요.

at -b상대적으로 가깝지만 작업이 너무 적은 리소스를 차지하여 로드가 낮게 유지되면 더 많은 작업이 병렬로 실행되므로 바람직하지 않습니다.

위젯을 실행하는 것도 또 다른 옵션이지만 위젯의 동작이 너무 정적이고 특정 대기열에서 새 항목을 찾기 위해 데몬으로 실행되지 않습니다. 일반 크론 작업으로 실행할 수 있지만 대기열에서 작업 제거를 직접 처리해야 합니다.

원하는 것을 달성하려면 코드를 직접 작성하거나 확장해야 합니까? 아니면 대체 일괄 대기열 처리 메커니즘을 사용할 수 있습니까?

답변1

bash를 사용하면 간단히 이 작업을 수행할 수 있습니다.

1-mkfifo를 사용하여 fifo 생성(파일을 생성할 수도 있음)

mkfifo mybuff

2- tail fifo를 수행하고 각 라인을 실행자에게 전달합니다(이것은 일종의 작업 서버가 됩니다).

while IFS= read -r line
do
  echo "Running: '$line' with bash"
  bash -c "$line"
  echo "Finished '$line' with exit code: $?"
done < <(tail -f mybuff)

3- 예를 들어 명령을 대기열로 보냅니다(클라이언트 요청 작업이 됩니다).

echo 'sleep 10' >> mybuff
echo 'echo "hello world"' >> mybuff
echo 'my fancy command to be executed' >> mybuff
...

추신: 아래 예와 같이 2단계를 단순화할 수 있지만 이렇게 하면 명령 버퍼에 "exit"를 보낼 때 작업 리스너가 완료됩니다.

tail -f mybuff | bash -x

답변2

ts - task spooler. A simple unix batch system작업에 달려 있어야 합니다. 작업 스풀러/큐 서버를 실행하며 다음과 같은 간단한 명령을 사용하여 새 작업을 추가할 수 있습니다.

tsp yourcommand

슬롯 수, 즉 한 번에 실행해야 하는 작업 수를 지정할 수 있습니다. 내가 아는 한 기본적으로 값은 1로 설정되어 있습니다. 또한 이전 명령이 성공한 경우에만 명령을 실행하는 것과 같은 일부 고급 기능도 있습니다. 각 작업에 대한 대기열과 세부정보를 볼 수도 있습니다. 자세한 내용은 다음에서 확인할 수 있습니다.맨페이지.

관련 정보