為什麼透過 ssh 在遠端伺服器上運行 tmux 後,程式可以運行;但是分離會話後,它回傳404?
這是一個 Go(golang) 程序,一個在 nginx 反向代理後面監聽連接埠的 http 伺服器。
第一個數據:一切正常,如下圖:
1 - 我使用連接到伺服器ssh user@server-ip
,
2-運行tmux
,
tmux
3 - 在會話中執行此腳本,方法是. 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 - 現在,當我再次使用 then 重新連接到遠端伺服器時,ssh user@server-ip
它會按預期工作,並且我正在另一個連接上測試「工作」部分 - 在我的手機上使用另一個網路連線。
怎麼了?
答案1
問題在於該應用程式正在提供駐留在主目錄中的文件,這些文件在斷開連接時會被卸載。
我從 golang-nuts 小組得到了答案這裡。
答案2
我是這樣理解的。
您說您正在退出會話或關閉目前終端會話。一個程式正在運行,而您剛剛關閉了終端,它將不再運行。
但您正在使用tmux
這就是全部tmux
,在背景運行程式。
嘗試透過從背景放置該程式來執行該程式。我是說
nohup myscript.sh &
nohup
即使您登出也可以執行您的腳本,&[and]
將您的腳本推入後台。
希望它能幫助你。