tmux内でシェルスクリプトを実行する

tmux内でシェルスクリプトを実行する

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

私はこのように理解しています。

セッションを終了するか、現在のターミナル セッションを閉じると言っています。プログラムが実行中で、ターミナルを閉じたばかりなので、プログラムは実行されなくなります。

しかし、あなたが使用しているのは、プログラムをバックグラウンドで実行するためだけですtmuxtmux

プログラムをバックグラウンドから実行してみてください。つまり

nohup myscript.sh &

nohupサインオフしてもスクリプトを実行し、&[and]スクリプトをバックグラウンドにプッシュします。

お役に立てれば幸いです。

関連情報