SSH를 통해 장기 실행 스크립트를 시작하고 즉시 반환하고 싶습니다. 그 후 5분마다 원격 호스트를 확인하여 작업이 완료되었는지 확인하고 싶습니다.
첫 번째 부분을 완료하기 위해 다음을 사용했습니다.이 트릭:
ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && (/root/backup.sh </dev/null > $TMP_FILE 2>&1 &) && echo $TMP_FILE'
DONE_$TMP_FILE
이제 두 번째 부분에서는 backup.sh가 임의의 스크립트일 수 있으므로 backup.sh가 종료될 때 가리키는 파일에 다음과 같은 내용을 추가 $TMP_FILE
하고 5분마다 이 명령을 실행하려고 합니다.
ssh root@remoteserver 'tail -1 $TMP_FILE'
마지막 행이 와 같은지 확인하세요 DONE_$TMP_FILE
.
문제는 복합 명령에서 벗어날 수 없다는 것입니다.
ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && (/root/backup.sh </dev/null > $TMP_FILE 2>&1 && echo DONE_$TMP_FILE >> $TMP_FILE &) && echo $TMP_FILE'
위 명령은 backup.sh
실행이 완료될 때까지 단순히 차단됩니다.
래퍼 쉘 스크립트에 넣지 않고 일련의 명령을 분리하는 방법이 있습니까?
더 좋은 방법이 있다면 듣고 싶습니다. 이상적으로는 도우미 셸 스크립트를 만들 필요가 없습니다.
답변1
해결책은 생각보다 쉬웠습니다.
ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && ((/root/backup.sh && echo DONE_$TMP_FILE) </dev/null > $TMP_FILE 2>&1 &) && echo $TMP_FILE'