私はsshを介してサーバーでファイルシステムのサイズ変更のテストを開始しましたが、screen
セッションでそれを行うのを完全に忘れていました。現在は動作しており、私のラップトップのインターネットは非常に遅いです。 ssh接続が失われた場合に実行し続ける方法はありますか?
進捗状況も出力されますが、取得する必要はありません。
OS:RHEL7.2相当(SL7)。
これを解決策としてリンクする方が良いでしょう: https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-Nohup
提案されたものの代わりにリンクする方法がわからないので、自由に追加して重複としてマークしてください
reptyr
を使用しますこれはまさにその場合です _man 1 reptyr
_ 明示的に言及します:
reptyr
は、既存の実行中のプログラムを取得して新しい端末に接続するためのユーティリティです。 sshを介して実行時間の長いプロセスを開始しましたが、終了する必要があり、中断したくないですか?screen
を開始し、reptyr
を使用してそれを取得し、sshセッションを終了して家に向かいます。
(マニュアルではscreen
について言及していますが、代わりにtmux
を使用できます)。
このメモをお見逃しなく:
reptyr
は、リモートプログラムに接続するためのptrace(2)
システムコールに依存します。 Ubuntu Maverick以降では、セキュリティ上の理由から、この機能はデフォルトで無効になっています。あなたはそれを一時的に有効にすることができます_echo 0 > /proc/sys/kernel/yama/ptrace_scope
_rootとして、またはファイル_
/etc/sysctl.d/10-ptrace.conf
_を編集して永続的に、この設定に関する詳細情報も含まれます。
ファイルは存在しないが_/etc/sysctl.d/
_ディレクトリが存在する場合は、おそらく次の内容でファイルを作成するだけで十分です。
_kernel.yama.ptrace_scope = 0
_
設定は次回の再起動時に適用されます。以下のセキュリティに関する考慮事項をご覧ください。
基本的な使い方は簡単です:
_reptyr PID
_
ここで、PID
は、新しい端末に接続するプロセスのPIDです。注reptyr
は、プロセスを別の端末に接続するだけです。これは、プロセスが新しいシェルの子になることを意味するものではありません。
_ptrace_scope
_を_0
_として設定することはお勧めしません。
Linuxの人気が高まるにつれ、それはマルウェアのより大きな標的になるでしょう。 Linuxプロセスインターフェイスの特に厄介な弱点の1つは、1人のユーザーが任意のプロセスのメモリと実行状態を検査できることです。たとえば、1つのアプリケーション(Pidginなど)が侵害された場合、攻撃者が他の実行中のプロセス(Firefox、SSHセッション、GPGエージェントなど)に接続して追加の資格情報を抽出し、そのスコープを拡大し続ける可能性があります。ユーザー支援のフィッシングに頼らずに攻撃する。
これは理論的な問題ではありません。 SSHセッションのハイジャック( http://www.storm.net.nz/projects/7 )と任意のコードインジェクション( http://c-skills.blogspot.com/2007/ 05/injectso.html )攻撃はすでに存在しており、
ptrace
が以前と同じように動作することが許可されている場合は引き続き攻撃可能です。ptrace
は非開発者や非管理者が一般的に使用するものではないため、システムビルダーはこのデバッグシステムを無効にするオプションを許可されている必要があります。[…]
Sysctl設定(_
CAP_SYS_PTRACE
_でのみ書き込み可能)は次のとおりです。_
0
_-従来のptrace
権限:プロセスは、ダンプ可能である限り、同じuidで実行されている他のプロセスに対して_PTRACE_ATTACH
_を実行できます[…]_
1
_-制限付きptrace
:プロセスには、_PTRACE_ATTACH
_を呼び出す下位オブジェクトとの事前定義された関係が必要です。デフォルトでは、この関係は、上記の従来の基準も満たされた場合の子孫のみの関係です。 […]_
2
_-管理者のみのアタッチ:_CAP_SYS_PTRACE
_を持つプロセスのみが_PTRACE_ATTACH
_で、または_PTRACE_TRACEME
_を呼び出す子を通じてptrace
を使用できます。_
3
_-アタッチなし:プロセスはptrace
を_PTRACE_ATTACH
_とともに使用することも、_PTRACE_TRACEME
_を介して使用することもできません。一度設定すると、このsysctl値は変更できません。
( ソース )
合理的なアプローチは、_ptrace_scope
_を_2
_に設定し、reptyr
がptrace
を使用できるようにすることです。
_echo 2 | Sudo tee /proc/sys/kernel/yama/ptrace_scope
Sudo setcap CAP_SYS_PTRACE+pe /usr/bin/reptyr
_
永続的な設定を保持するファイルを忘れないでください。
機能は ファイルのiノード内 に保存されます。したがって、reptyr
が更新されたときに(機能的に新しい実行可能ファイルに置き換えられて)機能が失われたとしても、驚かないでしょう。
使用する
Ctrl-Z
アプリケーションを一時停止してコマンドラインに戻ります。次に使用します
bg
プロセスをバックグラウンドで続行できるようにします。最後に使用します
disown
そのため、セッションを切断してターミナルを閉じたときにプロセスが閉じないようにします。
プロセスは引き続き実行されますが、ターミナルに「再接続」して、新しいセッションに再接続した場合に認識している出力を表示する方法はありません。
コマンド(bash
またはzsh
、場合によっては他のシェル)のコマンドとdisown
コマンドの関連付けを完全に解除できます。ただし、ttyが必要な場合、コマンドはこれについて満足できない場合があります。その場合は、reptyr
の回答を参照してください。
$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+ Stopped sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$
もう1つのオプションは、画面(またはtmux)セッションを自動的に開始することです。そのように設定したため、すでに開始されているので、忘れずに開始できます。それを行う方法に関する他の投稿があります。