在 tmux 中运行 Shell 脚本

在 tmux 中运行 Shell 脚本

为什么通过 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]将其推送到后台。

希望它能对你有所帮助。

相关内容