0

セロリとセロリビートをデーモン化しようとしています。github から celeryd および celeybeat ファイルをダウンロードし/etc/init.d//etc/default/.

私の問題は、これら 2 つのファイルを実行すると、celeryd と celerybeat がシステム python (2.4) を使用し、その結果、python 2.7 でインストールされている他のアプリケーションを見つけることができないことです。Python 2.7 はファイルに含まれ~/.bashrc/.bash_profileいるため、ワーカーが動作しない場合を除いて、他のアプリケーションの実行に問題はありません。python ...../manage.py celery(すべてのオプションを指定して)実行すると、すべてが魅力的に機能します。

/init.d/functionpython2.7を強制的に実行する方法を教えてください。

を実装しようとしまし#! /bin/sh pythonたが、うまくいきません。

4

1 に答える 1

0

のスクリプト/etc/init.dは通常、システムの起動時にrootとして実行されます。ルート~/.bashrc(つまり/root/.bashrc) は、あなたのもの (例 ) とはまったく異なって見えます/home/reza/.bashrc。対話的に実行しているかどうかにかかわらず、シェルの動作はわずかに異なります。

したがって、 を介して Python インタープリターを実行しようとしても意味がありません/bin/sh。オーバーヘッドが追加されるだけです。

必要なのは、スクリプトに使用するインタープリターをシステムに伝える適切なシバンを追加することです。

例えば

#!/usr/bin/python2.7

python2.7にインストールされたバイナリを使用し/usr/binます。(そのため、システムを実行するたびに/etc/init.d/foo.py実際に実行されます/usr/bin/python2.7 /etc/init.d/foo.py

于 2013-07-01T14:17:07.773 に答える