回答:
のような現代的な代替品を探す必要がありますtmux
。
tmux
screen
多くの理由で優れていますが、ここにいくつかの例を示します:
推奨の回答で説明されている機能と同じ機能を取得screen
するには、次のことを行う必要があります。
tmux
入力tmux
することから始めますtmux
セッション内で必要なプロセスを開始しますtmux
入力してセッションを脱退するCtrlbd これで、リモートマシンから安全にログオフでき、プロセスは内部で実行され続けますtmux
。再び戻ってきて、プロセスのステータスを確認したいtmux attach
場合は、tmux
セッションにアタッチするために使用できます。
複数のセッションを並べて実行する場合は、Ctrl+ bとを使用して各セッションに名前を付ける必要があり$
ます。を使用してtmux list-sessions
、現在実行中のセッションのリストを取得できますtmux attach-session -t 0
。コマンドで実行中のセッションにアタッチします。
tmux
単一のセッションで単一のウィンドウを処理するよりもはるかに高度なことができます。詳細については、中を見ていman tmux
たりtmuxはGitHubのページを。特に、との主な違いに関するFAQがscreen
ありtmux
ます。
screen -x -r [screenname]
または略して使用screen -rx
します。これにより、既存の画面インスタンスを添付できます。
Ctrl-b
し、その後d
デタッチ/残すためにtmux
セッションを。確かに、これはtmux
私のUbuntu 12.04のバージョンの場合です。
tmux detach
入力する代わりに実行しますctrl-b d
nohup
多くの場合、最良の方法が最も簡単です。
nohup long-running-command &
このために特別に作成されたもので、stdoutにログを記録しnohup.log
ます。
man nohup
bg
すでに実行中のタスクを「バックグラウンド」にしたい場合、最善の策はCtrl+ Z実行することです
bg
最後に中断されたタスクをバックグラウンドにして、実行を継続できるようにします。
その後、disown
ログアウト後にプロセスを実行し続ける必要があります。
screen
そして他の人がそれを行うことができますが、それは彼らが何のためであるかではありません。後nohup
に残す予定のbg
タスク、および既に実行中で再起動したくないタスクにはお勧めします。
両方ともbash固有であることに留意してください。bashを使用していない場合、コマンドは異なる可能性があります。
disown -h
bg
+ disown
がうまくいきませんでした。tmux内で開始するのを忘れていた展開スクリプトを実行していたため、会議のために早退する必要がありました。スクリプトは、進行状況をシェルに継続的に出力します。ctrl+z
プロセスを停止し、bashに戻りました。bg
プロセスを再開しましたが、ステータスのbashへの出力も再開したため、入力した内容を確認できなくなりました。ただし、disown
コマンドは「disown:current:no
julia myFile.jl
なんらかの理由でこれはうまくいきませんでした。tmuxは、すばらしい機能です。
あなたはそれを使用してそれを行うことができますscreen
。
入力man screen
して詳細を確認するか、この画面のマニュアルページを読んでください。
簡単なシナリオ:
リモートボックスにsshします。入力screen
後、あなたがしたいプロセスを開始します。
プレスCtrl- AそれからCtrl- D。これにより、スクリーンセッションが「切り離され」ますが、プロセスは実行されたままになります。これで、リモートボックスからログアウトできます。
後で戻ってきたい場合は、再度ログオンしてscreen -r
「これはスクリーンセッションを「再開」します」と入力すると、プロセスの出力を確認できます。
screen -S name
後で正しいセッションに簡単に接続できるように、スクリーンセッションに名前を付けます。
screen -S
休暇前とscreen -r
帰国時の組み合わせは素晴らしいです!
screenとnohupの方が良い方法ですが、screenまたはnohupなしですでに実行されているプロセスを切り離す必要がある場合は、disownコマンドを実行できます。
disown [-ar] [-h] [
jobspec
… |
pid
… ]
オプションなしで、アクティブなジョブのテーブルから各jobspecを削除します。場合は
-h
オプションが指定され、ジョブがテーブルから削除されていませんが、シェルがSIGHUPを受信した場合にSIGHUPがジョブに送信されないようにマークされています。場合はジョブ仕様が存在せず、どちら-a
も-r
オプションが供給され、現在のジョブが使用されています。jobspecが指定されていない場合、-a
オプションはすべてのジョブを削除またはマークすることを意味します。jobspec引数-r
なしのオプションは、実行中のジョブに操作を制限します。
disownを使用すると、ターミナルを閉じてマシンでプロセスを実行できます。
disown -a && exit
disown
。
私は大きなmvで立ち往生していたので、プロセスを停止してセットアップ画面を表示し、それを再び開始することができませんでした。基本的に次の手順を実行して、実行中のプロセスでsshセッションを終了することができました。
ステップ3は、現在のプロセスを一時停止します(たとえば、「mv」コマンド)。
ステップ4は、一時停止したプロセスをバックグラウンドに入れて再開します。
ステップ5では、プロセスを否認できます。**ジョブのリストを取得するには、jobs
前に入力するだけです。
**否認について(bashマニュアルより):
disown [-ar] [-h] [jobspec ... | pid ... ]
Without options, remove each jobspec from the table of active
jobs. If jobspec is not present, and neither the -a nor the -r
option is supplied, the current job is used. If the -h option
is given, each jobspec is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell
receives a SIGHUP. If no jobspec is supplied, the -a option
means to remove or mark all jobs; the -r option without a job‐
spec argument restricts operation to running jobs. The return
value is 0 unless a jobspec does not specify a valid job.
disown
組み込みコマンドは最新のバックグラウンドジョブで動作します。
複数のssh接続でプログラムと端末の状態を維持するために使用できる2つの主要なプログラムがあります。それらはスクリーン(現職ですが、残念ながらメンテナンスされていません。どうやら現在アクティブに開発されているようです)とtmux(より新しく、アクティブにメンテナンスされています)です。Byobuは、これらのシステムの上で実行でき、追加のubuntuステータス情報を提供できるフロントエンドです。新しいインストールでは、tmuxをバックエンドとして使用します。byobuの古いインストールと既存の構成がある場合は、画面またはtmuxの前のバックエンドを維持します。
Byobuは、Debianベースのマシンでインストールすることでコンピューターにインストールできます。
sudo aptitude install byobu
yumを使用して、あなたは
su -c 'yum install byobu'
他のディストリビューションにbyobuをインストールすることもできます。
byobu
sshを使用して接続した後、ホストマシンで実行することにより、byobuを起動できます。これにより、次のようなシェルが作成されます。
また、-Xオプションを使用してUbuntuマシンでByobu Terminalを使用し、簡単に完全に機能するbyobuを使用することもできます。
と入力してbyobuを起動しますbyobu
。
F2を押して現在のセッション内に新しいウィンドウを作成し、F3-F4を押してさまざまなウィンドウを切り替えることができます。
byobuの最良の部分は、ターミナルを離れるためにターミナルで実行中のプロセスを実際に強制終了する必要がないことです。screen / tmux(byobuのスケルトン)をバックグラウンドに送信して、次回来たときに再開できます。
次回来るときは、そうするだけでbyobu
、今いる場所に戻ることができます。
さまざまなビオブセッションを作成することもできますbyobu -S session1
。また、戻ってきたときにそれらのいずれかに接続できます。
プロセスが開始すると、これを行うことはできません。長時間実行するジョブを実行する前に、設定を行う必要があります。
nohupは使用できますが、ログインとしてscreenまたはbyobuを使用することをお勧めします。これにより、接続を解除して実行したままにすることができます。
Screenには、1つのマシンからデタッチし、別のマシンから再アタッチできるという利点があります。これは、1日の終わりを超えて実行される長時間実行プロセスを確認する場合に便利です。
ここには、適切な入門ガイドがあります。
byobuは、メニューなどを備えた画面の上部に使いやすいインターフェイスを配置します。また、新しいUbuntuでの画面の現在の実装でもあります。F2を押して新しいターミナルF3 / F4を起動して前後に切り替え、F6を押して切断します。実際に端末を完全に終了するには、exitと入力します。
disown
これを実現するために使用できます。bassgeyの答え@を参照してください
disown
ただ、必要な場合とCtrl-z
、その後、bg
そのアクティブ端末のバックグラウンドを取得します。その後、disown
。
ねえ、私はスクリーンが最も効果的なオプションであることに同意しました。vncserverを使用して、その上でプロセスを開始できます。
また、プロセスを実行して制御を戻す必要がないことが唯一の目的であり、セッションを閉じる必要があり、プロセスが既に実行されていることに気づいていないことが最も重要な場合は、運が悪いあなたはbashをシェルとして使用しました
まず、Ctrl + Zに続けてbg%1を入力して、プロセスをバックグラウンドに送信する必要があります(番号はジョブ番号によって異なりますが、通常は1ですが、コマンドジョブを使用して簡単にリストをプルできます)。
最後にdisownコマンドを実行します(bidコマンドの場合と同じjobidが続きます)。
これにより、シェルとバックグラウンドのプロセス間の親子関係が削除され、シェルが終了したときに死ぬことを防ぎます。
screen
いるのかという質問は、ログイン後、プロセスを開始する前に、ログイン後のイベント、プロセスの実行を維持する方法について提起されました。ホルヘの素晴らしい答え、あなたは本当に私を助けてくれました!:)
bg
(なしの%1
デフォルトは現在の仕事であることから、多くの場合十分です)
長時間にわたって実行している単一のシェルスクリプトの場合、ログインし、「&」を使用してバックグラウンドでプロセスを実行します。
例:
/path/to/my/script &
ログアウトし、SSHセッションを切断しました。しばらくしてからログインすると、スクリプトからの継続的なデータ収集で証明されているように、スクリプトはまだ実行されています。
&
ログアウトしてSSHセッションにログインしてこのようなプロセスを実行すると、プロセスは引き続き実行されますが、そのプロセスの出力を表示することはできません(スクリプトが何かをエコーした場合表示されませんが、ファイルを書き込むとファイルはそこにあります)
GNU Screenをチェックして、役立つかどうかを確認してください。アプリケーションをリアルタイムで実行する方法に応じて、解決するよりも多くの問題が発生する可能性がありますが、少なくともセッションを離れることなくセッションを再開できます。
使い方 :
screen
最初の起動にコマンドを使用し、紹介メッセージをスクロールすると、端末が渡されます。screen -r
してそのセッションを再開できます。一度に複数の分離されたスクリーンセッションを持つことができます。この場合、利用可能なセッションのリストが表示されます。画面の分割など、他の多くのオプションがあり、すべてのショートカットは完全にカスタマイズ可能です。
誰もが使用するように言っていますがdisown
(プロセスを既に開始した後に持っている唯一のオプション)nohup
、またはでコマンドを実行するscreen
こともできます。これは、コマンドからのすべての出力を表示する場合に便利ですscreen
.. Linuxの最新の主流ディストリビューションを試しましたが、単にジョブをバックグラウンドに置いて終了しても、実行中のすべてのプロセスが停止するわけではありません。グローバル設定などが必要です。かなり古いシステム(slackware 12)でこれを試していますが、テストスクリプトを手動で強制終了するまで実行し続けます。
shell$ cat > test.pl
#!/usr/bin/perl
while(1){
sleep(1);
}
shell$ perl ./test.pl &
shell$ exit
logout
shell$ ps aux test.pl
mymom 31337 1 0 13:25 ? 00:00:00 perl ./test.pl
shell$
私は同意するものの、それはscreen
私のスクリプトは、ログファイルに書いたか、何..私は使用するために必要なことがない場合でも、これを実行するための最良の方法だろうdisown -a
か、nohup
それは完全な妄想の外であった場合を除きます。誰かがデフォルトでbashがどのように動作するかについていくつかの光を当てることができますか?システム管理者の中には、ユーザーのプロセスがシステムに過負荷をかけないように、大きなシェルのデフォルトを変更する人がいるかもしれません。
残念ながら、SSHセッションを終了すると、tmuxまたは画面が強制終了されます。これはsystemd
、セッションからログアウトすると子プロセスが終了するためです。
この設定はlogind.conf
(/etc/systemd/logind.conf
)で変更できます:
KillUserProcesses=no
https://unix.stackexchange.com/questions/490267でお答えいただきありがとうございます。
の代わりに :
cmd options;
前に追加nohup
:
nohup cmd options &
次に、次の方法でコンソールの標準出力を表示できます。
tail -f nohup.out