2012-02-11 17 views
16

私はssh経由でテストサーバーを起動しようとしていますが、sshから切断すると常に停止します。ssh経由で永続プロセスを実行します

プロセスを開始する(サーバーを実行する)方法はありますか?それで、sshセッションの終了時に死ぬことはありませんか?

答えて

17

nohupの代わりに、GNU screenまたはtmuxなどの端末マルチプレクサでリモートアプリケーションを実行できます。

これらのツールを使用すると、別のホストからのセッションに簡単に再接続できるため、仕事を辞める前に長い時間をかけたりダウンロードしたりすることができます。例えば。私は、私と彼らの間の信頼性の低い接続が非常に遠い(別の国にある)サーバーで開発作業を行うときに特に便利です。接続が切断された場合、再接続して状態を失うことなく続けることができます。

+1

例:作成するにはsshと画面を使用して

は、ステータスと出力の最後の行を参照してください。ほぼすべての場所からアクセス可能な永続的なターミナルセッションhttp://bit.ly/1ewxKKv – Jon

4

はい。 the nohup commandを使用して、SSHセッションを切断するときにプログラムに送信されるHUP( "ハングアップ")シグナルを飲み込むことができます。

また、サーバーを自分で書いているならば、あなたはHUP信号用register a handlerにそれをコーディングすることができ、そして(むしろ同じ処理を行い、外部nohupプログラムを使用するよりも)プログラムの内部でそれを飲み込みます。

3

nohupの代わりに、screen、et al。サーバーを改訂してdaemonを呼び出し、端末からそれを切り離すことができます。これは、Linux用のサービスを記述する慣用的な方法です。

も参照してください。daemon(3)を参照してください。

4

「他の回答に加えて、あなたはbatch(またはat)スルーテストサーバーを起動することができますがBrian answeredとして、あなたはdaemon

を呼び出す必要がありますそして、あなた場合はssh

+3

ありがとうございました。あなたはsshに '-f'オプションのための私の日を保存しました。 –

3

-fオプションを渡すことができますsystemdを持っているLinuxディストリビューションにSSHして、systemd-runを使ってバックグラウンドでプロセスを起動することができます(システムの用語では "一時的なサービス")。たとえば、あなたがバックグラウンドで何かをpingしたいと仮定すると:

systemd-run --unit=pinger ping 10.8.178.3 

あなただけnohupでプロセスを実行している上にsystemdを買ってあげるの利点は、systemdには、プロセスを追跡し、それは子供たちの、ログを保持、覚えているということです終了コードを使用して、プロセスとすべての子プロセスをきれいに終了させることができます。例:

systemctl status pinger 

ストリーム出力:

journalctl -xfu pinger 

キル:

systemctl kill pinger 
関連する問題