回答:
ほとんどのシェルは、終了時にSIGHUPをフォアグラウンドプロセスグループに送信し(また、一部のバックグラウンドプロセスでは、bashでこれはシェルオプションで制御されますhuponexit
)、mysqlクライアントがそれを処理する方法に応じて、死ぬことがあります。
nohup
シェルがSIGHUPを送信するかどうかに関係なく、シェルが終了した場合、コマンドの先頭にinitを付けて親を変更することができます(initによって親を変更することは、特にnohupとは関係ありません-それは単に親よりも長生きしているだけです)。
おそらく口に合うソリューションを使用することになりtmux
、screen
、dtach
またはクライアントを実行するのに似ては、あなたのシェルから離れて抽象化し、端末制御します。このように、シェルが切断された場合、クエリを実行していたセッションに再接続するだけです。
一般に、キープアライブパケットは重要ではなく、接続は理由もなく終了することはありません。より差し迫った懸念は、他の理由(ネットワーク障害など)でクライアントとサーバー間の接続が失われることです。
nohup
、mysql REPLは端末にアタッチされないため、あまり役に立ちません。代わりに上記のマルチプレクサ(またはdtach)のいずれかを使用してみてください。おそらく、ニーズに合っているでしょう。
私が走り始めましたscreen
、私は箱にsshをするとき、部分的にそれを防ぐために、セッションをし、追加ボーナスとして、私は複数のタブを取得し、それを打つことができません。何らかの理由で切断された場合、スクリーンセッションに再接続できます。
更新
#2に答えるにはmysql
、bashシェル内からスクリーンセッションを実行します。複雑に聞こえますが、それは次のとおりです。
$: screen
$: mysql
〜/ .screenrcファイルを編集してスクリーンセッションの下部にキャプションを追加すると、タブを追跡したり、タブの名前を変更したりすることができます。
$: screen -d
そして、それはすべての切り離されたセッションを表示します。再接続するには、次のように実行します
$: screen -r 551.pts-0.git
または、スクリーンセッションのIDが何であれ。中断した場所に戻ってきました。screen -d
ただし、screenセッションを開始したのと同じユーザー、fyi、またはもちろんルートとして実行する必要があります。私がsshした後は常にsudo su -
そうなので、すべてのコマンドをsudoする必要がないので、私は本当にわかりません。
screen
は適切ですが、OPによってリストされた2つの質問に直接答えることはありません。
nohup
にログインするときに先頭に追加する限り、内部で実行されているクエリは保持されますか?