![nohup을 사용하여 여러 스크립트를 동시에 실행](https://linux55.com/image/211987/nohup%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EB%8F%99%EC%8B%9C%EC%97%90%20%EC%8B%A4%ED%96%89.png)
nohup을 사용하여 동시에 4개의 스크립트를 실행하고 싶습니다. 이 스크립트는 모두 동일한 폴더에 있습니다.
이런 것이 효과가 있을까요? :
nohup /.scrip1.sh & /.scrip2.sh & /.scrip3.sh & /.scrip4.sh
nohup.out이 인쇄됩니까?
답변1
각 스크립트 앞에 다음을 붙입니다 nohup
.
for script in ./script{1..4}.sh; do
nohup "$script" &
done
nohup
매뉴얼 에 따르면 출력은 다음과 같습니다.추가즉 nohup.out
, 모든 출력이 동일한 파일에 기록된다는 의미입니다. 그러나 모든 스크립트가 동시에 실행되고 파일에 기록되면 출력이 함께 혼합될 수 있다는 점에 유의하십시오.
혼합 출력을 방지하려면 단일 파일에 쓰는 것이 좋습니다.
for script in ./script{1..4}.sh; do
nohup "$script" >"$script.out" 2>&1 &
done
cat ./script{1..4}.sh.out
모든 스크립트의 실행이 완료되면 모든 출력 파일을 단일 스트림으로 연결할 수 있습니다. 명령이 반환되면 모든 백그라운드 작업 실행이 완료된 것입니다 wait
(작업이 여전히 현재 셸 세션과 연결되어 있다고 가정).
이것의 변형:
nohup sh -c 'for script do "$script" >"$script.out" 2>&1 & done' sh ./script{1..4}.sh
여기서 유일한 차이점은 실행할 일부 매개변수가 주어지면 루프를 실행하는 nohup
인라인 스크립트에 적용된다는 것입니다. sh -c
출력은 여전히 .out
이전과 같이 파일에 기록됩니다.
sh -c
이는 스크립트가 HUP 신호를 무시하고(때문에 nohup
) 각 스크립트를 실행하는 셸도 신호를 무시하기 때문에 작동합니다 ("HUP 신호 무시"가 상속됨).
답변2
동일한 작업에서 4개의 스크립트를 실행하기 위해 추가 스크립트를 작성할 수 있습니다.
$ cat all.sh
bash scrip1.sh &
bash scrip2.sh &
bash scrip3.sh &
bash scrip4.sh &
$ cat scrip1.sh
echo hello1
달리기nohup bash all.sh
$ cat nohup.out
hello1
hello2
hello3
hello4
답변3
nohup
하나의 프로그램만 실행할 수 있습니다. nohup에서 여러 프로그램을 실행하려면 다음을 사용할 수 있습니다 sh -c
.
nohup sh -c "/.scrip1.sh & /.scrip2.sh & /.scrip3.sh & /.scrip4.sh"
설명된 대로이 답변
다음은 HUP 신호로부터 스크립트를 보호하지 않습니다.
단일 nohup 인스턴스에서 여러 프로그램을 실행하려면 echo $()
다음과 같이 서브셸을 실행하는 echo에서 스크립트를 실행해야 합니다.
nohup echo $(/.scrip1.sh & /.scrip2.sh & /.scrip3.sh & /.scrip4.sh)
그러나 스크립트의 출력은 연결되므로 출력을 작성할 때 이 점을 고려하십시오.
편집하다: 오타
EDIT2: 내 대답이 잘못된 이유를 추가했습니다.
EDIT3: 더 나은 답변을 추가했습니다.