web-dev-qa-db-fra.com

Comment utiliser le céleri en tant que démon en production?

j'ai créé un fichier celeryd dans/etc/defaults/à partir du code ici:

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

Maintenant, quand je veux lancer celeryd en tant que démon et faire ceci: Sudo /etc/init.d/celerdy, il dit que la commande n’a pas été trouvée. Où vais-je mal?

14
Hick

Je ne sais pas ce que vous faites ici, mais voici les étapes à suivre pour exécuter le céleri en tant que démon.

  1. Le fichier que vous avez référencé dans le lien https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd Doit être copié dans votre dossier /etc/init.d avec le nom celeryd
  2. Ensuite, vous devez créer un fichier de configuration dans le dossier /etc/default avec le nom celeryd utilisé par le script Ci-dessus. Ce fichier de configuration définit essentiellement certaines variables Et les chemins utilisés par le script ci-dessus. Voici un exemple de configuration.
  3. Ce lien Scripts init génériques explique le processus et peut être utilisé à titre de référence
19
Rohan

J'ai trouvé ce lien extrêmement utile: Comment rédiger un travail Ubuntu Upstart pour Celery (Django-celery) dans une virtualenv

j'ai un travailleur de céleri utilisant ce script:

(en utilisant ubuntu upstart)

nommé iamcelery.conf et l'a placé dans/etc/init (note: pas 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

maintenant vous pouvez lancer ce scipt (il démarre également au démarrage du serveur):

Sudo start iamcelery

ou arrêter:

Sudo stop iamcelery

ou vérifier son statut:

Sudo status iamcelery

Je ne suis pas sûr que ce soit le moyen le plus soigné .... cependant ... après un long essai et des erreurs en essayant de faire fonctionner les scripts initd .... (sans succès) ... cela fonctionne enfin.

Edit 8 juin 2013 À la fin, mon script donné semblait fonctionner comme une racine. Maintenant, j'ai changé ceci:

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

dans:

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

et cela fonctionne, avec tous les crédits pour la réponse à cette question: Comment écrire un travail Ubuntu Upstart pour Celery (Django-celery) dans une virtualenv

Edit 5 sept 2013

Il reste une petite chose à faire: je dois faire ctrl-c après la commande de démarrage dans la console (et effectuer une vérification du statut après celle-ci): Si quelqu'un sait ceci, laissez-le dans la commande et je pourrai mettre à jour cette réponse. ..

9
michel.iamit

J'utilise généralement supervisor (plus Django-supervisor) à cette fin. De cette façon, vous n'avez pas besoin de savoir comment démoniser chaque processus de votre application (pour lequel vous avez au moins un serveur Web hébergeant Django, plus céleri, et de manière réaliste, quel que soit le middleware que vous utilisez pour prendre en charge les deux). Supervisor sait s’exécuter en tant que démon et tous vos autres processus s’exécutent en tant qu’enfants de supervisor.

8
Marcin

Comme Marcin a expliqué dans sa réponse que superviseur est généralement ce que les gens finissent par utiliser, mais si vous recherchez quelque chose qui pourrait fonctionner avec python3 et que vous ne pouvez pas attendre la version 4 du superviseur qui, je pense, prendra en charge python3, alors vous pouvez y aller. avec cirque . Après l’avoir installé, il vous suffit d’avoir un fichier circus.ini contenant tous les processus que vous souhaitez démoniser puis exécuter avec cet exemple. Circus.ini peut ressembler à ceci:

[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 

si vous voulez plus de détails, j'ai un post lié au même ici . J'espère que ça fait gagner du temps à quelqu'un. Merci

3
Aameer

Remarque: sous Ubuntu 16.04, mon répondeur avec le fichier .conf ne fonctionne plus.

J'ai créé un fichier .service et l'ai placé dans/etc/systemd/system /

je peux utiliser 

État de service du service Sudo

Sudo service myservice start

Sudo service myservice stop

comme des commandes

par exemple. ce fichier:

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

note J'utilise buildout, donc dans setad de bin/Django, la plupart des utilisateurs doivent utiliser le chemin d'accès à python et utiliser mange.py à la place.

base sur: http://minecraft.gamepedia.com/Tutorials/Ubuntu_startup_script (voir la section with de systemd)

0
michel.iamit