각 작업에 대해 tmux 창을 시작하는 --tmux를 사용하여 GNU Parallel을 시작합니다.
모든 창을 크기가 잘 분산된 창으로 결합하고 싶습니다(예: 타일 보기: Cb M-5).
나는 이것을 시도한다:
seq 15 | parallel tmux -S /tmp/tmsF8j3K joinp -s {} -t 1
그러나 높이가 균등하게 분배되지 않아 다음과 같은 결과가 발생합니다.
create pane failed: pane too small
joinp
ing 할 때 창에 높이를 균등하게 분배하도록 지시 하거나 모든 창을 창으로 연결한 다음 타일링하도록 지시하는 방법이 있습니까 ? 어쩌면 어떤 용도로 쓰일까요 select-layout tiled
?
편집하다
나는 이것을 테스트 프로그램으로 사용합니다.
seq 1000 | parallel --jobs 9 --tmux sleep
목표는 tmux에 연결될 때 멋진 3x3 창에 실행 중인 작업 9개를 표시하는 것입니다. 작업이 종료되면 다음 작업으로 대체되어야 합니다.
나는 시도했다:
while [ -e "$SERVER" ] ; do
top=$(tmux -S $SERVER new-window -P -n all)
tmux -S $SERVER list-panes -a | grep -v "^$top" | cut -d':' -f1-2 |
while read p ; do
tmux -S $SERVER joinp -s $p -t $top
tmux -S $SERVER select-layout tiled
done
tmux -S $SERVER kill-pane -t $top
tmux -S $SERVER select-layout tiled
sleep 1
done
하지만 여전히 다음을 제공합니다.
can't find pane X
그리고 연결할 때 모든 창을 첫 번째 창의 창으로 유지하지 않습니다.
답변1
창을 만든 후 창을 이동하기 위해 별도의 명령(아마도 루프에서)을 실행하는 대신 시작 시 자체 창을 이동하도록 작업 명령을 확장할 수 있습니다.
seq 1000 |
parallel --jobs 9 --tmux tmux joinp -t :0 \; \
tmux select-layout -t :0 tiled \; \
sleep
arranging in: tiled
그러면 각 창에 다른 tmux 명령(및 해당 출력)이 표시됩니다. 이를 방지하려면 래퍼 스크립트를 작성할 수 있습니다.
#!/bin/sh
# move into the pane set
tmux joinp -t :0
tmux select-layout -t :0 tiled >/dev/null
# start the real task
sleep "$@"
그런 다음 실행
seq 1000 | parallel --tmux --jobs 9 /path/to/wrapper.sh
답변2
귀하의 select-layout
제안은 정확하지만 새 창이 생성될 때마다 호출해야 합니다. 모든 창은 즉시 재구성되므로(내 테스트에서는 95x58 터미널) 다음 분할을 위한 충분한 공간이 있습니다.
이 can't join a pane to its own window
메시지를 방지하려면 추가 창을 만든 다음 모든 기존 창을 해당 창으로 이동하고 마지막에 연결된 창을 종료할 수 있습니다. parallel
올바른 도구는 아닙니다. 어떤 창이 실행되고 있는지 쿼리하고 각 창을 루프로 이동하는 것이 더 좋습니다.
top=$(tmux -S $SERVER new-window -P -n all)
tmux -S $SERVER list-panes -a | grep -v "^$top" | grep -o "%[0-9]\+\>" |
while read p ; do
tmux -S $SERVER joinp -s $p -t $top
tmux -S $SERVER select-layout tiled
done
tmux -S $SERVER kill-pane -t $top
tmux -S $SERVER select-layout tiled
또는 각 새 창을 1행 높이로 만들고 joinp -l 1
터미널 크기에 따라 select-layout
마지막 창만 있으면 충분할 수 있습니다.
그러나 parallel
기존 tmux
창/창은 추적되지 않으며 각 작업은 새 창에서 시작됩니다. 상황에 따라 오래된 것이 사라질 수도 있습니다.종료 시 변경되지 않은 상태로 유지환경. 따라서 일정 시간이 지나면 원래 창(각 작업이 창에 표시됨)에는 실행 중인 작업이 포함되지 않으며 모든 새 작업이 자체 창에 다시 나타납니다. 모든 창(및 이전 창)을 단일 창으로 다시 이동하려면 스크립트를 다시 실행해야 합니다.