![단일 시스템에서 여러 단일 코어 작업에 대한 대기열과 유사한 동작이 있습니까? [복사]](https://linux55.com/image/157964/%EB%8B%A8%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EB%8B%A8%EC%9D%BC%20%EC%BD%94%EC%96%B4%20%EC%9E%91%EC%97%85%EC%97%90%20%EB%8C%80%ED%95%9C%20%EB%8C%80%EA%B8%B0%EC%97%B4%EA%B3%BC%20%EC%9C%A0%EC%82%AC%ED%95%9C%20%EB%8F%99%EC%9E%91%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
저는 24개의 코어가 있는 오래된 Mac을 가지고 있으며 수백/수천 개의 단일 코어 작업을 자동화하고 싶습니다. 백그라운드에서 프로세스를 실행하는 bash 스크립트를 만들었지만 동시에 너무 많은 프로세스를 설정하면 컴퓨터가 정지됩니다(분명히 300개는 괜찮고 400개는 너무 많습니다...).
이상적으로 제가 하고 싶은 일은 24일을 실행하고, 하나가 완료되면 25일을 실행하고, 다음 작업이 완료되면 26일을 실행하는 것입니다. 불행하게도 각 작업에는 서로 다른 가변 런타임이 필요할 수 있으므로 시차를 두고 실행되도록 타이밍을 설정할 수는 없습니다.
"wait"가 포함된 항목을 본 적이 있지만 24를 보낸 다음 wait 명령과 함께 976을 보내는 경우 원하는 동작이 제공되는지, 아니면 첫 번째 명령 이후에 나타나는지 잘 모르겠습니다. Run 976 24 계속 완료?
편집: 감사합니다. 중복일 가능성이 높지만 질문에 대한 답변이 병렬성을 가리킬 뿐이므로 여기에서 xargs를 사용하여 이 작업을 수행하는 방법을 계속 탐색할 수 있습니까?
그 이유는 문제의 Mac이 현재 다른 대륙에 있고 앞으로 며칠 내에 이 모든 작업을 실행하려면 Mac이 꼭 필요하기 때문입니다. 무언가를 설치하면서 컴퓨터를 망칠 가능성이 항상 있기 때문에 그렇게 하지 않습니다. 지금 실행하려면 병렬로 설치하고 싶지 않으며 실제로 설치할 수 없습니다. 하지만 bash에는 xargs가 있으므로 이를 사용하여 탐색 중입니다.
지금까지 xargs와 병렬 처리를 만족시키기 위해 bash 스크립트를 다시 작성했으며 다양한 입력으로 실행할 수 있습니다. 지금 내가 가지고 있는 것은 폴더의 모든 파일에 대해 작업을 실행하는 bash 스크립트입니다. 내가 현재 시도한 것:
ls -d myfolder/* | ls -d myfolder/* | xargs -P 2 -L 1 ~/bin/myscript.sh
하지만 여전히 동시에 실행되는 것 같아서 내가 뭘 잘못하고 있는지 잘 모르겠습니다. (여기서 최대 2개를 사용하고 있으므로 계속 살펴보고 테스트할 수 있습니다! 폴더에 4개만 넣었습니다. 실수로 수백 개를 보내는 것을 원하지 않습니다.)
최종 편집: 아하! ! ! 내가 무엇을 잘못했는지 알게 된 것은 한참 뒤의 일이었습니다. xargs가 아마도 내 실행 중일 것입니다.스크립트병렬이지만 실행할 스크립트를 작성한 프로그램은 아닙니다. 매개변수=값 쌍이 필요한 매개변수 목록에 파일 이름을 삽입하는 방법을 알 수 없어서 스크립트를 작성했습니다. 마침내 xargs에서 -I 플래그를 사용하여 이 작업을 수행하는 방법을 알아냈습니다. 이것이 마침내 효과가 있었습니다:
ls -d myfolder/* | xargs -I foo -P 2 -L 1 myprogram arg1 arg2 arg3=foo arg4
(내 생각에는 -I 와 -L 1 이 중복되지만 작동하므로 건드리지 않겠습니다...)
여기서 myprogram의 매개변수 목록에 있는 foo는 각 파일 이름으로 대체됩니다. 알아내는 데 오랜 시간이 걸린 이유 중 하나는 -I가 포함된 대부분의 지시문이 {}를 대체할 요소로 사용하는데, 어떤 이유로 내 Mac에서는 이를 처리할 수 없다는 점입니다. 그래서 나는 그것이 작동하도록 하지 못했지만 foo에서는 잘 작동한다고 생각했습니다.
답변1
답변2
최근에 비슷한 문제가 발생했습니다. 내가 아는 한 두 가지 옵션이 있습니다.
그리고
예를 들어, find
명령으로 찾은 모든 flac 파일을 ogg로 변환하려면 다음을 실행해 보았습니다.
find -name "*.flac" -print0 | xargs -0 -P 24 -L 1 oggenc
명령의 줄을 사용하여 -P 24
한 번에 여러 프로세스를 실행합니다 . 이 내용을 사용하여 필요에 맞게 맞춤설정할 수 있다고 확신합니다. 하지만 귀하의 질문에 대한 자세한 내용이 필요합니다.-L 1
find