2011-03-04 41 views
1

私は、完了に多くの時間がかかるスクリプトを持っています。ログオフ後、Unix上でPerlスクリプトを実行するにはどうすればよいですか?

終了するのを待つのではなく、ログアウトして後でその出力を取得したいと思います。

私は試しました。

nohup /path/to/./thescript.pl &

at -m -t 03030205 -f /path/to/./thescript.pl

そして私はまた、プロセスが実際に psat -l iが使用されスケジューリング構文に依存して存在することを確認しました。

シェルから抜けると、これらのプロセスは両方とも終了します。接続を閉じるとスクリプトが終了しないようにする方法はありますか?

ここにはcronがあり、セットアップされて正常に動作していますが、使い捨てスクリプトにはatまたはnohupを使用します。

私の構文に何か問題がありますか?望ましい結果を生み出すための他の方法はありますか?


EDIT:
私が使用することはできません screenまたは disown - 彼らは私のHPのUNIXのセットアップでインストールされていないと私は彼らのどちらか

答えて

4

これは単なる推測ですが、何かが、私はsshとnohupをいくつかのバージョンで見てきた:あなたは、SSHでログインした場合、あなたは標準出力をリダイレクトする必要がありますする必要があり、標準エラー出力とを避けるために STDIN終了時にセッションがハングします。 (それらの一つは、まだ端末に接続することができる。)私がしようとするだろう:

nohup /path/to/./thescript.pl > whatever.stdout 2> whatever.stderr < /dev/null & 

(これはもはやsshとnohupを私の現在のバージョンの場合である - それはいずれかであることを検出した場合、後者はそれらをリダイレクト端末に接続されていますが、異なるバージョンを使用している可能性があります)。

+0

ありがとうinfoマーク...スクリプトはすべての出力を '.csv'ファイルに出力します。私はstdoutにリダイレクトする必要があるかどうかわかりません – CheeseConQueso

+0

実際に印刷ステートメントを書き直してスクリーンに印刷してから、あなたの提案を試してください。 – CheeseConQueso

+1

nice!その自律的な、ちょうど私が好きなやり方....私はそれが自己認識になることを願っていません – CheeseConQueso

11

使用screenをインストールする立場にないです。それはあなたがログアウトするときに続ける端末を作成します。あなたが再びログインすると、それに戻ることができます。

+2

画面に間違いはありません。いくつかのことを学び、それに精通してください。それはあなたの時間の価値があるでしょう。 – holygeek

+0

GNU 'screen'はこれを含む多くの理由から素晴らしいです。間違いなくそれをお勧めします。 –

+0

私はスクリーンを持っていないと思います。それは地元のレベルで行うことができない限り、それをインストールするポジションではありません。しかし、読んでいただきありがとうございます。情報のおかげで – CheeseConQueso

1

nohupの構文は正常ですが、アカウントはログアウト後にプロセスを実行できない可能性があります。また、stdout/stderrをログファイルまたは/ dev/nullにリダイレクトしてみてください。

+0

ありがとうございました...スクリプトは本質的にすべての出力を '.csv'ファイルに出力しますので、それほど重要ではありません(私が知る限り)何かにリダイレクトする – CheeseConQueso

1

バックグラウンドでコマンドを実行します。

/path/to/./thescript.pl & 

あなたのバックグラウンドジョブのLITSが

jobs 

今、あなたは選択のジョブIDと、上記ジョブのいずれかを否認することができます取得します。

disown <jobid> 

あなたがログアウトした後でも、不承認のプロセスは実行し続ける必要があります。

+0

間違いなく助けになるが、プロセスを "断言"する他の方法はありますか? – CheeseConQueso

5

If you want to keep a process running after you log out:

disown -h <pid>

ビルトイン便利bashのです。 nohupとは異なり、既に実行中のプロセスでdisownを実行できます。

まず、制御-Zを使用してジョブを停止、psからPIDを取得(またはecho $!を使用)、その後、-hフラグでdisownを使用し、背景にそれを送信するためにbgを使用しています。

あなたの仕事をバックグラウンドにすることを忘れないでください。ログアウトすると、ジョブは強制終了されます。

+0

私は 'disown'がインストールされていません...しかし、チップのおかげで – CheeseConQueso

関連する問題