2017-07-27 3 views
0

Wie beende ich die Arbeiter, wenn ich den Server und erhalten die gleiche Wirkung wie die folgende Anweisung neu starten:Stoppen erzwingen Sellerie Arbeiter als systemd Dienst ausgeführt

pkill -9 -f 'celery worker' 

Von der Sellerie Dokumentation:

Wenn der Arbeiter nach rücksichts Zeit nicht herunterfahren, denn in einer unendlichen Schleife oder ähnlichem stecken, können Sie das KILL-Signal verwenden, um den Arbeiter zu zwingen, beenden:

Aber ich beginne als systemd Service und habe folgende Config es mit der folgenden systemd Unit-Datei zu starten:

[Unit] 
Description=Celery Service 
After=network.target 

[Service] 
Type=forking 
User=dsangvikar 
Group=www-data 
EnvironmentFile=-/etc/default/celery 
WorkingDirectory=/home/dsangvikar/apps/msbot/ 
ExecStart=/home/dsangvikar/apps/msbot/msbotenv/bin/celery multi start \ 
-A microsoftbotframework.runcelery.celery chatbotworker --concurrency=4 \ 
--workdir=/home/dsangvikar/apps/msbot/ --logfile=/var/log/celery/%n.log 
--pidfile=/var/run/celery/%n.pid 
ExecStop=/home/dsangvikar/apps/msbot/msbotenv/bin/celery multi stopwait 
RuntimeDirectory=celery 

[Install] 
WantedBy=multi-user.target 

Als ich sudo systemctl status celery tun, erhalte ich den Status und die pid. Ich benutze es, um es zu töten. Aber der Arbeitsprozess wird nicht beendet. Ich möchte sie zwingen, sie zu töten. Meine Programmlogik erstellt sie bei jedem Neustart des Servers neu. Aber da sie selbst beim Systemneustart nicht zerstört werden, tauchen alle möglichen Probleme auf.

+0

Ich habe keine Erfahrung auf 1 gesetzt passieren, aber können Sie es mit 'sudo systemctl Anschlag celery' stoppen ? – randomir

+0

kann ich. Wenn ich 'sudo reboot' mache, werden die Worker Nodes nicht beendet. Beim Neustart, wenn Sellerie versucht, sich mit Redis zu verbinden und Arbeiter zu spawnen, schlägt es fehl. Es bringt auch die Startzeit auf 2 3 Minuten. Ich denke, das ist eher eine Systemfrage. edit: d. H. Ich möchte das Töten von Arbeitern und Sellerieprozessen vor dem Neustart automatisieren, so dass beim Hochfahren des Servers sauberes Slate zur Verfügung steht. –

+0

