"작업이 완료될 때까지 기다린 후 다른 작업을 시작하세요"라는 명령이요? [복사]

"작업이 완료될 때까지 기다린 후 다른 작업을 시작하세요"라는 명령이요? [복사]

내가 이걸 하고 싶은지 미리 몰랐어, 한 작업이 완료될 때까지 기다렸다가 자동으로 다른 작업을 시작할 수 있습니까?

예를 들어, tmux 세션으로 이동하여 sudo apt update && sudo apt upgrade. 업데이트/업그레이드 프로세스가 완료될 때까지 기다려야 하지만 느리게 진행되고 있어서 기다리고 싶지 않습니다. 특히 진행되는 동안 기다리지 않고 다른 작업을 수행할 수 있기 때문에 더욱 그렇습니다.

나는 이것을 잘 작동 ^Z시킬 수 있지만 bg내 질문은, 해당 작업이 완료된 후에 작업을 삽입하여 && sudo apt install tree예를 들 수 있는 방법이 있습니까? 입니다.

편집: 이 질문은 연결된 질문 및 답변과 다르다고 생각합니다. 왜냐하면 job1 && job2 ^Z fg; echo "done"완료 echo "done"후에 실행될 것이기 때문입니다 job1. job2분명히 삭제됩니다. 해결 방법은 job1과 사이에 세미콜론을 사용하는 것이지만 job2이는 나에게 좋은 해결책이 아닙니다.

답변1

일반적으로 말해서, 주어진 것보다 더 나은 해결책은 없습니다기본 작업 제어: 작업 중지, 스택에 작업 추가 및 "fg"하지만 지적했듯이 with를 사용하면 실패하고 &&(백그라운드에 배치된 명령이 0이 아닌 상태 코드로 "종료"되었기 때문에) 복합 명령이 항상 원하는 효과를 얻지는 못합니다(현재 실행 중인 명령이 배치됨). 백그라운드에서 즉시 다음 명령을 실행합니다).

이 특정 사용 사례에는 해결책이 있습니다. Diomidis Spinellis를 사용할 수 있습니다.lockf.pyapt현재 명령이 완료되기를 기다리는 명령 대기열을 만듭니다.

lockf /var/lib/apt/lock apt install tree

이는 예측 가능한 방식으로 외부에서 완료를 관찰할 수 있는 모든 명령으로 일반화될 수 있습니다.

대기열이 정렬되지 않아 다음을 실행하면 문제가 발생할 수 있습니다.

sudo apt update && sudo apt upgrade

설치가 실행되는 동안 큐에 대기하면 잠금을 얻을 수 없기 때문에 결국 실행 되고 실패 apt update할 수 있습니다 .apt installapt updateapt upgrade

답변2

flock(1)Linux의 유틸리티(또는 lockf.py다른 운영 체제의 스크립트) 사용답변, 이는 이와 유사함)은 "대기열에 있는" 명령이 제출된 순서대로 실행된다는 것을 보장하지 않습니다.

$ sh -c 'for i in 1 2 3 4 5 6 7 8 9; do sleep .1; flock / sh -c "echo $i; sleep .3" & done; wait'
1
2
3
5
4
...

작업 대기열 생성에 대한 어리석은 "해결책"은 다음과 같습니다.

$ (echo > jobq; tail -f jobq | sh) &
[2] 6641
$ echo echo 1 >> jobq
1
$ echo echo 2 >> jobq
$ 2
etc

답변3

당신은 사용해야합니다작업 스풀러( tsp아님 ts) 여러 apt명령을 실행합니다.

tsp apt command 1 -y

그런 다음 옵션을 사용하여 -d두 번째 apt명령을 대기열 목록에 추가합니다.

tsp -d apt command 2 -y

목록 확인을 위한 tsp통계입니다 .

남자 티스푼:

ts사용자별 UNIX 작업 대기열이 기본적으로 실행됩니다. 사용자는 대기열에 명령을 추가하고 언제든지 대기열을 관찰하며 작업 결과(실제로는 표준 출력 및 종료 오류)를 볼 수 있습니다.

-d

이 명령은 이전 명령이 성공적으로 완료된 경우에만 실행됩니다(오류 수준 = 0). 대기열에 추가된 새 작업은 이전 명령의 결과에 따라 달라집니다. 작업이 실행되지 않으면 추가 종속성은 실패한 것으로 간주됩니다.

답변4

항상 업데이트/업그레이드하는 습관을 들이신다면,

( sudo apt update && sudo apt upgrade )

그러면 작업 제어가 하위 프로세스를 올바르게 일시 중지하여 다음을 입력할 수 있습니다.

fg ; echo "Example new command"

관련 정보