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]
스크립트를 백그라운드로 푸시합니다.
그것이 당신에게 도움이 되기를 바랍니다.