Dies könnte besser sein auf [Ask Ubuntu] (https://www.askubuntu.com) – C8H10N4O2

Antwort

0

Sellerie multi soll nicht für die Produktion verwendet werden. Diese

ist, was ich verwende:

Es beginnt 10 Hauptprozesse mit 2 Arbeitern je. Also insgesamt 20 Arbeiterprozesse.

[program:celery_worker] 
numprocs=10 
process_name=%(program_name)s-%(process_num)s 
directory=/opt/worker/main 
environment=PATH="/opt/worker/main/bin:%(ENV_PATH)s" 
command=/opt/worker/main/bin/celery worker -n worker%(process_num)s.%%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E 
stdout_logfile=/var/log/celery/%(program_name)s-%(process_num)s.log 
user=username 
autostart=true 
autorestart=true 
startretries=99999 
startsecs=10 
stopsignal=TERM 
stopasgroup=false 
stopwaitsecs=7200 
killasgroup=true 

Wenn Aufträge ausgeführt haben Sie nicht wollen, TERM Signale an den PoolWorker Prozess zu senden, wie es die Arbeit wird dazu führen, frühzeitig abzubrechen. Was Sie wirklich tun möchten, ist das Senden des TERM-Signals an MainProcess, das darauf wartet, dass der Job beendet und dann geschlossen wird.

Also wollen Sie die primären Prozesse stoppen und wenn es zum Töten kommt, dann wollen Sie als Gruppe töten.

Verwenden Sie diesen Befehl, um den Worker Shutdown zu starten. Wenn die Worker nicht durch die stopwaitsecs Zeit in der Supervisor-Konfiguration beendet werden, wird ein Kill-Signal gesendet und das wird alles töten, da killasgroup auf True gesetzt ist.

sudo supervisorctl stop celery_worker:* 

Beispiel für die oben genannte Konfiguration von Supervisord.

username  1659 1.1 0.2 119796 45632 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker7.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1662 1.1 0.2 119804 45716 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker6.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1663 1.2 0.2 119724 45412 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker5.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1666 1.1 0.2 119732 45524 ?  S 10:45 0:05 [celeryd: [email protected]:MainProcess] -active- (worker -n worker4.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1671 1.2 0.2 119792 45724 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker3.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1674 1.2 0.2 119792 45420 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker2.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1678 1.1 0.2 119712 45708 ?  S 10:45 0:05 [celeryd: [email protected]:MainProcess] -active- (worker -n worker1.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1679 1.2 0.2 119808 45476 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker0.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1680 1.1 0.2 119796 45512 ?  S 10:45 0:05 [celeryd: [email protected]:MainProcess] -active- (worker -n worker9.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1681 1.1 0.2 119720 45736 ?  S 10:45 0:06 [celeryd: [email protected]:MainProcess] -active- (worker -n worker8.%h --app=python --time-limit=3600 -c 2 -Ofair -l debug --config=celery_config -E) 
username  1796 0.0 0.2 118160 39660 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1797 0.0 0.2 118232 39548 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1798 0.0 0.2 118152 39532 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1799 0.0 0.2 118156 39652 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1800 0.0 0.2 118168 39748 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1801 0.0 0.2 118164 39608 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1802 0.0 0.2 118192 39768 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1803 0.0 0.2 118200 39728 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1804 0.0 0.2 118168 39756 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1805 0.0 0.2 118188 39692 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-1] 
username  1806 0.0 0.2 118152 39536 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-2] 
username  1807 0.0 0.2 118232 39544 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-2] 
username  1808 0.0 0.2 118164 39608 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-2] 
username  1809 0.0 0.2 118200 39732 ?  S 10:45 0:00 [celeryd: [email protected]:PoolWorker-2] 

Wenn Sie stoppt sofort dann stopwaitsecs mit fließendem Sellerie durch systemd

[email protected]:~$ sudo supervisorctl status 
celery_worker:celery_worker-0 RUNNING pid 2488, uptime 0:00:48 
celery_worker:celery_worker-1 RUNNING pid 2487, uptime 0:00:48 
celery_worker:celery_worker-2 RUNNING pid 2486, uptime 0:00:48 
celery_worker:celery_worker-3 RUNNING pid 2485, uptime 0:00:48 
celery_worker:celery_worker-4 RUNNING pid 2484, uptime 0:00:48 
celery_worker:celery_worker-5 RUNNING pid 2483, uptime 0:00:48 
celery_worker:celery_worker-6 RUNNING pid 2482, uptime 0:00:48 
celery_worker:celery_worker-7 RUNNING pid 2481, uptime 0:00:48 
celery_worker:celery_worker-8 RUNNING pid 2490, uptime 0:00:48 
celery_worker:celery_worker-9 RUNNING pid 2489, uptime 0:00:48 
[email protected]:~$ sudo supervisorctl stop celery_worker:* 
celery_worker:celery_worker-7: stopped 
celery_worker:celery_worker-6: stopped 
celery_worker:celery_worker-5: stopped 
celery_worker:celery_worker-4: stopped 
celery_worker:celery_worker-3: stopped 
celery_worker:celery_worker-2: stopped 
celery_worker:celery_worker-1: stopped 
celery_worker:celery_worker-0: stopped 
celery_worker:celery_worker-9: stopped 
celery_worker:celery_worker-8: stopped 
[email protected]:~$ sudo supervisorctl status 
celery_worker:celery_worker-0 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-1 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-2 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-3 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-4 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-5 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-6 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-7 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-8 STOPPED Aug 02 11:17 AM 
celery_worker:celery_worker-9 STOPPED Aug 02 11:17 AM 
Verwandte Themen