2010-12-20 13 views
4

私は、実行に約45 [分]かかる「長い」Pythonスクリプトを持っています。私は別の( 'スケジューラー'スクリプト)pythonスクリプトを使ってこの長いスクリプトを実行します。ターミナルを使って 'スケジューラー'スクリプトを実行すると、すべてが完全に機能します(つまり、長いスクリプトは問題なく実行されます)。CronはPythonスクリプトを終了しますか?

私はいくつかの苦労がありましたが、最終的に毎分cronを実行するための 'スケジューラー'スクリプトの追加に成功しました。それで今は他のスクリプトを実行してOKです。ここで

は問題です:スクリプト(つまり、「スケジューラ」によって「RUN」中であるが)という行がある時はいつでも:

print "hello" 

または任意の「印刷」ステートメントを、cronジョブが実行され、 20〜30秒後に終了します。 'print'ステートメントを削除すると、cronはジョブを正常に実行し、終了しません。

私はこの状況を修正したいと思いますし、スクリプトにいくつかの 'print'ステートメントがあっても実行し続けます。どのようにそれを行うためのヒント?

P.S. 「スケジューラ」内から、他のすべてのPythonスクリプトを '実行'するには、

subprocess.Popen([sys.executable, command]) 

を使用します。

答えて

6

私はそれがcronがstdoutを処理する方法によるものであるという勘違いをしています。どのように出力をリダイレクトしていますか? http://aplawrence.com/BDD/bbcronbasics.htmlから

OUTPUT

は、通常、任意のプログラムの出力はSTDOUTに送信 (標準出力)と 、通常、誰かの表示 画面上に巻き取ります。 cronによって開始されたジョブの場合、 STDOUTはローカルの メールサブシステムに送られます。つまり、cronジョブによって生成された出力 は、ジョブを所有するユーザーに というメールが送信されます。この が望ましくない場合は、 の手順を実行して、cronジョブの出力をファイル にリダイレクトする必要があります。 ファイルに の異常を分析できるようにSTDERR(標準エラー)を ファイルにリダイレクトすることもお勧めします。

+0

ありがとうございます。私はどのように現在の出力を指示するか分からない。何か案は?また、私はcronからメールを受け取ったことはありません。定義する必要のある設定はありますか? – user3262424

+0

メールでは、すべての* nixユーザーが自分のシステム上に持つローカルメールシステムを意味します。出力をファイルにリダイレクトするには、>リダイレクト演算子を使用します: 'python scheduler.py> output.log' – Aphex

+0

Aphexにありがとう。だから私は出力をファイルに向ける方法を知っています。私はEvolution(私はUbuntu 10.04を使用)で電子メールアカウントを設定し、Cronから電子メールを受け取ったことはありませんでした。どうすれば修正できますか? – user3262424

関連する問題