1

編集 2 2013 年 6 月 27 日: 問題は、venv と cron に関係のないばかげた間違いでした。venv を作成したのと同じユーザーで cron から venv を実行すると、以下で説明する activate を使用してうまく機能します。

EDIT 25/06/2013: nohup.out は cron の実行後に変更されないため、virtualenv の使用に問題があると思われます。cron は、コマンド ラインからスクリプトを実行するユーザーと同じユーザーで設定されます。


venv をアクティブにしてから python スクリプトを実行するスクリプトを作成しました。私がそうするとき、それはコマンドラインから完全に実行されます

nohup /home/heyheyhey/run.sh &

ただし、いくつかのブラック マジックの理由により、python 部分は cron から実行されません。

0 4 * * * /home/heyheyhey/run.sh &

run.sh の内容:

#! /bin/bash
cd /home/heyheyhey
. /home/heyheyhey/.pythonbrew/venvs/Python-2.7.2/venvname/bin/activate 2> error.log
python /home/heyheyhey/top.py 2> error.log
bzip2 -c "Exporter.csv" > "extraction.csv.bz2"

出力圧縮ファイルが作成されてから run.sh が実行されます。ただし、Exporter.csv が更新されておらず、ログ ファイルにアクティビティが表示されないため、Python スクリプトは機能しません。

ご協力いただきありがとうございます!

4

1 に答える 1

2

多くの場合、cron ジョブの環境は、対話型シェルにログインしたときに表示される環境とは異なります。特に、Python インタープリターが cron ジョブの $PATH にあるかどうかを確認したい場合があります。Python プログラムが環境変数を読み取る場合は、それらもチェックして、cron で期待どおりに設定されていることを確認する必要があります。

于 2013-06-25T00:15:56.283 に答える