为什么通过 ssh 在远程服务器上运行 tmux 后,程序可以运行;但分离会话后却返回 404?
这是一个 Go(golang)程序,一个在 nginx 反向代理后面监听端口的 http 服务器。
第一个数据:一切正常,如下所示:
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进而d。
到目前为止一切顺利!在浏览器中,地址上的一切工作正常http://www.myapi-consumer.com
,并且 ssh 终端仍然打开;但是
5 – 当我分离 ssh 会话时(通过Ctrl+a 和 d),程序将不再正常工作并返回 404(它是发送 404 的那个)。
6 – 现在,当我再次使用远程服务器重新连接到ssh user@server-ip
它时,它按预期工作,并且我正在另一个连接上测试“工作”部分 – 在我的手机上使用另一个互联网连接。
怎么了?
答案1
问题在于,该应用程序正在提供驻留在主目录中的文件,而当断开连接时,主目录就会被卸载。
我从 golang-nuts 小组得到了答案这里。
答案2
我的理解就是这样的。
你说你正在退出会话或关闭当前终端会话。一个正在运行的程序,如果你刚刚关闭了终端,它将不再运行。
但是您正在使用tmux
,这就是全部tmux
,在后台运行程序。
尝试将程序置于后台运行。我的意思是
nohup myscript.sh &
nohup
即使您退出,也可以运行您的脚本,&[and]
将其推送到后台。
希望它能对你有所帮助。