프로세스를 트리거하는 이와 같은 명령이 있습니다.
./extract.sh 1553212800 1554854400 &
예를 들어 프로세스 ID가 제공됩니다.1234
1234
완료되면 다음 명령을 실행 하고 싶습니다.
./extract.sh 1554854400 1556668800 &
이와 같은 명령이 더 많이 있습니다
답변1
완료될 때까지 기다리려면 백그라운드에 넣을 필요는 없지만 다음과 같습니다.
./extract.sh 1553212800 1554854400 &
pid=$!
if wait "$pid"; then
./extract.sh 1554854400 1556668800 &
fi
내장 프로그램이 wait
종료되면 다음이 표시됩니다.
ID가 유효하지 않거나 제공된 옵션이 유효하지 않은 경우 마지막 ID의 상태를 반환합니다.
답변2
&
쉘이 명령을 실행하도록 각 명령의 끝에서를 제거할 수 있습니다.아니요백그라운드 작업으로 실행하거나 실제로 백그라운드 작업으로 실행해야 하는 경우(다른 작업도 병렬로 수행하기 때문에) 완료하기 전에 프로세스의 PID를 변수에 저장해야 합니다 wait
.
./extract.sh 1553212800 1554854400 & pid="$!"
# other things
wait "$pid"
./extract.sh 1554854400 1556668800 & & pid="$!"
# other things (again)
wait "$pid"
# etc.
개인적으로 그러한 명령의 긴 목록이 있다면 모두 다음과 같은 스크립트에 넣을 것입니다.
#!/bin/sh
./extract.sh 1553212800 1554854400
./extract.sh 1554854400 1556668800
(참고로 백그라운드 작업은 없습니다)
그런 다음 다음과 같이 스크립트를 시작할 수 있습니다 nohup
.
nohup ./script.sh &
이렇게 하면 로그아웃했다가 다시 로그인하여 스크립트 프로세스가 아직 실행 중인지 확인할 수 있습니다( check 를 사용하여 ps
).
아니면 그냥 세션을 시작 하고 일반(no ) tmux
처럼 스크립트를 시작한 다음 분리를 누를 수도 있습니다. 나중에 .을 사용하여 동일한 쉘 세션으로 돌아갈 수 있습니다 . 설명서 를 참조하세요 .nohup
Ctrl+Bdtmux attach
tmux
답변3
이것이 명시된 질문에 직접적으로 대답할 수는 없지만 특히 OP가 아직 파이프라인을 확정하지 않은 것처럼 보이기 때문에 이 솔루션을 제안하겠다고 생각했습니다.
많은 Posix 셸에서는 기호를 통해 여러 명령을 함께 연결할 수 있습니다 &&
. 기본적으로 이는 첫 번째 명령을 실행한 다음 첫 번째 명령이 오류 없이 실행을 마친 후 실행을 의미합니다 &&
.
./extract.sh 1553212800 1554854400 && ./extract.sh 1554854400 1556668800 &
그러나 이는 모든 것을 하나의 대규모 백그라운드 프로세스로 실행합니다. 또한 오류를 발생시킨 명령 다음에 오는 명령이 실행되지 않을 위험이 있습니다. 따라서 다음과 같은 시나리오에서:
./valid_run.sh && ./throws_error.sh && ./second_valid_run.sh
valid_run.sh
제대로 작동하지만 실행 throws_error.sh
되지 않으면 실행 second_valid_run.sh
되지 않습니다.
또는 더 깔끔한 접근 방식은 모든 명령을 래퍼 BASH 스크립트에 저장한 다음 해당 스크립트를 실행하는 것입니다.
래퍼.sh:
#!/bin/bash
./extract.sh 1553212800 1554854400
./extract.sh 1554854400 1556668800
명령줄:
$ ./wrapper.sh &
나는 이것이 아마도 명령을 구성하는 가장 좋은 방법이라고 생각합니다.