web-dev-qa-db-ja.com

セロリを運用環境のデーモンとして実行するにはどうすればよいですか?

ここのコードから/ etc/defaults /にcelerydファイルを作成しました:

https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd

Celerydをデーモンとして実行し、これを実行する場合:Sudo /etc/init.d/celerdyコマンドが見つからないことを示しています。どこがいけないの?

18
Hick

ここで何をしているのかはわかりませんが、これらはセロリをデーモンとして実行する手順です。

  1. リンクで参照したファイル https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celerydcelerydという名前で/etc/init.dフォルダにコピーする必要があります
  2. 次に、上記のスクリプトで使用されるcelerydという名前のフォルダー/etc/defaultに構成ファイルを作成する必要があります。この構成ファイルは基本的に、上記のスクリプトで使用される特定の変数とパスを定義します。これは 設定例です
  3. このリンク 一般的なinitスクリプト はプロセスを説明し、参照用に使用できます
19
Rohan

私はこのリンクが非常に便利であるとわかりました: virtualenvでCelery(Django-celery)のUbuntu Upstartジョブを作成する方法

少し微調整します。このスクリプトを使用して実行しているセロリワーカーがあります。

(ubuntu upstartを使用)

iamcelery.confという名前を付けて/ etc/initに配置します(注:init.dではありません)

# iamcelery -runs the celery worker as my virtual env user
#
#
# This task is run on startup to start the celery worker as my vritual env user

description "runs the celery worker"
author "michel van Leeuwen <[email protected]>"

start on runlevel [2345]
stop on runlevel [!2345]

# retry if ended unexpectedly
respawn
# limit the retries to max 15 times with timeouts of 5 seconds
respawn limit 15 5

# Time to wait between sending TERM and KILL signals
kill timeout 20

task
script
  exec su -s /bin/sh -c 'exec "$0" "$@"' <place here your unprovilegd username> -- srv/<here the path of your Django project>/bin/Django celeryd -BE -l info
end script

これで、このsciptを開始できます(サーバーの起動時にも開始されます)。

Sudo start iamcelery

または停止:

Sudo stop iamcelery

またはそのステータスを確認します。

Sudo status iamcelery

これが最も近い方法であるかどうかはわかりませんが....... initdスクリプトを動作させるための長い試行錯誤とエラーの後...(成功なしで)...これでようやく動作します。

2013年6月8日編集ここで指定したスクリプトは、最終的にルートとして実行されるようです。今私はこれを変更しました:

script
  su <place here your unprovilegd username>
  cd /srv/<here the path of your Django project>/
  exec bin/Django celeryd -BE -l info
end script

に:

script
  exec su -s /bin/sh -c 'exec "$0" "$@"' <place here your unprovilegd username> -- srv/<here the path of your Django project>/bin/Django celeryd -BE -l info
end script

そして、これは機能し、この質問への回答に対するすべてのクレジットが含まれています。 virtualenvでCelery(Django-celery)のUbuntu Upstartジョブを作成する方法

2013年9月5日編集

残っている小さなことが1つあります。コンソールでstartコマンドの後にctrl-cを実行する必要があります(そして、この後にステータスチェックを実行します)。 ..

9
michel.iamit

私は通常、この目的で supervisor (plus Django-supervisor) を使用します。そうすれば、アプリケーションの各プロセスをデーモン化する方法を理解する必要はありません(少なくとも、DjangoをホストするWebサーバーとセロリに加えて、現実的には、これらの両方をサポートするために使用する他のミドルウェアがあります)。スーパーバイザはそれ自体をデーモンとして実行する方法を知っており、他のすべてのプロセスはスーパーバイザの子として実行されます。

8
Marcin

Marcinが彼の回答で説明したように、通常はスーパーバイザが最終的に使用されるものですが、python3で動作し、スーパーバイザのバージョン4を待つことができないものを探している場合は、python3がサポートされると思います。 サーカス 。インストールしたら、デーモン化したいすべてのプロセスを含むcircus.iniファイルが必要です。次に、そのサンプルcircus.iniを実行します。

[watcher:celery]
cmd = full_path/python3.4 full_path/manage.py celeryd -B -l info

[watcher:celerycamera]
cmd = full_path/python3.4 full_path/manage.py celery events --camera=djcelery.snapshot.Camera

[watcher:dceleryflower]
cmd = full_path/python3.4 full_path/manage.py celery flower -A your_app_name --basic_auth=username:password --port=5555 

さらに詳細が必要な場合は、同じ here に関連する投稿があります。誰かの時間を節約してくれることを願っています。ありがとう

4
Aameer

注:ubuntu 16.04では、.confファイルを使用した私の応答が機能しなくなりました。

.serviceファイルを作成し、/ etc/systemd/system /に配置しました

私は使えます

Sudoサービスmyserviceステータス

Sudoサービスmyservice開始

Sudoサービスmyservice停止

コマンドとして

例えばこのファイル:

myservice.service:

[Unit] 
Description=My celery worker 

[Service]
WorkingDirectory=/srv/my-project-path
User=buildout
Group=buildout
Restart=on-failure
RestartSec=20 5
ExecStart=/srv/my-project/bin/Django celeryd -BE

[Install]
WantedBy=multi-user.target
Alias=myservice.service

buildoutを使用しているため、ほとんどのユーザーはbin/Djangoのsetadでpythonへのパスを使用し、代わりにmange.pyを使用する必要があります。

ベース: http://minecraft.gamepedia.com/Tutorials/Ubuntu_startup_script (with systemdセクションを参照)

0
michel.iamit