tmux 내에서 쉘 스크립트 실행

tmux 내에서 쉘 스크립트 실행

SSH를 통해 원격 서버에서 tmux를 실행한 후 프로그램이 작동하는 이유는 무엇입니까? 하지만 세션을 분리한 후 404를 반환합니까?

이것은 nginx 역방향 프록시 뒤의 포트에서 수신 대기하는 http 서버인 Go(golang) 프로그램입니다.

첫 번째 데이터: 모든 것이 다음과 같이 잘 작동합니다.

1 - 다음을 사용하여 서버에 연결합니다 ssh user@server-ip.

2 - 실행 tmux,

3 - 다음 tmux방법으로 세션 내에서 이 스크립트를 실행합니다 . my-script.sh.

#!/bin/sh

go build -v

exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/tmp/myapi.log 2>&1

export API_COUCHDB_ADMIN='admin'
export API_COUCHDB_PASSWORD='************'
export API_COUCHDB_URL='http://172.17.0.2:5984/'
# [some other env variables ...]
./myapi

4 - 다음을 통해 tmux 세션을 분리합니다.Ctrl-b그런 다음.

여태까지는 그런대로 잘됐다! 주소의 브라우저 내에서는 모든 것이 잘 작동 http://www.myapi-consumer.com하고 SSH 터미널은 여전히 ​​열려 있습니다. 하지만

5 - SSH 세션을 분리할 때(byCtrl+a 및 d), 프로그램은 더 이상 올바르게 작동하지 않고 404를 반환합니다(404를 보내는 프로그램입니다).

6 - 이제 다음을 사용하여 원격 서버에 다시 연결하면 ssh user@server-ip예상대로 작동하고 다른 연결(다른 인터넷 연결이 있는 휴대폰)에서 "작동" 부분을 테스트하고 있습니다.

무슨 일이 일어나고 있나요?

답변1

문제는 앱이 연결을 끊을 때 마운트 해제되는 홈 디렉터리 내부에 있는 파일을 제공한다는 것입니다.

golang-nuts 그룹에서 답변을 받았습니다.여기.

답변2

저는 이렇게 이해하고 있습니다.

세션을 종료하거나 현재 터미널 세션을 종료한다고 말하고 있습니다. 프로그램이 실행 중이고 터미널을 닫으면 더 이상 실행되지 않습니다.

그러나 당신은 백그라운드에서 프로그램을 실행하기 위해 사용하고 tmux있으며 그게 전부 입니다.tmux

프로그램을 백그라운드에서 배치하여 실행해 보세요. 내 말은

nohup myscript.sh &

nohup로그오프한 후에도 스크립트를 실행하고, &[and]스크립트를 백그라운드로 푸시합니다.

그것이 당신에게 도움이 되기를 바랍니다.

관련 정보