Subshell을 백그라운드에서 계속 실행

Subshell을 백그라운드에서 계속 실행

백그라운드에서 스크립트를 실행하기 위해 명령 끝에 "&"를 사용하려고 시도했지만 작동하지 않는 것 같습니다.

이것이 내가 직면한 문제입니다. 유료 시뮬레이션 소프트웨어를 사용하기 위해 공급자는 라이센스 액세스를 활성화하는 특정 스크립트를 실행하라고 지시했습니다. 나는 이것을 열어두고 다른 터미널에서 소프트웨어를 시작할 것입니다(슈퍼컴퓨팅 클러스터를 사용하고 있기 때문에 GUI 없이 배치 모드로).

문제는 헤드 노드(ssh를 통해 연결)의 스케줄러에만 스크립트를 보낼 수 있고 작업이 컴퓨팅 노드 중 하나로 전달된다는 것입니다. 그래서 소프트웨어를 실행하기 위해 새 터미널을 시작하는 대신 "&"를 사용하여 제공된 스크립트를 백그라운드에서 실행해 보았습니다. 이것은 효과가 없었습니다. 이 방법을 사용하면 라이센스 서버에 대한 연결이 종료되는 것 같습니다.

./script1.sh &

사용

xterm -e sh script1.sh 

다른 터미널에서 열면 다음 오류가 발생합니다.

xterm: Xt error: Can't open display: 

xterm: DISPLAY is not set

어떤 도움이라도 대단히 감사하겠습니다.

답변1

귀하가 제출한 작업은 이 두 가지 작업을 모두 수행하는 작업이어야 하는 것 같습니다.

#!/bin/sh
license </dev/null >license.out 2>&1 &
license_pid=$!
simulator
kill $license_pid
wait $license_pid

이렇게 하면 라이센스 프로세스의 표준 출력과 표준 오류가 파일에 저장되므로 tail문제가 있을 경우 알려주려는 내용을 확인할 수 있습니다.

답변2

ssh먼저 노드로 이동한 다음 복사를 시작할 수 있습니까 screen? 매뉴얼 페이지를 확인하십시오. 이를 통해 ssh로그인 셸의 (효과적으로) 하위 프로세스 로 두 개 이상의 세션을 가질 수 있습니다 .

평소 ssh처럼. 시작 screen. 두 번째 화면을 만들 려면 Ctrl-를 입력하세요 . 이 화면에서 라이센스를 시작하고 -를 사용하여 원래 화면으로 돌아갑니다 . 거기서 애플리케이션을 시작하세요. 필요한 경우 -를 사용하여 순서대로 앞뒤로 전환 할 수 있습니다.AcCtrlA CtrlACtrlA CtrlA

종료하지 않고 분리하려면 Ctrl-- ACtrl; d나중에 다시 연결하십시오( ssh세션을 종료하고 다시 로그인한 후에도 작동함 screen -x).

답변3

(저는 이 질문을 약 3년 전에 게시했습니다. 쉘 스크립팅에 능숙해졌다고 말하고 싶습니다. 최근에 비슷한 문제에 부딪혔는데 다시 그 문제가 생각났습니다.)

따라서 이전 의견에서 제안한 대로 사용해야 하는 것은 입니다 screen. 하지만 클러스터에서 코드를 실행할 때 키보드 단축키에 액세스할 수 없기 때문에 Ctrl+A를 사용하여 메인 본문으로 돌아갈 수 없습니다. 답변에서 알 수 있듯이 스크립트.

글쎄, 내가 해야 할 일은 screen다음과 같이 백그라운드에서 시작하는 것뿐입니다.

메인 스크립트와 별개의 모드에서 "sample-screen"이라는 화면을 시작합니다.

screen -S sample-screen -d -m

분리된 화면에 다시 연결하지 않고 명령을 실행하도록 요청하세요.

screen -S sample-screen -p 0 -X stuff "./script1.sh & ^M"

^M반환 문자입니다. 분할 화면에서 Enter를 누르는 것과 유사합니다.

스크립트 종료 시 화면을 종료하려면 -

screen -XS sample-screen quit

관련 정보