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]
スクリプトをバックグラウンドにプッシュします。
お役に立てれば幸いです。