私はもう少し弾力的にしたい非常に古いコンソールアプリケーションを持っています。プログラムの使用方法は次のとおりです。
- ユーザーはカスタム端末エミュレータを使用してSSHを介してリモートシステムに接続します。
- ユーザーがシェルスクリプトを起動します。
- シェルスクリプトは、長期実行進行データベースプロセスを開始できます。
明らかに、ユーザーがシステムへのSSH接続を失うことがあります。その場合、SSHセッションが終了し、内部で実行されているシェルスクリプトが終了し、最後に進行中のデータベースプロセスが終了します。 1000人のうちの1人はデータベースの破損につながる可能性があるため、これが発生しないようにしたいと思います。
私が今まで試したこと:
- シェルスクリプトを開始する前に、screenまたはtmuxセッションを開始してください。これは、アプリケーションがTERM変数をat386に設定する必要があるために機能しません(そしてtermcap / terminfoを完全にバイパスします...え...)
- nohup / disown進行プロセス - シェルスクリプトと進行プロセスがあいまいな方法で継続的に互いに通信しているように見えるため、機能しません。
SSHセッションが終了したときに進行プロセスが終了しないようにする方法についての他のアイデアはありますか?
答え1
term at386
TERMをオーバーライドするには、.screenrcに追加してください。役に立たない場合はお試しください。分離Screen(それ自体は端末エミュレーションを実行しません)の代わりに。
答え2
ほとんどの場合、最も簡単な解決策は、nohup
非対話型プロセスを使用してそれらをバックグラウンドにして、&
標準出力と標準エラーをファイルにリダイレクトすることです。
答え3
つまり、画面のようなものを探していますが、独自の翻訳を実行するのではなく、制御シーケンスを端末に渡すことは何ですか?努力する分離。 Screenと同じ端末分離機能を提供しますが、マルチウィンドウや端末エミュレーションはありません。
答え4
おそらく、vncまたはnxを介してリモートXデスクトップを試してみてください。セキュリティのために、sshを介してvncトンネルを設定するか、デフォルトでsshを介して実行される(より高速な)nxを使用できます。その後、アプリケーションはXデスクトップの端末で実行でき、接続が切断されてもデスクトップは実行され続け、いつでも再接続できます。私の好きなのは、最大2人の同時ユーザーが無料で使用でき、インストールが非常に簡単なNo Machine NXです。
可能であれば、別の方法は、ALOM、ILOM、DRAC、IP-kvm、またはIPシリアルコンソールなどを介してリモートコンソールを使用することです。これにより、アプリケーションがコンソールで実行され、接続の失敗によって中断されません。