在 tmux 中執行 Shell 腳本

在 tmux 中執行 Shell 腳本

為什麼透過 ssh 在遠端伺服器上運行 tmux 後,程式可以運行;但是分離會話後,它回傳404?

這是一個 Go(golang) 程序,一個在 nginx 反向代理後面監聽連接埠的 http 伺服器。

第一個數據:一切正常,如下圖:

1 - 我使用連接到伺服器ssh user@server-ip

2-運行tmux

tmux3 - 在會話中執行此腳本,方法是. 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]將您的腳本推入後台。

希望它能幫助你。

相關內容