내가 사용하고 싶은 프로그램은 다음을 통해 시작할 수 있습니다.
./myprogram < input_part1.txt > output_part1.txt
각 작업이 별도의 세션에서 실행되는 myprogram
하나의 스크립트에서 4개의 작업을 어떻게 시작할 수 있습니까 ? 스크립트를 시작할 때까지 세션이 존재하지 않습니다.BASH
SCREEN
나는 시도했다:
#!/bin/bash
screen -mdS test1 ./myprogram < input_part1.txt > output_part1.txt
screen -mdS test2 ./myprogram < input_part2.txt > output_part2.txt
screen -mdS test3 ./myprogram < input_part3.txt > output_part3.txt
screen -mdS test4 ./myprogram < input_part4.txt > output_part4.txt
그러나 이것은 작동하지 않습니다. 왜 안 돼?
답변1
단일 세션의 경우 다음과 같은 것을 사용합니다.
cat > screenrc-test <<EOF
screen -t test1 sh -c "./myprogram < input_part1.txt > output_part1.txt"
screen -t test2 sh -c "./myprogram < input_part2.txt > output_part2.txt"
screen -t test3 sh -c "./myprogram < input_part3.txt > output_part3.txt"
screen -t test4 sh -c "./myprogram < input_part4.txt > output_part4.txt"
EOF
screen -S test-all -c screenrc-test
왜 여러 세션을 원하는지 모르겠지만 구문은 비슷합니다.
screen -mdS test1 sh -c "./myprogram < input_part1.txt > output_part1.txt"
세션당. 리디렉션에는 셸이 필요합니다. 그렇지 screen
않으면 리디렉션이 myprogram
.
한 가지 예:
#!/bin/sh
screen -mdS test1 zsh -c "repeat 4 { date; sleep 1; } > out1"
screen -mdS test2 zsh -c "repeat 4 { date; sleep 1; } > out2"
screen -mdS test3 zsh -c "repeat 4 { date; sleep 1; } > out3"
실행 후(4초 대기) 다음을 얻습니다.
==> out1 <==
Tue Sep 2 09:23:07 CEST 2014
Tue Sep 2 09:23:08 CEST 2014
Tue Sep 2 09:23:09 CEST 2014
Tue Sep 2 09:23:10 CEST 2014
==> out2 <==
Tue Sep 2 09:23:07 CEST 2014
Tue Sep 2 09:23:08 CEST 2014
Tue Sep 2 09:23:09 CEST 2014
Tue Sep 2 09:23:10 CEST 2014
==> out3 <==
Tue Sep 2 09:23:07 CEST 2014
Tue Sep 2 09:23:08 CEST 2014
Tue Sep 2 09:23:09 CEST 2014
Tue Sep 2 09:23:10 CEST 2014
표시 명령은 병렬로 실행됩니다.