web-dev-qa-db-ja.com

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

なぜsshを介してリモートサーバーでtmuxを実行した後、プログラムが機能するのですか。しかし、セッションを切り離した後、404を返しますか?

これはGo(golang)プログラムであり、nginxリバースプロキシの背後にあるポートでリッスンするhttpサーバーです。

最初のデータ:すべてが次のように正常に機能します。

1-ssh user@server-ipを使用してサーバーに接続します。

2-tmuxを実行します。

3-. my-script.shによるtmuxセッション内でこのスクリプトを実行します。

#!/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-Ctrl-bでtmuxセッションをデタッチし、次にdでデタッチします。

ここまでは順調ですね!アドレスhttp://www.myapi-consumer.comのブラウザ内ではすべて正常に動作し、sshターミナルはまだ開いています。だが

5-sshセッションをデタッチすると(Ctrl + aおよびdにより)、プログラムは正しく機能しなくなり、404(404を送信するもの)が返されます。

6-ssh user@server-ipを使用してリモートサーバーに再接続すると、期待どおりに動作し、別の接続での「動作」部分をテストしています。

何が起こっている?

1

問題は、アプリがホームディレクトリ内にあるファイルを提供していることです。ホームディレクトリは、切断するとマウント解除されます。

Golang-nutsグループ here から答えが得られました。

1

これが私が理解している方法です。

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

しかし、あなたはバックグラウンドでプログラムを実行するために、tmuxとそれだけでtmuxを使用しています。

バックグラウンドから配置してプログラムを実行してみてください。というのは

Nohup myscript.sh &

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

それがあなたを助けることを願っています。

0
rɑːdʒɑ