2011-08-12 17 views
3

私のdjangoプロジェクトは、 "at"スケジューラを使ってスケジュールされた時間にpythonファイルを呼び出します。これは私のmodels.py内で実行されますDjango Apache - ルートとしてスクリプトを実行

command = 'echo "python /path/to/script.py params" | /usr/bin/at -t [time] &> path/to/at.log' 
status = os.system(command) 

[時間]はスケジュール時間です。 これはDjango Devサーバーで実行すると完全に動作します(通常はrootとして実行しますが、他のユーザーとも動作します) mod_wsgiを使用してApacheにアプリケーションをデプロイすると、動作しません。ログでは、ジョブはスケジュールされていたものの、実行されていないことを示しています。 私は、所有権をwwwデータ、アクセス権に変更することから、すべてのユーザーに実行可能にしてrootにsetuidする(大規模セキュリティの問題) 最後にrootユーザーとしてapacheを実行します。

+0

「エコー」とは何ですか? – Leopd

+0

'at'コマンドは、パラメータなしで実行するようにスケジューリングされる実行可能ファイルの名前のみをとります。 'echo'は基本的に' at'に実行可能ファイルとそのパラメータをスケジュールするよう強制します。 'at'のマニュアルページを参照してください。 – melsk

+0

私はあなたに一組の引用符がないと思います。 Echoはpythonキーワードとして書かれています。 – Leopd

答えて

2

cronまたはceleryをスケジュールされたタスクに使用します。 rootとして何かを実行する必要がある場合は、単純なデーモンとしてスクリプトを書き直し、それをrootとして実行すると、zeromqで簡単にコマンドを渡すことができます。

+0

それは定期的な仕事ではないので、私はcronを使うことができますか? – melsk

+0

繰り返しはありませんか?私はそれがだと思いました。どのくらいの頻度でこのタスクを実行しますか? – zeekay

+0

オンデマンド。ランダムで悪い? – melsk

関連する問題