nohup을 사용하여 여러 스크립트를 동시에 실행

nohup을 사용하여 여러 스크립트를 동시에 실행

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: 더 나은 답변을 추가했습니다.

관련 정보