web-dev-qa-db-ja.com

シェルでコマンドを実行し、セッションを閉じてもコマンドを実行し続ける

PuTTYを使用してリモートサーバーに接続しています。私が知りたいのは、PuTTYとのセッションを閉じた後でも、コマンドを記述して実行を続ける方法があるかどうかです。これは、常にコンピュータの電源を入れたままにしたくないからです。これを行う方法はありますか?.

ソリューションで更新

提示されている私の質問については、追加のソフトウェアをインストールする必要がないため、Nohupなどの提供されたコマンドの1つを使用することが最善の解決策です。ただし、同じ問題使用画面が表示されている場合は、インストールして使用してください。すごいです。

コマンドとscreenを使用していくつかのソリューションを提案するため、私はNorman Ramseyの回答をお気に入りとして選択しました。ただし、他の回答、特にPEZの回答を確認してください。そうすると、どの画面で実行できるかがわかります。

34
Eduardo

Nohupdisown、およびscreenはすべて適切ですが、他の2つとは異なり、screenは切断できるため、screenが最適ですリモートサーバーからすべてを実行したままにし、後で再接続して何が起こっているかを確認します。 Nohupおよびdisownを使用すると、対話を再開することはできません。

28
Norman Ramsey

screen!スライスされたパン以来、これは最高のものです。 (ええ、私は他の人がすでにそれを提案していることを知っていますが、それは全世界が参加してそれを提案するのもとても良いことです。)

画面は、ummmmのようなものです... GUIデストップに接続するためにVNCなどを使用するようなものですが、コマンドシェルウィンドウ用です。同じスクリーンセッションで一度に複数のシェル「ウィンドウ」を開くことができます。次のようなことができます:

  1. 「screen -dR」を使用してscreensセッションを開始します(-dRの使用に慣れます)
    • 1つのウィンドウでいくつかのコマンドを実行する
    • 押す CTRL-AC 新しいウィンドウを作成するには、vimでファイルを開きます
    • 押す CTRL-A 最初のウィンドウに戻り、編集したファイルに対してコマンドを発行します
    • CTRL-A、 1 vimセッションに戻る
    • CTRL-A、 C さらに別のウィンドウで「Sudo-su」を実行することもできます(たまたま完全なルートシェルが必要なため)。
    • CTRL-A、  バックグラウンドプロセスを開始する
    • CTRL-A、 C さらに新しいウィンドウを作成するには、そのバックグラウンドプロセスのログを「tail -f」します
    • CTRL-A、 d 画面を切断するには CTRL-D サーバーから切断する
    • 3週間休暇に行きます
    • サーバーに再度ログオンし、「screen -dR」を発行して、既存のscreenセッションに接続します
    • 4番目のウィンドウでログを確認します CTRL-A、 3 (それはあなたがずっとそれを見ていたようです)
    • CTRL-A、 1 そのvimセッションをもう一度拾う
    • あなたは今写真を撮り始めていると思いますか? =)

まるで魔法のようです。私は覚えているよりも長い間画面を使用してきましたが、それでもそれがどれほど流血であるかに驚いています。

[〜#〜] edit [〜#〜]:ただ今述べたこともありますtmuxscreenと非常によく似ていますが、いくつかのユニークな機能があり、ウィンドウを分割することが最も重要です。

84
PEZ

GNU Screen を使用してみてください。一度に複数のシェルを開くことができます。そして、それらの実行中のシェルから切断することができ(つまり、PuTTYとのセッションを閉じる)、それらは引き続き機能します。

10
Carlos Rendon

あなたが探しているのは Nohup です。

使い方はwikiリンクを参照してください。

9
unknownuser

画面が最高です。

試してください:

screen -dmS "MyTail" tail -f/var/log/syslog

この開始コマンドはバックグラウンドで実行されます。

リストするにはscreen -rを使用し、セッションに入るにはscreen -r Mytailを使用します。

より多くのユーザーが同じセッションにアクセスする必要がある場合は、screen -rx MyTailを使用し、両方のユーザーがセッションを共有します。

5
Lauro Oliveira

screenを使用できない場合(たとえば、SSHセッションがプログラムによって駆動されているため)、 daemonize を使用してプログラムをデーモンとして実行することもできます。

4
Brian Clapper

私にとってうまくいく1つの方法は、atです。

atはcronのように機能しますが、1回限りのジョブです。今日はそれを使用して、セッションを存続させる必要なしに大きなファイルをダウンロードしました。

例えば:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

(将来的に)atを渡すと、プロンプトが表示されます。そのときに実行したいコマンドを入力し、Ctrl + Dを押します。セッションを終了すると、指定した時間にコマンドが実行されます。

Wikipedia にはatに関する詳細があります。

3
Joe Flynn
./command & disown
1
Nick Stinemates
ssh localhost && ./command && exit
0
totten