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?
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.
/etc/init.d
avec le nom celeryd
/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.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. ..
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.
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
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)