ืื ื’ืœื™ืชืฆืจืคืชื™ืชืกืคืจื“ื™

Ad


ืกืžืœ OnWorks

ืงืจืงืก - ืžืงื•ื•ืŸ ื‘ืขื ืŸ

ื”ืคืขืœ ืงืจืงืก ื‘ืกืคืง ืื™ืจื•ื— ื—ื™ื ืžื™ ืฉืœ OnWorks ื‘ืืžืฆืขื•ืช ืื•ื‘ื•ื ื˜ื• ืื•ื ืœื™ื™ืŸ, ืคื“ื•ืจื” ืื•ื ืœื™ื™ืŸ, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ื–ื”ื• ืงืจืงืก ื”ืคืงื•ื“ื•ืช ืฉื ื™ืชืŸ ืœื”ืคืขื™ืœ ื‘ืกืคืง ื”ืื™ืจื•ื— ื”ื—ื™ื ืžื™ ืฉืœ OnWorks ื‘ืืžืฆืขื•ืช ืื—ืช ืžืชื—ื ื•ืช ื”ืขื‘ื•ื“ื” ื”ืžืงื•ื•ื ื•ืช ื”ืžืจื•ื‘ื•ืช ืฉืœื ื•, ื›ื’ื•ืŸ Ubuntu Online, Fedora Online, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ืชึธื›ึฐื ึดื™ืช:

ืฉืึตื


ืงืจืงืก - ืชื™ืขื•ื“ ืงืจืงืก [ืชืžื•ื ื”]

Circus ื”ื™ื ืชื•ื›ื ืช Python ืืฉืจ ื™ื›ื•ืœื” ืœืฉืžืฉ ืœื ื™ื˜ื•ืจ ื•ื‘ืงืจื” ืฉืœ ืชื”ืœื™ื›ื™ื ื•ืฉืงืขื™ื.

ื ื™ืชืŸ ืœื”ื ื™ืข ืืช ื”ืงืจืงืก ื‘ืืžืฆืขื•ืช ืžืžืฉืง ืฉื•ืจืช ืคืงื•ื“ื”, ืžืžืฉืง ืื™ื ื˜ืจื ื˜ ืื• ื‘ืื•ืคืŸ ืชื›ื ื•ืชื™
ื“ืจืš ื”-API ืฉืœ python.

ื›ื“ื™ ืœื”ืชืงื™ืŸ ืื•ืชื• ื•ืœื ืกื•ืช ืืช ื”ืชื›ื•ื ื•ืช ืฉืœื•, ืขื™ื™ืŸ ื‘ื“ื•ื’ืžืื•ืช, ืื• ืงืจื ืืช ืฉืืจ ื”ืขืžื•ื“ ื”ื–ื”
ืœื”ื™ื›ืจื•ืช ืžื”ื™ืจื”.

ืจืฅ A ืงืจืงืก ื“ื™ื™ืžื•ืŸ


ืงืจืงืก ืžืกืคืง ืฉื™ื—ืช ืกืงืจื™ืคื˜ ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ืงืจืงืก ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ืœื ื™ื”ื•ืœ ืชื”ืœื™ื›ื™ื
ืžืื•ืจื’ืŸ ื‘ืฆื•ืคื” ืื—ื“ ืื• ื™ื•ืชืจ.

ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” ืฉืœ Circus ื ื™ืชืŸ ืœื”ื’ื“ืจื” ื‘ืืžืฆืขื•ืช ืงื•ื‘ืฅ ืชืฆื•ืจื” ื‘ืกื’ื ื•ืŸ ini.

ื”ื ื” ื“ื•ื’ืžื” ืžืื•ื“ ืžื™ื ื™ืžืœื™ืช:

[ืฆื•ืคื”:ืชื•ื›ื ื™ืช]
cmd = python myprogram.py
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 5

[ืฆื•ืคื”: ืชื•ื›ื ื™ืช ืื—ืจืช]
cmd = ืชื•ื›ื ื™ืช ืื—ืจืช
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 2

ืœืื—ืจ ืžื›ืŸ ื”ืงื•ื‘ืฅ ืžื•ืขื‘ืจ ืืœ ืงืจืงืก:

$ circusd example.ini

ืžืœื‘ื“ ืชื”ืœื™ื›ื™ื, ืงืจืงืก ื™ื›ื•ืœ ื’ื ืœืงืฉื•ืจ ืฉืงืขื™ื. ืžืื– ื›ืœ ืชื”ืœื™ืš ื”ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ ืงืจืงืก ื”ื•ื
ื‘ืŸ ืฉืœ ื“ืžื•ืŸ ื”ืงืจืงืก ื”ืจืืฉื™, ื›ืœื•ืžืจ ื›ืœ ืชื•ื›ื ื™ืช ืฉื ืฉืœื˜ืช ืขืœ ื™ื“ื™ ืงืจืงืก ื™ื›ื•ืœื”
ืœื”ืฉืชืžืฉ ื‘ืฉืงืขื™ื ื”ืืœื”.

ื”ืคืขืœืช ืฉืงืข ื”ื™ื ืคืฉื•ื˜ื” ื›ืžื• ื”ื•ืกืคืช ื ืฉืงืข ืกืขื™ืฃ ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”:

[socket:mysocket]
ืžืืจื— = ืžืืจื— ืžืงื•ืžื™
ื™ืฆื™ืื” = 8080

ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืฉืงืขื™ื, ืจืื” ืฉืงืขื™ื.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืœืžื” ื–ื” ืชื›ื•ื ื” ืงื˜ืœื ื™ืช, ืงืจื ืœืžื” ืฉืงืขื™ื.

ืฉืœื™ื˜ื” ืงืจืงืก


Circus ืžืกืคืง ืฉื ื™ ื›ืœื™ื ื‘ืฉื•ืจืช ืคืงื•ื“ื” ืœื ื™ื”ื•ืœ ื”ื“ืžื•ืŸ ื”ืจืฅ ืฉืœืš:

ยท circusctl, ืงื•ื ืกื•ืœืช ื ื™ื”ื•ืœ ืฉื‘ื” ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื‘ืฆืข ืคืขื•ืœื•ืช ื›ื’ื•ืŸ ื”ื•ืกืคื” ืื•
ืคื™ื ื•ื™ ืขื•ื‘ื“ื™ื

ยท ื˜ื•ืค ืงืจืงืก, ืงื•ื ืกื•ืœื” ื“ืžื•ื™ืช ืขืœื™ื•ืŸ ืฉื‘ื” ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ ื•ื‘ืžืขื‘ื“ ืฉืœืš
ื”ืคืขืœืช ืงืจืงืก.

ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืืœื”, ืจืื” cli

Circus ืžืฆื™ืขื” ื’ื ืœื•ื— ืžื—ื•ื•ื ื™ื ืื™ื ื˜ืจื ื˜ื™ ืฉื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ืœื“ืžื•ืŸ Circus ืคื•ืขืœ ื•ืœืืคืฉืจ ืœืš
ืœืคืงื— ื•ืœื™ืฆื•ืจ ืื™ืชื• ืื™ื ื˜ืจืืงืฆื™ื”.

ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืชื›ื•ื ื” ื–ื•, ืจืื” circushttpd

ืžื” ืขึทื›ืฉืึธื™ื• ?
ืื ืืชื” ืžืคืชื— ื•ืจื•ืฆื” ืœืžื ืฃ ืืช Circus ื‘ืคืจื•ื™ืงื˜ ืžืฉืœืš, ื›ืชื•ื‘ ืชื•ืกืคื™ื ืื•
ื”ื•ืงืก, ืขื‘ื•ืจ ืืœ fordevs.

ืื ืืชื” ืื•ืคืจ ื•ืจื•ืฆื” ืœื ื”ืœ ืืช ื”ืชื”ืœื™ื›ื™ื ืฉืœืš ื‘ืืžืฆืขื•ืช Circus, ืขื‘ื•ืจ ืœ-forops.

ืชืจื•ืžื•ืช ื• ืžึธืฉืื•ึนื‘
ืขื•ื“ ืขืœ ืชืจื•ืžื”: ืชืจื•ืžื•ืช.

ืงื™ืฉื•ืจื™ื ืฉื™ืžื•ืฉื™ื™ื:

ยท ื™ืฉ ืจืฉื™ืžืช ื“ื™ื•ื•ืจ ืœื›ืœ ืžืฉื•ื‘ ืื• ืฉืืœื”:
http://tech.groups.yahoo.com/group/circus-dev/

ยท ื”ืžืื’ืจ ื•ืžืขืงื‘ ื”ื‘ืขื™ื•ืช ื ืžืฆืื™ื ื‘-GitHub: https://github.com/circus-tent/circus

ยท ื”ืฆื˜ืจืคื• ืืœื™ื ื• ืœ-IRC : Freenode, ืขืจื•ืฅ #ืื•ื”ืœ ืงืจืงืก

ืชื™ืขื•ื“ ืžื“ื“
ื”ืชืงื ื” ืงืจืงืก
Circus ื”ื™ื ื—ื‘ื™ืœืช Python ื”ืžืชืคืจืกืžืช ื‘- PyPI - ืื™ื ื“ืงืก ื”ื—ื‘ื™ืœื•ืช ืฉืœ Python.

ื”ื“ืจืš ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ ืœื”ืชืงื™ืŸ ืื•ืชื• ื”ื™ื ืœื”ืฉืชืžืฉ ื‘-pip, ื›ืœื™ ืœื”ืชืงื ื” ื•ื ื™ื”ื•ืœ ืฉืœ Python
ืžืืจ you

$ pip ืœื”ืชืงื™ืŸ ืงืจืงืก

ืื• ื”ื•ืจื“ ืืช ื” ืืจื›ื™ื•ืŸ on PyPI, ื—ืœืฅ ื•ื”ืชืงืŸ ืื•ืชื• ื‘ืื•ืคืŸ ื™ื“ื ื™ ืขื:

$ python setup.py ืœื”ืชืงื™ืŸ

ืื ืืชื” ืจื•ืฆื” ืœื ืกื•ืช ืืช ืงืจืงืก, ืจืื” ืืช ื”ื“ื•ื’ืžืื•ืช.

ืื ืืชื” ืžืฉืชืžืฉ ื‘-debian ืื• ื‘ื›ืœ ื”ืคืฆื” ืžื‘ื•ืกืกืช debian, ืืชื” ื’ื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-ppa to
ืœื”ืชืงื™ืŸ ืงืจืงืก, ื–ื” ื‘ https://launchpad.net/~roman-imankulov/+archive/circus

ื‘ื ื™ื™ืช zc.
ืื ื• ืžืกืคืงื™ื ื‘ื ื™ื™ืช zc. ืชืฆื•ืจื”, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื” ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ื”ืคืขืœืช ื”-bootstrap
ืกืงืจื™ืคื˜, ื•ืื– ืงื•ืจื buildout:

$ python bootstrap.py
$ bin/buildout

ืขื•ื“ on ื“ืจื™ืฉื•ืช
ืงืจืงืก ืขื•ื‘ื“ ืขื:

ยท Python 2.6, 2.7, 3.2 ืื• 3.3

ยท

zeromq >= 2.1.10

ยท ื”ื’ืจืกื” ืฉืœ zeromq ื”ื ืชืžื›ืช ื ืงื‘ืขืช ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืœืคื™ ืื™ื–ื• ื’ืจืกื” ืฉืœ
pyzmq ืžื•ืชืงืŸ ืขืœ ื™ื“ื™ pip ื‘ืžื”ืœืš ื”ืชืงื ืช ืงืจืงืก.

ยท ื”ืžื”ื“ื•ืจื” ื”ื ื•ื›ื—ื™ืช ืฉืœื”ื ืชื•ืžื›ืช ื‘ื’ืจืกืื•ืช 2.x (ืžื•ื’ื‘ืœ), 3.x ื•-4.x ZeroMQ.

ยท ื”ืขืจื•ืช: ืื ืืชื” ืžืฉืชืžืฉ ื‘-PyPy ื‘ืžืงื•ื ื‘-CPython, ื”ืงืคื“ ืœืงืจื•ื ืื•ืชื
ืžืกืžื›ื™ ื”ืชืงื ื” ื›ืžื• ืชืžื™ื›ื” ื‘ื’ืจืกืช ZeroMQ ืื™ื ื” ื–ื”ื” ื‘- PyPy.

ื›ืืฉืจ ืืชื” ืžืชืงื™ืŸ ืงืจืงืก, ื”ื’ืจืกืื•ืช ื”ืขื“ื›ื ื™ื•ืช ื‘ื™ื•ืชืจ ืฉืœ ื”ืชืœื•ืช ืฉืœ Python ื™ื™ืฉืœืคื•
ื‘ืฉื‘ื™ืœืš.

ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืชืงื™ืŸ ืื•ืชื ื‘ืื•ืคืŸ ื™ื“ื ื™ ื‘ืืžืฆืขื•ืช ืงื•ื‘ืฅ pip-requirements.txt ืฉืื ื• ืžืกืคืงื™ื:

$ pip ื”ืชืงื ืช -r pip-requirements.txt

ืื ืืชื” ืจื•ืฆื” ืœื”ืคืขื™ืœ ืืช ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜ ืชืฆื˜ืจืš ืœื”ืชืงื™ืŸ ืจืฉืช ืงืจืงืก:

$ pip ืœื”ืชืงื™ืŸ circus-web

ื”ื“ืจื›ื”
ืฆืขื“ ืื—ืจ ืฆืขื“ ื”ื“ืจื›ื”
ื”ืฉืžื™ื™ื ื“ื•ื’ืžืื•ืช ื‘ืกืคืจื™ื™ื” ื‘ืžืื’ืจ ื”ืงืจืงืก ืžื›ื™ืœ ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช ื›ื“ื™ ืœื”ืฉื™ื’ ืื•ืชืš
ื”ืชื—ื™ืœ, ืื‘ืœ ื”ื ื” ืžื“ืจื™ืš ืžืœื ืฉื ื•ืชืŸ ืœืš ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ื”ืชื›ื•ื ื•ืช.

ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืคืงื— ืขืœ ื™ื™ืฉื•ื WSGI.

ื”ึทืชืงึธื ึธื”
Circus ื ื‘ื“ืง ืขืœ Mac OS X ื•-Linux ืขื ื”-Python 2.6, 2.7, 3.2 ื•-3.3 ื”ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ. ืœ
ืœื”ืคืขื™ืœ ืงืจืงืก ืžืœื, ืชืฆื˜ืจืš ื’ื libzmq, ื—ื‘ื™ื‘ & ื•ื™ืจื˜ื•ืืœื™.

ื‘ืžืขืจื›ื•ืช ืžื‘ื•ืกืกื•ืช ื“ื‘ื™ืืŸ:

$ sudo apt-get install libzmq-dev libevent-dev python-dev python-virtualenv

ืฆื•ืจ Virtualenv ื•ื”ืชืงืŸ ืงืจืงืก, ืจืฉืช ืงืจืงืก ื• ื’ึถืจึถื‘ ื‘ึผื•ึน

$ virtualenv /tmp/circus
$ cd /tmp/circus
$ bin/pip ืœื”ืชืงื™ืŸ ืงืจืงืก
$ bin/pip ื”ืชืงื ืช circus-web
$ bin/pip ืœื”ืชืงื™ืŸ chausset

ื‘ืจื’ืข ืฉื–ื” ื ืขืฉื”, ืชืžืฆื ืฉืคืข ืฉืœ ืคืงื•ื“ื•ืช ื‘-bin dir ื”ืžืงื•ืžื™.

ื ื•ึนื”ึธื’
ื’ึถืจึถื‘ ืžื’ื™ืข ืขื ืืคืœื™ืงืฆื™ื™ืช Hello world, ื ืกื” ืœื”ืคืขื™ืœ ืื•ืชื”:

ืคื—/ืฆ'ื•ืกื˜ื” $

ืืชื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื‘ืงืจ http://localhost: 8080 ื•ืœืจืื•ืช ืฉืœื•ื ืขื•ึนืœึธื.

ืขืฆื•ืจ ืืช Chaussette ื•ื”ื•ืกืฃ ืงื•ื‘ืฅ circus.ini ื‘ืกืคืจื™ื™ื” ื”ืžื›ื™ืœื”:

[ืงืจืงืก]
ืกื˜ื˜ื™ืกื˜ื™ืงื” = 1
httpd = 1

[watcher:webapp]
cmd = bin/chaussette --fd $(circus.sockets.web)
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 3
use_sockets = ื ื›ื•ืŸ

[socket:web]
ืžืืจื— = 127.0.0.1
ื™ืฆื™ืื” = 9999

ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื”ื–ื” ืื•ืžืจ ืœืกื™ืจืงื•ืก ืœืื’ื“ ืฉืงืข ื‘ื™ืฆื™ืื” 9999 ื•ืœื”ืคืขื™ืœ 3 ืขื•ื‘ื“ื™ ืฆ'ื•ืกื˜ืก
ื ื’ื“ ื–ื”. ื–ื” ื’ื ืžืคืขื™ืœ ืืช ืœื•ื— ื”ืžื—ื•ื•ื ื™ื ื”ืื™ื ื˜ืจื ื˜ ืฉืœ Circus ื•ืืช ืžื•ื“ื•ืœ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื”.

ืฉืžื•ืจ ืื•ืชื• ื•ื”ืคืขืœ ืื•ืชื• ื‘ืืžืฆืขื•ืช ืงืจืงืก:

$ bin/circusd --daemon circus.ini

ืขื›ืฉื™ื• ื‘ืงืจ http://127.0.0.1: 9999, ืืชื” ืืžื•ืจ ืœืจืื•ืช ืืช ืืคืœื™ืงืฆื™ื™ืช hello world. ื”ื”ื‘ื“ืœ ื›ืขืช ื”ื•ื
ืฉื”ืฉืงืข ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ Circus ื•ื™ืฉ ื›ืžื” ืขื•ื‘ื“ื™ ืื™ื ื˜ืจื ื˜ ืฉืžืงื‘ืœื™ื
ืงืฉืจื™ื ื ื’ื“ื•.

ื”ืขืจื”:
ืื™ื–ื•ืŸ ื”ืขื•ืžืก ืžื•ืคืขืœ ืขืœ ื™ื“ื™ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื›ืš ืฉืืชื” ืžืงื‘ืœ ืืช ืื•ืชื” ืžื”ื™ืจื•ืช
ื›ืžื• ื›ืœ ืฉืจืช ืื™ื ื˜ืจื ื˜ ืื—ืจ ืžืจืืฉ ื›ืžื• Apache ืื• NGinx. ืงืจืงืก ืœื ืžืคืจื™ืข
ื”ื ืชื•ื ื™ื ืฉืขื•ื‘ืจื™ื.

ืืชื” ื™ื›ื•ืœ ื’ื ืœื‘ืงืจ http://localhost: 8080 / ื•ืชื™ื”ื ื• ืžืœื•ื— ื”ืžื—ื•ื•ื ื™ื ื”ืื™ื ื˜ืจื ื˜ื™ ืฉืœ Circus.

ืคืขื•ืœืช ื’ื•ืžืœื™ืŸ
ื‘ื•ืื• ื ืฉืชืžืฉ ื‘ืžืขื˜ืคืช circusctl ื‘ื–ืžืŸ ืฉื”ืžืขืจื›ืช ืคื•ืขืœืช:

$ bin/circusctl
circusctl 0.7.1
circusd-stats: ืคืขื™ืœ
circushttpd: ืคืขื™ืœ
webapp: ืคืขื™ืœ
(circusctl)

ืืชื” ื ื›ื ืก ืœืžืขื˜ืคืช ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช. ืกื•ึผื’ ืœืขื–ื•ืจ ื›ื“ื™ ืœืงื‘ืœ ืืช ื›ืœ ื”ืคืงื•ื“ื•ืช:

(circusctl) ืขื–ืจื”

ืคืงื•ื“ื•ืช ืžืชื•ืขื“ื•ืช (ื”ืงืœื“ ืขื–ืจื” ):
========================================
ื”ื•ืกืฃ ืงื‘ืœ ืจืฉื™ืžื” numprocesses quit rm start stop
decr globaloptions ื”ืื–ื™ื ื• numwatchers ื˜ืขืŸ ืžื—ื“ืฉ ืกื˜ ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช
dstats incr listsockets ืืคืฉืจื•ื™ื•ืช ืกื˜ื˜ื•ืก ืื•ืช ื”ืคืขืœื” ืžื—ื“ืฉ

ืคืงื•ื“ื•ืช ืœื ืžืชื•ืขื“ื•ืช:
======================
ืขื–ืจื” ืฉืœ EOF

ื‘ื•ืื• ื ื ืกื” ื“ื‘ืจื™ื ื‘ืกื™ืกื™ื™ื. ื‘ื•ืื• ื ืจืฉื•ื ืืช ื”ืชื”ืœื™ื›ื™ื ืฉืœ Web Workers ื•ื ื•ืกื™ืฃ ืื—ื“ ื—ื“ืฉ:

(circusctl) ืจืฉื™ืžืช webapp
13712,13713,13714
(circusctl) incr webapp
4
(circusctl) ืจืฉื™ืžืช webapp
13712,13713,13714,13973

ืžื–ืœ ื˜ื•ื‘, ื™ืฆืจืช ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืงืจืงืก ืฉืœืš! ืจื“ื• ืžื”ืงืœื™ืคื” ืขื Ctrl+D ื•ืขื›ืฉื™ื• ื”ืคืขืœ
ื˜ื•ืค ืงืจืงืก:

$ ืคื—/ืขืœื™ื•ืŸ ืงืจืงืก

ื–ื•ื”ื™ ืคืงื•ื“ื” ื“ืžื•ื™ืช-ืขืœ ื›ื“ื™ ืœืฆืคื•ืช ื‘ื›ืœ ื”ื–ื™ื›ืจื•ืŸ ื•ื”ืฉื™ืžื•ืฉ ื‘-CPU ืฉืœ ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืฉืœืš ื‘ื–ืžืŸ ืืžืช.

ืœื—ืฅ ืขืœ Ctrl+C ื•ืขื›ืฉื™ื• ื‘ื•ื ื ืฆื ืžืกื™ืจืงื•ืก ืœื—ืœื•ื˜ื™ืŸ ื‘ืืžืฆืขื•ืช circus-ctl:

$ bin/circusctl ืขื–ื•ื‘
ok

ื”ึทื‘ึผึธื ืฆืขื“ื™ื
ืืชื” ื™ื›ื•ืœ ืœื—ื‘ืจ ืืช ืืคืœื™ืงืฆื™ื™ืช WSGI ืžืฉืœืš ื‘ืžืงื•ื ืืช ืฉืœื•ื ื”ืขื•ืœื ืฉืœ Chaussette ืคืฉื•ื˜ ืขืœ ื™ื“ื™
ืžืคื ื” ืืช ื”ื™ื™ืฉื•ื ืฉื ื™ืชืŸ ืœืงืจื•ื.

Chaussette ืžื’ื™ืขื” ื’ื ืขื ื—ืœืงื™ื ืื—ื•ืจื™ื™ื ืจื‘ื™ื ื›ืžื• Gevent ืื• Meinheld.

ื—ื•ืžืจ ืขื™ื•ื ื™ https://chaussette.readthedocs.org/ ืœื›ืœ ื”ืืคืฉืจื•ื™ื•ืช.

ืœืžื” ืฆืจื™ืš I ืœื”ืฉืชืžืฉ ืงืจืงืก ื‘ืžืงื•ื of X ?
1. ืงืจืงืก ืžืคืฉื˜ ืฉืึถืœึฐืšึธ ืื™ื ื˜ืจื ื˜ ืœืขืจื•ื ืชื”ืœื™ืš ื ื™ื”ื•ืœ

ืงืจืงืก ื™ื•ื“ืข ืœื ื”ืœ ืชื”ืœื™ื›ื™ื ื• ืฉืงืขื™ื, ื›ืš ืฉืœื ืชืฆื˜ืจืš ืœื”ืืฆื™ืœ ืื™ื ื˜ืจื ื˜
ื ื™ื”ื•ืœ ืขื•ื‘ื“ื™ื ืœืฉืจืช WGSI.

ืจืื” ืœืžื” ืฉืงืขื™ื

2. ืงืจืงืก ืžืกืคืง ืคืื‘/ืชืช ื• ื‘ื• ื”ื•ื“ืขื•ืช ื‘ืืžืฆืขื•ืช ZeroMQ
ืœืงืจืงืก ื™ืฉ ืคืื‘/ืขืจื•ืฅ ืžืฉื ื” ืฉืืชื” ื™ื›ื•ืœ ืœื”ื™ืจืฉื ืืœื™ื•. ืขืจื•ืฅ ื–ื” ืžืงื‘ืœ ืืช ื›ืœ ื”ืื™ืจื•ืขื™ื
ืงื•ืจื” ื‘ืงืจืงืก. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื”ื•ื“ืขื” ื›ืืฉืจ ืชื”ืœื™ืš ืžืชื ื•ืคืฃ, ืื•
ืœื‘ื ื•ืช ืœืงื•ื— ืฉืžืคืขื™ืœ ืื–ื”ืจื” ื›ืืฉืจ ืชื”ืœื™ื›ื™ื ืžืกื•ื™ืžื™ื ืื•ื›ืœื™ื ืืช ื›ืœ ื”ืžืขื‘ื“ ืื•
ื–ื™ื›ืจื•ืŸ RAM

ืื™ืจื•ืขื™ื ืืœื• ื ืฉืœื—ื™ื ื“ืจืš ืขืจื•ืฅ ZeroMQ, ืžื” ืฉืขื•ืฉื” ืื•ืชื• ืฉื•ื ื” ืžื”-stdin
ืžืคืงื— ื”ื–ืจื ืžืฉืชืžืฉ ื‘:

ยท ืงืจืงืก ืฉื•ืœื— ืื™ืจื•ืขื™ื ื‘ืฆื•ืจื” ืฉืœ ืืฉ ื•ืฉื›ื—, ื›ืš ืฉืื™ืŸ ืฆื•ืจืš ืœื‘ืฆืข ืœื•ืœืื” ื™ื“ื ื™ืช
ื“ืจืš ืืช ื›ืœ ืžืื–ื™ื ื™ื ื•ืœืฉืžื•ืจ ืขืœ ืžื“ื™ื ื•ืชื™ื”ื.

ยท ื ื™ืชืŸ ืœืืชืจ ืžื ื•ื™ื™ื ืขืœ ืžืืจื— ืžืจื•ื—ืง.

Circus ืžืกืคืงืช ื’ื ื“ืจื›ื™ื ืœืงื‘ืœ ืขื“ื›ื•ื ื™ ืกื˜ื˜ื•ืก ื‘ืืžืฆืขื•ืช ืกืงืจื™ื ื—ื“-ืคืขืžื™ื™ื ืขืœ ื“ืจื™ืฉื”/ื ืฆื™ื’
ืขึธืจื•ึผืฅ. ื–ื” ืื•ืžืจ ืฉืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืžื™ื“ืข ืฉืœืš ืžื‘ืœื™ ืฉืชืฆื˜ืจืš ืœื”ื™ืจืฉื ืœ-a
ื–ืจื. ื”ืคืงื•ื“ื” cli ืฉืžืกืคืงืช Circus ืžืฉืชืžืฉืช ื‘ืขืจื•ืฅ ื”ื–ื”.

ืจืื” ื“ื•ื’ืžืื•ืช.

3. ืงืจืงืก is (ืคึผึดื™ืชื•ึนืŸ) ืžืคืชื—ื™ื ื™ื“ื™ื“ื•ืชื™
ื‘ืขื•ื“ ืฉ-Circus ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื•ื ืข ื›ื•ืœื• ืขืœ ื™ื“ื™ ืงื•ื‘ืฅ ืชืฆื•ืจื” ื•ื”- circusctl / ืงืจืงืก
ืคืงื•ื“ื•ืช, ืงืœ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื›ืœ ื”ืžืขืจื›ืช ืื• ื‘ื—ืœืงื” ื›ื“ื™ ืœื‘ื ื•ืช ื”ืชืืžื” ืื™ืฉื™ืช ืžืฉืœืš
ืฆื•ืคื” ืชื”ืœื™ืš ื‘- Python.

ื›ืœ ืฉื›ื‘ื” ืฉืœ ื”ืžืขืจื›ืช ืžื‘ื•ื“ื“ืช, ื›ืš ืฉืชื•ื›ืœ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืื•ืคืŸ ืขืฆืžืื™:

ยท ืžืขื˜ืคืช ื”ืชื”ืœื™ืš (ื”ืชึทื”ึฒืœึดื™ืš)

ยท ืžื ื”ืœ ื”ืชื”ืœื™ื›ื™ื (ืฆื•ืคื”)

ยท ื”ืžื ื”ืœ ื”ื’ืœื•ื‘ืœื™ ืฉืžื ื”ืœ ืžืกืคืจ ืžื ื”ืœื™ ืชื”ืœื™ื›ื™ื (ืฉื•ื˜ืจ)

ยท ื•ื›ื•ืœื™โ€ฆ

4. ืงืจืงืก ืžืื–ื ื™ื™ื
ืื—ื“ ืžืžืงืจื™ ื”ืฉื™ืžื•ืฉ ืฉืœ Circus ื”ื•ื ืœื ื”ืœ ืืœืคื™ ืชื”ืœื™ื›ื™ื ืœืœื ื”ื•ืกืคื”
ืชืงื•ืจื” -- ืื ื• ืžื—ื•ื™ื‘ื™ื ืœื”ืชืžืงื“ ื‘ื–ื”.

ื‘ื™ืื” ื”ื—ืœ ืž- ืžืคืงื—
Supervisor ื”ื•ื ืคืชืจื•ืŸ ืคื•ืคื•ืœืจื™ ืžืื•ื“ ื‘ืขื•ืœื Python ื•ืื ื—ื ื• ื ืฉืืœื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืื™ืš Circus
ืžืฉื•ื•ื” ืื™ืชื•.

ืื ืืชื” ื‘ื ืž ืžืคืงื—, ื“ืฃ ื–ื” ืžื ืกื” ืœืชืช ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ืื•ืคืŸ ื”ืฉื™ืžื•ืฉ ื‘ื›ืœื™ื
ืฉื•ื ื•ืช.

ื”ื‘ื“ืœื™ื ืกืงื™ืจื”
ืœืžืคืงื— ื•ืœืงืจืงืก ื™ืฉ ืื•ืชืŸ ืžื˜ืจื•ืช - ื”ืŸ ืžื ื”ืœื•ืช ืชื”ืœื™ื›ื™ื ื•ืžืกืคืงื•ืช ื
ืกืงืจื™ืคื˜ ืฉื•ืจืช ื”ืคืงื•ื“ื” - ื‘ื”ืชืืžื” ืžึฐืคึทืงึตื—ึท ื• ืงืจืงืก - ืฉืงื•ืจื ืชืฆื•ืจื”
ืงื•ื‘ืฅ, ืžื–ืœื’ ืชื”ืœื™ื›ื™ื ื—ื“ืฉื™ื ื•ืฉื•ืžืจ ืื•ืชื ื‘ื—ื™ื™ื.

ืœืงืจืงืก ื™ืฉ ืชื›ื•ื ื” ื ื•ืกืคืช: ื”ื™ื›ื•ืœืช ืœืื’ื“ ืฉืงืขื™ื ื•ืœืชืช ืœืชื”ืœื™ื›ื™ื ืฉื”ื•ื ืžื ื”ืœ
ืœื”ืฉืชืžืฉ ื‘ื”ื. ืžื•ื“ืœ "ืงื“ื-ืžื–ืœื’" ื–ื” ืžืฉืžืฉ ืฉืจืชื™ ืื™ื ื˜ืจื ื˜ ืจื‘ื™ื ื‘ื—ื•ืฅ, ื›ืžื• ืึทืคึธึผืฉื or
ื—ื“-ืงืจืŸ. ืืคืฉืจื•ืช ื–ื• ื‘-Circus ื™ื›ื•ืœื” ืœืคืฉื˜ ืขืจื™ืžืช ืืคืœื™ืงืฆื™ื•ืช ืื™ื ื˜ืจื ื˜: ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื•
ืฉืงืขื™ื ืžื ื•ื”ืœื™ื ืขืœ ื™ื“ื™ ื›ืœื™ ืื—ื“.

ืฉื ื™ ื”ืคืจื•ื™ืงื˜ื™ื ืžืกืคืงื™ื ื“ืจืš ืœืฉืœื•ื˜ ื‘ื“ืžื•ืŸ ืคื•ืขืœ ื‘ืืžืฆืขื•ืช ืกืงืจื™ืคื˜ ืื—ืจ. ื‘ื”ืชืืžื”
ืžืคืงื— ื• circusctl. ืœืฉื ื™ื”ื ื™ืฉ ื’ื ืื™ืจื•ืขื™ื ื•ื“ืจืš ืœื”ื™ืจืฉื ืืœื™ื”ื.
ื”ื”ื‘ื“ืœ ื”ืขื™ืงืจื™ ื”ื•ื ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื‘ืกื™ืกื™ืช: Supervisor ืžืฉืชืžืฉ ื‘-XML-RPC ืœืื™ื ื˜ืจืืงืฆื™ื”
ืขื ื”ื“ืžื•ืŸ, ื‘ืขื•ื“ ืฉืกื™ืจืงื•ืก ืžืฉืชืžืฉ ื‘-ZeroMQ.

ืœ-Circus ื•ืœ-Supervisor ื™ืฉ ืžืžืฉืง ืื™ื ื˜ืจื ื˜ื™ ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ืžืชืจื—ืฉ. ืงืจืงืก ื–ื” ื™ื•ืชืจ
ืžืชืงื“ื ื›ื™ ืืชื” ื™ื›ื•ืœ ืœืขืงื•ื‘ ื‘ื–ืžืŸ ืืžืช ืื—ืจ ื”ืžืชืจื—ืฉ ื•ืœืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ื“ืžื•ืŸ.
ื”ื•ื ืžืฉืชืžืฉ ื‘ืฉืงืขื™ ืื™ื ื˜ืจื ื˜ ื•ืžืคื•ืชื— ื‘ืคืจื•ื™ืงื˜ ื ืคืจื“ (ืจืฉืช ืงืจืงืก.)

ื™ืฉื ื ื”ื‘ื“ืœื™ื ืขื“ื™ื ื™ื ืจื‘ื™ื ืื—ืจื™ื ื‘ืขื™ืฆื•ื‘ ื”ืœื™ื‘ื”, ืื•ืœื™ ื ืคืจื˜ ื›ืืŸ ื™ื•ื ืื—ื“... ื‘
ื‘ื™ื ืชื™ื™ื, ืืชื” ื™ื›ื•ืœ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ืคื ื™ืžื™ื•ืช ืงืจืงืก ื‘ืขื™ืฆื•ื‘.

ืชึฐืฆื•ึผืจึธื”
ืฉืชื™ ื”ืžืขืจื›ื•ืช ืžืฉืชืžืฉื•ืช ื‘ืงื•ื‘ืฅ ื“ืžื•ื™ ini ื›ืชืฆื•ืจื”.

ยท ืžืคืงื— ืชื™ืขื•ื“

ยท ืงืจืงืก ืชื™ืขื•ื“

ื”ื ื” ื“ื•ื’ืžื” ืงื˜ื ื” ืœื”ืคืขืœืช ืืคืœื™ืงืฆื™ื” ืขื Supervisor. ื‘ืžืงืจื” ื–ื”, ื”
ื”ื™ื™ืฉื•ื ื™ื•ืคืขืœ ื•ื™ื•ืคืขืœ ืžื—ื“ืฉ ื‘ืžืงืจื” ืฉื”ื•ื ืงื•ืจืก

[ืชื•ื›ื ื™ืช:ื“ื•ื’ืžื”]
command=npm start
directory=/home/www/my-server/
user=www-data
ื”ืชื—ืœื” ืื•ื˜ื•ืžื˜ื™ืช = ื ื›ื•ืŸ
autorestart=true
redirect_stderr=ื ื›ื•ืŸ

ื‘ืงืจืงืก, ืื•ืชื” ืชืฆื•ืจื” ื ืขืฉื™ืช ืขืœ ื™ื“ื™:

[ืฆื•ืคื”:ื“ื•ื’ืžื”]
cmd=npm ื”ืชื—ืœื”
working_dir=/home/www/my-server/
user=www-data
stderr_stream.class=StdoutStream

ืฉื™ืžื• ืœื‘ ืฉื”ื ื™ืชื•ื‘ ืžื—ื“ืฉ ืฉืœ stderr ืฉื•ื ื” ื‘ืžืงืฆืช ื‘-Circus. ืœื›ืœื™ ืื™ืŸ
a ื–ื ื‘ ืชื›ื•ื ื” ื›ืžื• ื‘-Supervisor, ืื‘ืœ ืชืืคืฉืจ ืœืš ืœื—ื‘ืจ ื›ืœ ืคื™ืกืช ืงื•ื“ ืœื”ืชืžื•ื“ื“ ืื™ืชื”
ื”ื–ืจื ื”ื ื›ื ืก. ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ื”ื•ืง ื–ืจื™ืžื” ืžืฉืœืš (ื›ื›ื™ืชื”) ื•ืœืขืฉื•ืช ืžื” ืฉืืชื”
ืจื•ืฆื” ืขื ื”ื–ืจื ื”ื ื›ื ืก. Circus ืžืกืคืง ื›ืžื” ืฉื™ืขื•ืจื™ ื–ืจื ืžื•ื‘ื ื™ื ื›ืžื•
StdoutStream, ื–ืจื ืงื•ื‘ืฅ, WatchedFileStream, ืื• TimedRotatingFileStream.

ืงืจืงืก ืœ Ops
ืื–ื”ืจื”:
ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, Circus ืื™ื ื• ืžืื‘ื˜ื— ืืช ื”ื”ื•ื“ืขื•ืช ืฉืœื• ื‘ืขืช ืฉืœื™ื—ืช ืžื™ื“ืข ื“ืจืš ZeroMQ.
ืœืคื ื™ ื”ืคืขืœืช Circus ื‘ืกื‘ื™ื‘ืช ื”ืคืงื”, ื”ืงืคื“ ืœืงืจื•ื ืืช ื“ืฃ ื”ืื‘ื˜ื—ื”.

ื”ืฆืขื“ ื”ืจืืฉื•ืŸ ืœื ื™ื”ื•ืœ ื“ืžื•ืŸ ืกื™ืจืงื•ืก ื”ื•ื ืœื›ืชื•ื‘ ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœื•. ืœึดืจึฐืื•ึนืช
ืชึฐืฆื•ึผืจึธื”. ืื ืืชื” ืคื•ืจืก ืขืจื™ืžืช ืื™ื ื˜ืจื ื˜, ืขื™ื™ืŸ ื‘ืฉืงืขื™ื.

ื ื™ืชืŸ ืœืคืจื•ืก ืืช Circus ื‘ืืžืฆืขื•ืช Python 2.6, 2.7, 3.2 ืื• 3.3 - ืจื•ื‘ ื”ืคืจื™ืกื•ืช ื‘ื—ื•ืฅ
ื ืขืฉื” ื‘-2.7. ื›ื“ื™ ืœืœืžื•ื“ ื›ื™ืฆื“ ืœืคืจื•ืก ืืช Circus, ื‘ื“ื•ืง ืืช ื”ืคืจื™ืกื”.

ื›ื“ื™ ืœื ื”ืœ ื“ืžื•ืŸ ืงืจืงืก, ืขืœื™ืš ืœื”ื›ื™ืจ ืืช ืจืฉื™ืžืช ื”ืคืงื•ื“ื•ืช ืฉื‘ื”ืŸ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ
in circusctl. ืฉื™ื ืœื‘ ืฉืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ืื•ืชื” ืขื–ืจื” ื‘ืื™ื ื˜ืจื ื˜ ื›ืฉืืชื” ืจืฅ circusctl ื‘ืชื•ืจ
ืฆื“ืฃ.

ืื ื• ืžืกืคืงื™ื ื’ื ื˜ื•ืค ืงืจืงืก, ืจืื” cli ื•ืœื•ื— ืžื—ื•ื•ื ื™ื ืื™ื ื˜ืจื ื˜ื™ ื ื—ืžื“. ืจืื” circushttpd.

ืœื‘ืกื•ืฃ, ื›ื“ื™ ืœื”ืคื™ืง ืืช ื”ืžืจื‘ ืžืกื™ืจืงื•ืก, ื”ืงืคื“ ืœื‘ื“ื•ืง ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ืชื•ืกืคื™ื ื•ื‘-hooks.
ืจืื” ืชื•ืกืคื™ื ื•ื”ื•ืงืก.

Ops ืชื™ืขื•ื“ ืžื“ื“
ืชึฐืฆื•ึผืจึธื”
ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช Circus ื‘ืืžืฆืขื•ืช ืงื•ื‘ืฅ ืชืฆื•ืจื” ื‘ืกื’ื ื•ืŸ ini.

ื“ื•ื’ืžื:

[ืงืจืงืก]
check_delay = 5
ื ืงื•ื“ืช ืงืฆื” = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
include = \*.more.config.ini
umask = 002

[ืฆื•ืคื”:ื”ืชื•ื›ื ื™ืช ืฉืœื™]
cmd = ืคื™ืชื•ืŸ
args = -u myprogram.py $(circus.wid) $(CIRCUS.ENV.VAR)
delay_warmup = 0
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 5

# ื•ื•
hooks.before_start = my.hooks.control_redis

# ื™ื“ื—ื•ืฃ ื‘-test.log ืืช ื”ื–ืจื ื›ืœ 300 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”
stdout_stream.class = FileStream
stdout_stream.filename = test.log

# ืื•ืคืฆื™ื•ื ืœื™ ืœืกื•ื‘ื‘ ืืช ืงื•ื‘ืฅ ื”ื™ื•ืžืŸ ื›ืืฉืจ ื”ื•ื ืžื’ื™ืข ืœ-1 GB
# ื•ืฉืžื•ืจ 5 ืขื•ืชืงื™ื ืฉืœ ืงื‘ืฆื™ื ืžืกื•ื‘ื‘ื™ื
stdout_stream.max_bytes = 1073741824
stdout_stream.backup_count = 5

[env:myprogram]
PATH = $PATH:/ ืกืœ
ืขื•ื’ื” = ืฉืงืจ

[plugin:statsd]
use = circus.plugins.statsd.StatsdEmitter
ืžืืจื— = ืžืืจื— ืžืงื•ืžื™
ื™ืฆื™ืื” = 8125
sample_rate = 1.0
application_name = ื“ื•ื’ืžื”

[socket:web]
ืžืืจื— = ืžืืจื— ืžืงื•ืžื™
ื™ืฆื™ืื” = 8080

ืงืจืงืก - ื™ื—ื™ื“ ืกืขื™ืฃ
ื ืงื•ื“ืช ืกื™ื•ื
ืฉืงืข ZMQ ื”ืžืฉืžืฉ ืœื ื™ื”ื•ืœ Circus ื‘ืืžืฆืขื•ืช circusctl. (ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ:
tcp://127.0.0.1:5555)

endpoint_owner
ืื ืžื•ื’ื“ืจ ื‘ืฉื ืžืฉืชืžืฉ ืžืขืจื›ืช ื•ื ืงื•ื“ืช ื”ืงืฆื” ื”ื™ื ืฉืงืข ipc ื›ืžื•
ipc://var/run/circusd.sock, ืื– ื”ื‘ืขืœื•ืช ืขืœ ืงื•ื‘ืฅ ื”-socket ืชืฉืชื ื” ืœ
ืื•ืชื• ืžืฉืชืžืฉ ื‘ืขืช ื”ื”ืคืขืœื”. ืœืคืจื˜ื™ื ื ื•ืกืคื™ื, ืจืื” ืื‘ื˜ื—ื”. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

pubsub_endpoint
ืฉืงืข PUB/SUB ืฉืœ ZMQ ืžืงื‘ืœ ืคืจืกื•ืžื™ื ืฉืœ ืื™ืจื•ืขื™ื. (ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ:
tcp://127.0.0.1:5556)

papa_endpoint
ืื ืืชื” ืžืฉืชืžืฉ ื‘-papa, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื ืงื•ื“ืช ื”ืงืฆื”, ื›ื’ื•ืŸ ipc://var/run/circusd.sock.
(ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ: tcp://127.0.0.1:20202)

ืกื˜ื˜ื™ืกื˜ื™ืงื” ืื ืžื•ื’ื“ืจ ื›-True, Circus ืžืจื™ืฅ ืืช ื“ืžื•ืŸ circusd-stats. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

stats_endpoint
ืฉืงืข PUB/SUB ืฉืœ ZMQ ืžืงื‘ืœ ืคืจืกื•ืžื™ื ืฉืœ ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช. (ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ:
tcp://127.0.0.1:5557)

statsd_close_outputs
If True ืฉื•ืœื— ืืช circusd-stats stdout/stderr ืืœ /dev/null. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

check_delay
ืžืจื•ื•ื— ื”ืกืงืจ ื‘ืฉื ื™ื•ืช ืขื‘ื•ืจ ืฉืงืข ZMQ. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 5)

ืœื›ืœื•ืœ
ืจืฉื™ืžื” ืฉืœ ืงื‘ืฆื™ ืชืฆื•ืจื” ืฉื™ืฉ ืœื›ืœื•ืœ. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืชื•ื•ื™ื ื›ืœืœื™ื™ื (*) ืœื›ืœื•ืœ ืคืจื˜
ืกื›ื™ืžื•ืช ืขื‘ื•ืจ ื”ืงื‘ืฆื™ื ืฉืœืš. ื”ื ืชื™ื‘ื™ื ื”ื ืžื•ื—ืœื˜ื™ื ืื• ื™ื—ืกื™ื™ื ืœืงื•ื‘ืฅ ื”ืชืฆื•ืจื”.
(ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

include_dir
ืจืฉื™ืžืช ืกืคืจื™ื•ืช ืชืฆื•ืจื”. ื›ืœ ื”ืงื‘ืฆื™ื ืชื•ืืžื™ื *.ini ืžืชื—ืช ืœื›ืœ ืกืคืจื™ื™ื”
ืœื”ื™ื›ืœืœ. ื”ื ืชื™ื‘ื™ื ื”ื ืžื•ื—ืœื˜ื™ื ืื• ื™ื—ืกื™ื™ื ืœืงื•ื‘ืฅ ื”ืชืฆื•ืจื”. (ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ:
ืืฃ ืื—ื“)

stream_backend
ืžื’ื“ื™ืจ ืืช ืกื•ื’ ื”ืงืฆื” ื”ืขื•ืจืคื™ ืœืฉื™ืžื•ืฉ ืขื‘ื•ืจ ื”ืกื˜ืจื™ืžื™ื ื’. ืขืจื›ื™ื ืืคืฉืจื™ื™ื ื”ื ื—ื•ื˜
or gavt. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืฉืจืฉื•ืจ)

ืขื™ื›ื•ื‘_ื—ื™ืžื•ื
ื”ืžืจื•ื•ื— ื‘ืฉื ื™ื•ืช ื‘ื™ืŸ ืฉื ื™ ืฆื•ืคื™ื ืžืชื—ื™ืœ. ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืื™ื ื˜. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 0)

httpd ืื ืžื•ื’ื“ืจ ื›-True, Circus ืžืจื™ืฅ ืืช ื“ืžื•ืŸ circushttpd. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

httpd_host
ื”ืžืืจื— ืจืฅ ืขืœ ื™ื“ื™ ื”ื“ืžื•ืŸ circushttpd. (ื‘ืจื™ืจืช ืžื—ื“ืœ: localhost)

httpd_port
ื”ื ืžืœ ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ ื”ื“ืžื•ืŸ circushttpd. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 8080)

httpd_close_outputs
ืื ื ื›ื•ืŸ, ืฉื•ืœื— ืืช ื”-circushttpd stdout/stderr ืืœ /dev/null. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ื‘ืื’ื™ื ืื ืžื•ื’ื“ืจ ื›-True, ื›ืœ ื”ื“ืžื•ื ื™ื ืฉืœ Circus stout/stderr ืžื ื•ืชื‘ื™ื ืœ-circusd
stdout/stderr (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

debug_gc
ืื ืžื•ื’ื“ืจ ื›-True, circusd ืžื•ืฆื™ื ืžื™ื“ืข ื™ื•ืžืŸ ื ื•ืกืฃ ืžืื•ืกืคืŸ ื”ืืฉืคื”.
ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ื‘ืžืขืงื‘ ืื—ืจ ื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

pidfile
ื”ืงื•ื‘ืฅ ืฉื™ืฉ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ื”-demon pid.

ืื•ืžืกืง ืขืจืš ืขื‘ื•ืจ umask. ืื ืœื ืžื•ื’ื“ืจ, circusd ืœื ื™ื ืกื” ืœืฉื ื•ืช ืืช umask.

ืจืžืช ื™ื•ืžืŸ
ืจืžืช ื”ื™ื•ืžืŸ ืฉืื ื• ืจื•ืฆื™ื ืœืจืื•ืช (ื‘ืจื™ืจืช ืžื—ื“ืœ: INFO)

ืคืœื˜ ืœื•ื’ื•
ืงื•ื‘ืฅ ื”ืคืœื˜ ืฉื‘ื• ืื ื• ืจื•ืฆื™ื ืœื”ื™ื›ื ืก (ื‘ืจื™ืจืช ืžื—ื“ืœ: - ื›ื“ื™ ืœื”ื™ื›ื ืก ืœ-stdout). ืืชื” ื™ื›ื•ืœ
ื”ืชื—ื‘ืจ ืœ-syslog ืžืจื•ื—ืง ื‘ืืžืฆืขื•ืช ื”ืชื—ื‘ื™ืจ ื”ื‘ื:
syslog://host:port?facility ื›ืืฉืจ ื”ืžืืจื— ื”ื•ื ืฉืจืช ื”-syslog ืฉืœืš, ื”ื™ืฆื™ืื” ื”ื™ื ืื•ืคืฆื™ื•ื ืœื™ืช
ื•-facility ื”ื•ื ืžืชืงืŸ ื”-syslog ืœืฉื™ืžื•ืฉ. ืื ื‘ืจืฆื•ื ืš ืœื”ื™ื›ื ืก ืœ-syslog ืžืงื•ืžื™
ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ syslog:///path/to/syslog/socket?facility ื‘ืžืงื•ื.

loggerconfig
ื ืชื™ื‘ ืœืงื•ื‘ืฅ INI, JSON ืื• YAML ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืจื™ืฉื•ื Python ืกื˜ื ื“ืจื˜ื™ ืขื‘ื•ืจ
ืคึผื•ึนืกึตืง. ื”ืขืจืš ื”ืžื™ื•ื—ื“ "ื‘ืจื™ืจืช ืžื—ื“ืœ" ืžืฉืชืžืฉ ื‘ืชืฆื•ืจืช ื”ืจื™ืฉื•ื ื”ืžื•ื‘ื ื™ืช
ื‘ื”ืชื‘ืกืก ืขืœ ืืคืฉืจื•ื™ื•ืช ื”ื™ื•ืžืŸ ื”ืื•ืคืฆื™ื•ื ืœื™ื•ืช ื•ืืคืฉืจื•ื™ื•ืช ืคืœื˜ ืœื•ื’ื•.

ื“ื•ื’ืžื” ื™ืžืœ ืชึฐืฆื•ึผืจึธื” ืฉืœื—

ื’ืจืกื”: 1
disable_existing_loggers: false
ืžืขืฆื‘ื™ื:
ื”ืคืฉ you
ืคื•ืจืžื˜: '%(asctime)s - %(name)s - [%(levelname)s] %(message)s'
ืžื˜ืคืœื™ื:
ืงื•ื‘ืฅ ืœื•ื’:
ืžื—ืœืงื”: logging.FileHandler
ืฉื ื”ืงื•ื‘ืฅ: logoutput.txt
ืจืžื”: DEBUG
ืคื•ืจืžื˜: ืคืฉื•ื˜
ื›ื•ืจืชื™ื:
ืงืจืงืก:
ืจืžื”: DEBUG
ืžื˜ืคืœื™ื: [logfile]
ืœื”ืคื™ืฅ: ืœื
ืฉื•ืจืฉ:
ืจืžื”: DEBUG
ืžื˜ืคืœื™ื: [logfile]

ืฆื•ืคื”:NAME - as ืจื‘ ืกืขื™ืคื™ื as ืืชื” ืจื•ืฆื”
ืฉืึตื ืฉื ื”ืฆื•ืคื”. ืฉื ื–ื” ืžืฉืžืฉ ื‘ circusctl

cmd ืชื•ื›ื ื™ืช ื”ื”ืคืขืœื” ืœื”ืคืขืœื”.

ื˜ื•ืขืŸ ืืจื’ื•ืžื ื˜ื™ื ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ืœื”ืขื‘ื™ืจ ืœืชื•ื›ื ื™ืช. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคื•ืจืžื˜ python
ืชื—ื‘ื™ืจ ื›ืืŸ ื›ื“ื™ ืœื‘ื ื•ืช ืืช ื”ืคืจืžื˜ืจื™ื. ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ื–ืžื™ื ื™ื, ื›ืžื•
ื›ืžื• ื’ื ืžื–ื”ื” ื”ืขื•ื‘ื“ ื•ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืฉื”ืขื‘ืจืช, ืื ื™ืฉ,
ืขื ื”ืคืจืžื˜ืจ "env". ืœึดืจึฐืื•ึนืช ืขื™ืฆื•ื‘ ืžื” ื”ื™ื ืคืงื•ื“ื•ืช ื• ื˜ื™ืขื•ื ื™ื ืขื ื“ื™ื ืžื™
ืžืฉืชื ื™ื ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื–ื”.

ืคึผึธื’ึธื– ืื ื ื›ื•ืŸ, ื”ืชื”ืœื™ื›ื™ื ืžื•ืคืขืœื™ื ื‘ืžืขื˜ืคืช (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

shell_args
ืืจื’ื•ืžื ื˜ื™ื ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ืœื”ืขื‘ื™ืจ ืœืคืงื•ื“ืช ื”ืžืขื˜ืคืช ื›ืืฉืจ ืคึผึธื’ึธื– ื ื›ื•ืŸ. ืขื•ื‘ื“
ืจืง ืขื‘ื•ืจ ืžืขืจื›ืช *nix (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

working_dir
ืžื ื”ืœ ื”ืขื‘ื•ื“ื” ืฉืœ ื”ืชื”ืœื™ื›ื™ื (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

uid ืžื–ื”ื” ื”ืžืฉืชืžืฉ ืื• ื”ืฉื ืฉืื™ืชื• ื”ืคืงื•ื“ื” ืืžื•ืจื” ืœืคืขื•ืœ. (ื”-uid ื”ื ื•ื›ื—ื™ ื”ื•ื
ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ).

gid ืžื–ื”ื” ื”ืงื‘ื•ืฆื” ืื• ื”ืฉื ืฉืื™ืชื• ื”ืคืงื•ื“ื” ืืžื•ืจื” ืœืคืขื•ืœ. (ื”-Gid ื”ื ื•ื›ื—ื™ ื”ื•ื ื”
ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ).

copy_env
ืื ืžื•ื’ื“ืจ ื›-true, ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื”ืžืงื•ืžื™ืช ื™ื•ืขืชืงื• ื•ื™ืขื‘ืจื• ืœ-
ืขื•ื‘ื“ื™ื ื›ืฉื”ื ืžื˜ื™ืœื™ื ืื•ืชื. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

copy_path
ืื ืžื•ื’ื“ืจ ื›-true, sys.path ืžื•ืขื‘ืจ ื‘ืกื‘ื™ื‘ืช ืชืช-ื”ืชื”ืœื™ืš ื‘ืืžืฆืขื•ืช PYTHONPATH.
copy_env ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื ื›ื•ืŸ. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ืขื™ื›ื•ื‘_ื—ื™ืžื•ื
ื”ื”ืฉื”ื™ื” (ื‘ืฉื ื™ื•ืช) ื‘ื™ืŸ ืชื”ืœื™ื›ื™ื ื”ืคื•ืขืœื™ื.

ื”ืชื—ืœื” ืื•ื˜ื•ืžื˜ื™ืช
ืื ื”ื•ื’ื“ืจ ื›-false, ื”ืฆื•ืคื” ืœื ื™ื•ืคืขืœ ืื•ื˜ื•ืžื˜ื™ืช ื›ืืฉืจ ื”ื‘ื•ืจืจ
ืžืชื—ื™ืœ. ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืืช ื”ืฆื•ืคื” ื‘ืžืคื•ืจืฉ (ืœื“ื•ื’ืžื”: circusctrl ื”ืชื—ืœื”
ื”ืชื•ื›ื ื™ืช ืฉืœื™). (ื‘ืจื™ืจืช ืžื—ื“ืœ: ื ื›ื•ืŸ)

ืžืกืคืจ ืชื”ืœื™ื›ื™ื
ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ืœื”ืคืขื™ืœ ืขื‘ื•ืจ ื”ืฆื•ืคื” ื”ื–ื”.

rlimit_LIMIT
ื”ื’ื“ืจ ืžื’ื‘ืœืช ืžืฉืื‘ื™ื LIMIT ืขื‘ื•ืจ ื”ืชื”ืœื™ื›ื™ื ืฉื ืฆืคื•. ืฉื ื”ืชืฆื•ืจื” ืฆืจื™ืš ืœื”ืชืื™ื
ื”ืงื‘ื•ืขื™ื RLIMIT_* (ืœื ืชืœื•ื™ื™ ืจื™ืฉื™ื•ืช) ื”ืจืฉื•ืžื™ื ื‘- ืคื™ืชื•ืŸ ืžืฉืื‘ ืžื•ื“ื•ืœ
ื”ืคื ื™ื”. ืœื“ื•ื’ืžื”, ืฉื•ืจืช ื”ืชืฆื•ืจื” 'rlimit_nofile = 500' ืžื’ื“ื™ืจื” ืืช ื”ืžืงืกื™ืžื•ื
ืžืกืคืจ ื”ืงื‘ืฆื™ื ื”ืคืชื•ื—ื™ื ืœ-500. ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืขืจืš ืžื’ื‘ืœื” ืœ-RLIM_INFINITY, ืืœ ืชื’ื“ื™ืจ
ืขืจืš, ื›ืžื• ืฉื•ืจืช ื”ืชืฆื•ืจื” ื”ื–ื•: 'rlimit_nofile = '.

stderr_stream.class
ืฉื ื›ื™ืชืช Python ืžื•ืกืžืš ื‘ืžืœื•ืื• ืฉื™ื•ืฆื’ ื•ื™ืงื‘ืœ
ืžื” ื”ื™ื ืกื˜ื“ืจืจ ื–ืจื ืฉืœ ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ื” __ืฉื‚ึดื™ื—ึธื”__() ืฉืึดื™ื˜ึธื”.

Circus ืžืกืคืง ื›ืžื” ืฉื™ืขื•ืจื™ ื–ืจื ืฉื‘ื”ื ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืœืœื ืงื™ื“ื•ืžืช:

ยท ื–ืจื ืงื•ื‘ืฅ: ื›ื•ืชื‘ ื‘ืงื•ื‘ืฅ ื•ื™ื›ื•ืœ ืœื‘ืฆืข ืกื™ื‘ื•ื‘ ื™ื•ืžืŸ ืื•ื˜ื•ืžื˜ื™

ยท WatchedFileStream: ื›ื•ืชื‘ ื‘ืงื•ื‘ืฅ ื•ืžืกืชืžืš ืขืœ ืกื™ื‘ื•ื‘ ื™ื•ืžืŸ ื—ื™ืฆื•ื ื™

ยท TimedRotatingFileStream: ื›ื•ืชื‘ ื‘ืงื•ื‘ืฅ ื•ื™ื›ื•ืœ ืœืกื•ื‘ื‘ ื‘ื–ืžืŸ ืžืกื•ื™ื
ืžืจื•ื•ื—ื™ื.

ยท QueueStream: ื›ืชื•ื‘ ื‘ืชื•ืจ ื–ื™ื›ืจื•ืŸ

ยท StdoutStream: ื›ื•ืชื‘ ื‘-stdout

ยท FancyStdoutStream: ื›ื•ืชื‘ ืคืœื˜ ืฆื‘ืขื•ื ื™ ืขื ืงื™ื“ื•ืžื•ืช ื–ืžืŸ ื‘-stdout

stderr_stream.*
ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ื—ืœ ืž stderr_stream. ืื—ืจ ืžืืฉืจ ื‘ื›ื™ืชื” ื™ืขื‘ื•ืจ ืืช
ื‘ื ืื™ ื‘ืขืช ื™ืฆื™ืจืช ืžื•ืคืข ืฉืœ ื”ืžื—ืœืงื” ื”ืžื•ื’ื“ืจืช ื‘
stderr_stream.class.

stdout_stream.class
ืฉื ื›ื™ืชืช Python ืžื•ืกืžืš ื‘ืžืœื•ืื• ืฉื™ื•ืฆื’ ื•ื™ืงื‘ืœ
ืžื” ื”ื™ื stdout ื–ืจื ืฉืœ ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ื” __ืฉื‚ึดื™ื—ึธื”__() ืฉืึดื™ื˜ึธื”.

Circus ืžืกืคืง ื›ืžื” ืฉื™ืขื•ืจื™ ื–ืจื ืฉื‘ื”ื ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืœืœื ืงื™ื“ื•ืžืช:

ยท ื–ืจื ืงื•ื‘ืฅ: ื›ื•ืชื‘ ื‘ืงื•ื‘ืฅ ื•ื™ื›ื•ืœ ืœื‘ืฆืข ืกื™ื‘ื•ื‘ ื™ื•ืžืŸ ืื•ื˜ื•ืžื˜ื™

ยท WatchedFileStream: ื›ื•ืชื‘ ื‘ืงื•ื‘ืฅ ื•ืžืกืชืžืš ืขืœ ืกื™ื‘ื•ื‘ ื™ื•ืžืŸ ื—ื™ืฆื•ื ื™

ยท TimedRotatingFileStream: ื›ื•ืชื‘ ื‘ืงื•ื‘ืฅ ื•ื™ื›ื•ืœ ืœืกื•ื‘ื‘ ื‘ื–ืžืŸ ืžืกื•ื™ื
ืžืจื•ื•ื—ื™ื.

ยท QueueStream: ื›ืชื•ื‘ ื‘ืชื•ืจ ื–ื™ื›ืจื•ืŸ

ยท StdoutStream: ื›ื•ืชื‘ ื‘-stdout

ยท FancyStdoutStream: ื›ื•ืชื‘ ืคืœื˜ ืฆื‘ืขื•ื ื™ ืขื ืงื™ื“ื•ืžื•ืช ื–ืžืŸ ื‘-stdout

stdout_stream.*
ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ื—ืœ ืž stdout_stream. ืื—ืจ ืžืืฉืจ ื‘ื›ื™ืชื” ื™ืขื‘ื•ืจ ืืช
ื‘ื ืื™ ื‘ืขืช ื™ืฆื™ืจืช ืžื•ืคืข ืฉืœ ื”ืžื—ืœืงื” ื”ืžื•ื’ื“ืจืช ื‘
stdout_stream.class.

close_child_stdout
ืื ืžื•ื’ื“ืจ ื›-True, ื–ืจื ื”-stdout ืฉืœ ื›ืœ ืชื”ืœื™ืš ื™ื™ืฉืœื— ืืœ /dev/null
ืื—ืจื™ ื”ืžื–ืœื’. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœ-False.

close_child_stderr
ืื ืžื•ื’ื“ืจ ื›-True, ื–ืจื stderr ืฉืœ ื›ืœ ืชื”ืœื™ืš ื™ื™ืฉืœื— ืืœ /dev/null
ืื—ืจื™ ื”ืžื–ืœื’. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœ-False.

ืฉืœื—_ื”ืค
ืื ื ื›ื•ืŸ, ื˜ืขื™ื ืช ืชื”ืœื™ืš ืžื—ื“ืฉ ืชืชื‘ืฆืข ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื”ืื•ืช SIGHUP. ื‘ืจื™ืจื•ืช ืžื—ื“ืœ
ืœืฉืงืจ.

ืื•ืช_ืขืฆื™ืจื”
ื”ืื•ืช ืฉื™ืฉ ืœืฉืœื•ื— ื‘ืขืช ืขืฆื™ืจืช ื”ืชื”ืœื™ืš. ื ื™ืชืŸ ืœืฆื™ื™ืŸ ื›ืžืกืคืจ ืื• ื
ืฉื ื”ืื•ืช. ืฉืžื•ืช ื”ืื•ืชื•ืช ืื™ื ื ืชืœื•ื™ื™ ืจื™ืฉื™ื•ืช ื•ื™ื›ื•ืœื™ื ืœื›ืœื•ืœ 'SIG' ืื• ืœื. ืœื›ืŸ
ื“ื•ื’ืžืื•ืช ืชืงืคื•ืช ื›ื•ืœืœื•ืช ืœื”ืคืกื™ืง, INT, ื˜ื•ื•ื— ื™ืขื“ ื• 3. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื SIGTERM.

ืขืฆื•ืจ_ื™ืœื“ื™ื
ื‘ืขืช ืฉืœื™ื—ืช ื” ืื•ืช_ืขืฆื™ืจื”, ืฉืœื— ืื•ืชื• ื’ื ืœื™ืœื“ื™ื. ื‘ืจื™ืจืช ืžื—ื“ืœ ืœ
ืฉืงืจ.

max_retry
ืžืกืคืจ ื”ืคืขืžื™ื ืฉืื ื• ืžื ืกื™ื ืœื”ืชื—ื™ืœ ืชื”ืœื™ืš, ืœืคื ื™ ืฉืื ื• ื ื•ื˜ืฉื™ื ื•ืžืคืกื™ืงื™ื
ื›ืœ ื”ืฆื•ืคื”. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 5. ื”ื’ื“ืจ ืœ-1 ื›ื“ื™ ืœื”ืฉื‘ื™ืช ืืช max_retry ื•ืœื ืกื•ืช ืฉื•ื‘
ืœืœื ื”ื’ื‘ืœืช ื–ืžืŸ.

ืคืกืง ื–ืžืŸ_ื—ื™ื ื ื™
ืžืกืคืจ ื”ืฉื ื™ื•ืช ืฉื™ืฉ ืœื”ืžืชื™ืŸ ืขื“ ืฉืชื”ืœื™ืš ื™ืกืชื™ื™ื ื‘ื—ืŸ ืœืคื ื™ ื›ืŸ
ื”ื•ืจื’ ืืช ื–ื”.

ื›ืืฉืจ ืขื•ืฆืจื™ื ืชื”ืœื™ืš, ืื ื• ืงื•ื“ื ื›ืœ ืฉื•ืœื—ื™ื ืœื• ื ืื•ืช_ืขืฆื™ืจื”. ืขื•ื‘ื“ ืขืœื•ืœ ืœืชืคื•ืก ืืช ื–ื”
ืกื™ืžืŸ ืœื‘ืฆืข ืคืขื•ืœื•ืช ื ื™ืงื•ื™ ืœืคื ื™ ื”ื™ืฆื™ืื”. ืื ื”ืขื•ื‘ื“ ื“ื•ืžื
ืคืขื™ืœ ืœืื—ืจ ืฉื ื™ื•ืช Graceful_timeout, ืื ื• ืฉื•ืœื—ื™ื ืœื• ืื•ืช SIGKILL. ื–ื” ืœื
ืืคืฉืจ ืœืชืคื•ืก ืื•ืชื•ืช SIGKILL ื›ืš ืฉื”ืขื•ื‘ื“ ื™ืคืกื™ืง.

ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืฉื ื•ืช ื”-30.

ืขื“ื™ืคื•ืช
ืžืกืคืจ ืฉืœื ืฉืžื’ื“ื™ืจ ืขื“ื™ืคื•ืช ืœืฆื•ืคื”. ื›ืฉื”ื‘ื•ืจืจ ื™ืขืฉื” ืงืฆืช
ืคืขื•ืœื•ืช ืขืœ ื›ืœ ื”ืฆื•ืคื™ื, ื–ื” ื™ืžื™ื™ืŸ ืื•ืชื ืขื ื”ืฉื“ื” ื”ื–ื”, ืžื”ื’ื“ื•ืœ ื™ื•ืชืจ
ืžืกืคืจ ืœืงื˜ืŸ ื‘ื™ื•ืชืจ. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 0.

ืงึฐืœึธืฃ ื‘ึผื•ึนื“ึตื“
ืื ืžื•ื’ื“ืจ ื›-True, ืœืฆื•ืคื” ื”ื–ื” ื™ื”ื™ื” ืชื”ืœื™ืš ืื—ื“ ืœื›ืœ ื”ื™ื•ืชืจ. ื‘ืจื™ืจืช ืžื—ื“ืœ ืœ
ืฉืงืจ.

use_sockets
ืื ืžื•ื’ื“ืจ ื›-True, ื”ืฆื•ืคื” ื”ื–ื” ื™ื•ื›ืœ ืœื’ืฉืช ืœืฉืงืขื™ื ืžื•ื’ื“ืจื™ื ื“ืจืš ืฉืœื”ื
ืžืชืืจื™ ืงื‘ืฆื™ื. ืื False, ื›ืœ ื”-Fds ืฉืœ ื”ื”ื•ืจื™ื ืกื’ื•ืจื™ื ื›ืืฉืจ ืชื”ืœื™ืš ื”ืฆืืฆื ืžืชื‘ืฆืข
ืžึฐืคื•ึผืฆึธืœ. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœ-False.

max_age
ืื ืžื•ื’ื“ืจ, ื”ืชื”ืœื™ืš ื™ื•ืคืขืœ ืžื—ื“ืฉ ืžืชื™ืฉื”ื• ืœืื—ืจ ืฉื ื™ื•ืช max_age. ื–ึถื”
ืฉื™ืžื•ืฉื™ ื›ืืฉืจ ืชื”ืœื™ื›ื™ื ืขื•ืกืงื™ื ื‘ืžืื’ืจ ืฉืœ ืžื—ื‘ืจื™ื: ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ืชื”ืœื™ื›ื™ื
ืžืฉืคืจ ืืช ืื™ื–ื•ืŸ ื”ืขื•ืžืก. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœื”ื™ื•ืช ืžื•ืฉื‘ืช.

max_age_variance
ืื max_age ืžื•ื’ื“ืจ, ื”ืชื”ืœื™ืš ื™ืชืงื™ื™ื ื‘ื™ืŸ max_age ืœื‘ื™ืŸ max_age +
random(0, max_age_variance) ืฉื ื™ื•ืช. ื–ื” ื™ืžื ืข ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืขื‘ื•ืจ ื
ืฆื•ืคื” ื‘ื‘ืช ืื—ืช. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 30 ืฉื ื™ื•ืช.

ืœืคื™ ื“ืจื™ืฉื”
ืื ืžื•ื’ื“ืจ ื›-True, ื”ืชื”ืœื™ื›ื™ื ื™ื•ืคืขืœื• ืจืง ืœืื—ืจ ื”ื—ื™ื‘ื•ืจ ื”ืจืืฉื•ืŸ ืืœ
ืื—ื“ ืžื”ืฉืงืขื™ื ื”ืžื•ื’ื“ืจื™ื (ืจืื” ืœื”ืœืŸ). ืื ื™ืฉ ืฆื•ืจืš ื‘ื”ืคืขืœื” ืžื—ื“ืฉ, ื–ื” ื™ื”ื™ื”
ืžื•ืคืขืœ ืจืง ื‘ืื™ืจื•ืข ื”ืฉืงืข ื”ื‘ื.

ื•ื•ื™ื.*
ื•ื•ื™ื ื–ืžื™ื ื™ื: ืœืคื ื™_ื”ืชื—ืœ, after_start, before_spawn, after_spawn,
ืœืคื ื™_ืขืฆื•ืจ, after_stop, ืœืคื ื™_ืื•ืช, ืื—ืจื™_ืื•ืช, ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช_ืžื•ืจื—ื‘ื•ืช

ื”ื’ื“ืจ ืคื•ื ืงืฆื™ื•ืช ื”ืชืงืฉืจื•ืช ื—ื•ื–ืจื•ืช ื”ืžืชื—ื‘ืจื•ืช ืœืชื”ืœื™ืš ื”ื”ืคืขืœื”/ื›ื™ื‘ื•ื™ ืฉืœ ื”ืฆื•ืคื”.

ืื ื”ืงืจืก ื—ื•ื–ืจ ืœื ื ื›ื•ืŸ ื•ืื ื”ื•ื• ื”ื•ื ืื—ื“ ืž ืœืคื ื™_ื”ืชื—ืœ, before_spawn,
after_start or after_spawn, ื”ื”ืคืขืœื” ืชื‘ื•ื˜ืœ.

ืื ื”ืงืจืก ื”ื•ื ืœืคื ื™_ืื•ืช ื•ื—ื•ื–ืจ ืœื ื ื›ื•ืŸ, ื•ืื– ื”ืื•ืช ื”ืžืชืื™ื
ืœื ื™ื™ืฉืœื— (ืœืžืขื˜ SIGKILL ืฉื ืฉืœื— ืชืžื™ื“)

ืฉื™ืžื• ืœื‘ ืฉื”ื•ื• ืฉื ื›ืฉืœ ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ืขืฆื™ืจื” ืœื ื™ื‘ื˜ืœ ืื•ืชื•.

ื ื™ืชืŸ ืœืขืงื•ื‘ ืื—ืจื™ ื”ื’ื“ืจืช ื”ื”ืชืงืฉืจื•ืช ื—ื–ืจื” ื“ื’ืœ ื‘ื•ืœื™ืื ื™ ืžื•ืคืจื“ ื‘ืคืกื™ืง.
ื›ืืฉืจ ื”ื“ื’ืœ ืžื•ื’ื“ืจ ืœ ื ึธื›ื•ึนืŸ, ืชืชืขืœื ืžื›ืœ ืฉื’ื™ืื” ืฉืชืชืจื—ืฉ ื‘-hook. ืื
ืžื›ื•ื•ืŸ ืœ ืฉืงืจ (ื‘ืจื™ืจืช ื”ืžื—ื“ืœ), ื”ื•ื• ื™ื—ื–ื•ืจ ืœื ื ื›ื•ืŸ.

ืขื•ื“ ืขืœ ื•ื•ื™ื.

ื•ื™ืจื˜ื•ืืœื™
ื›ืืฉืจ ืžืกื•ืคืง, ืžืฆื‘ื™ืข ืขืœ ื”ืฉื•ืจืฉ ืฉืœ ืกืคืจื™ื™ืช Virtualenv. ื”ืฆื•ืคื” ื™ืขืฉื” ื–ืืช
ืœืกืจื•ืง ืืช ื”ืžืงื•ืžื™ ื—ื‘ื™ืœื•ืช ืืชืจ ื•ื˜ื•ืขืŸ ืืช ืชื•ื›ื ื• ืœื‘ื™ืฆื•ืข
ืกื‘ื™ื‘ื”. ื™ืฉ ืœื”ืฉืชืžืฉ ืขื copy_env ืžื•ื’ื“ืจ ืœ-True. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœืœื.

virtualenv_py_ver
ืžืฆื™ื™ืŸ ืืช ื’ืจืกืช ื”-python ืฉืœ ื”-virtualenv (ืœืžืฉืœ "3.3"). ื–ื” ืฉื™ืžื•ืฉื™ ืื
ื”ืคืขืœืช ืงืจืงืก ืขื ื’ืจืกืช ืคื™ืชื•ืŸ ืื—ืจืช (ืœืžืฉืœ "2.7") ื”ืฆื•ืคื” ื™ืกืจื•ืง ืืช
ืžืงื•ืžื™ ื—ื‘ื™ืœื•ืช ืืชืจ ืฉืœ ื’ืจืกืช ื”ืคื™ืชื•ืŸ ืฉืฆื•ื™ื ื” ื•ื˜ืขืŸ ืืช ื”ืชื•ื›ืŸ ืฉืœื” ืœืชื•ืš
ืกื‘ื™ื‘ืช ื”ื‘ื™ืฆื•ืข. ื™ืฉ ืœื”ืฉืชืžืฉ ืขื ื•ื™ืจื˜ื•ืืœื™. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœืœื.

respawn
ืื ืžื•ื’ื“ืจ ื›-false, ื”ืชื”ืœื™ื›ื™ื ื”ืžื˜ื•ืคืœื™ื ืขืœ ื™ื“ื™ ืฆื•ืคื” ืœื ื™ื•ื—ื–ืจื•
ืื•ื˜ื•ืžื˜ื™ืช. ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืชื”ืœื™ื›ื™ื ื‘ืื•ืคืŸ ื™ื“ื ื™ ืขื ื”ืชื—ืœื” ืคืงื•ื“ื”.
(ื‘ืจื™ืจืช ืžื—ื“ืœ: ื ื›ื•ืŸ)

use_papa
ื”ื’ื“ืจ ืœ-true ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืื‘ื.

ืฉืงืข:NAME - as ืจื‘ ืกืขื™ืคื™ื as ืืชื” ืจื•ืฆื”
ื”ืžืืจื— ื”ืžืืจื— ืฉืœ ื”ืฉืงืข. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 'ืžืืจื— ืžืงื•ืžื™'

ื ืžืœ ื”ื ืžืœ. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 8080.

ืžืฉืคื—ื” ืžืฉืคื—ืช ื”ืฉืงืขื™ื. ื™ื›ื•ืœ ืœื”ื™ื•ืช 'AF_UNIX', 'AF_INET' ืื• 'AF_INET6'. ื‘ืจื™ืจืช ืžื—ื“ืœ ืœ
'AF_INET'.

ืกื•ื’ ืกื•ื’ ื”ืฉืงืข. ื™ื›ื•ืœ ืœื”ื™ื•ืช 'SOCK_STREAM', 'SOCK_DGRAM', 'SOCK_RAW', 'SOCK_RDM' ืื•
'SOCK_SEQPACKET'. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 'SOCK_STREAM'.

ืžืžืฉืง
ื›ืืฉืจ ืžืกื•ืคืง ืฉื ืžืžืฉืง ืจืฉืช ื›ืžื• 'eth0', ืžืงืฉืจ ืืช ื”ืฉืงืข ืœื–ื”
ืžื›ืฉื™ืจ ืžืกื•ื™ื ื›ืš ืฉืจืง ืžื ื•ืช ืžืชืงื‘ืœื•ืช ืžื”ืžืžืฉืง ื”ืžืกื•ื™ื ื”ื–ื”
ืžืขื•ื‘ื“ื™ื ืขืœ ื™ื“ื™ ื”ืฉืงืข. ื–ื” ื™ื›ื•ืœ ืœืฉืžืฉ ืœืžืฉืœ ื›ื“ื™ ืœื”ื’ื‘ื™ืœ ืื™ื–ื” ืžื›ืฉื™ืจ
ืœืื’ื“ ื‘ืขืช ื›ืจื™ื›ื” ื‘-IN_ADDR_ANY (0.0.0.0) ืื• IN_ADDR_BROADCAST
(255.255.255.255). ืฉื™ื ืœื‘ ืฉื–ื” ืขื•ื‘ื“ ืจืง ืขื‘ื•ืจ ืกื•ื’ื™ื ืžืกื•ื™ืžื™ื ืฉืœ ืฉืงืขื™ื, ื‘ืžื™ื•ื—ื“
ืฉืงืขื™ AF_INET.

ื ืชื™ื‘ ื›ืืฉืจ ืžืกื•ืคืง ื ืชื™ื‘ ืœืงื•ื‘ืฅ ืฉื™ืฉืžืฉ ื›ืงื•ื‘ืฅ ืฉืงืข ื™ื•ื ื™ืงืก. ืื
ื ืชื™ื‘ ืžืกื•ืคืง, ืžืฉืคื—ื” ื ืืœืฅ AF_UNIX ื• ื”ืžืืจื— ื• ื ืžืœ ืžืชืขืœืžื™ื.

ืื•ืžืกืง ื›ืืฉืจ ืžืกื•ืคืง, ืžื’ื“ื™ืจ ืืช ื”-umask ืฉืชืฉืžืฉ ืœื™ืฆื™ืจืช ืฉืงืข AF_UNIX. ืœ
ื“ื•ื’ืžื, umask=000 ื™ื™ืฆืจ ืฉืงืข ื‘ืื™ืฉื•ืจ 777.

ืœื”ื—ืœื™ืฃ
ื‘ืขืช ื™ืฆื™ืจืช ืฉืงืขื™ ื™ื•ื ื™ืงืก ('AF_UNIX'), ืงื•ื‘ืฅ ืงื™ื™ื ืขืฉื•ื™ ืœื”ืฆื‘ื™ืข ืขืœ ื‘ืขื™ื”
ืื– ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœื”ื™ื›ืฉืœ. ืœืคืจื˜ ื ึธื›ื•ึนืŸ ืคืฉื•ื˜ ืœื”ืกื™ืจ ืืช ื”ืงื•ื‘ืฅ ื”ื™ืฉืŸ ืื ื›ืŸ
ื‘ื˜ื•ื— ืฉื”ืฉืงืข ืžื ื•ื”ืœ ืจืง ืขืœ ื™ื“ื™ ืงืจืงืก.

so_reuseport
ืื ืžื•ื’ื“ืจ ื›-True ื•-SO_REUSEPORT ื–ืžื™ืŸ ื‘ืคืœื˜ืคื•ืจืžืช ื”ื™ืขื“, ื”ืงืจืงืก ื™ื”ื™ื”
ืฆื•ืจ ื•ืื’ื“ ืฉืงืข(ื™ื) SO_REUSEPORT ื—ื“ืฉื™ื ืขื‘ื•ืจ ื›ืœ ืขื•ื‘ื“ ืฉื”ื•ื ืžืคืขื™ืœ ืฉื”ื•ื ื
ืžืฉืชืžืฉ ื‘ืฉืงืข(ื™ื) ื–ื”.

use_papa
ื”ื’ื“ืจ ืœ-true ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืื‘ื.

ื‘ืจื’ืข ืฉื ื•ืฆืจ ืฉืงืข, ื” ${circus.sockets.NAME} ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืžื—ืจื•ื–ืช ื‘ืคืงื•ื“ื”
(cmd or ื˜ื•ืขืŸ) ืฉืœ ืฆื•ืคื”. ืงืจืงืก ื™ื—ืœื™ืฃ ืื•ืชื• ื‘ืขืจืš FD. ื’ื ื”ืฆื•ืคื” ื—ื™ื™ื‘
ื™ืฉ use_sockets ืžื›ื•ื•ืŸ ืœ ื ึธื›ื•ึนืŸ ืื—ืจืช ื”ืฉืงืข ื”ื™ื” ืกื’ื•ืจ ื•ืชืงื‘ืœ
ืฉื’ื™ืื•ืช ื›ืืฉืจ ื”ืฆื•ืคื” ืžื ืกื” ืœื”ืฉืชืžืฉ ื‘ื•.

ื“ื•ื’ืžื:

[watcher:webworker]
cmd = chaussette --fd $(circus.sockets.webapp) chaussette.util.bench_app
use_sockets = ื ื›ื•ืŸ

[socket:webapp]
ืžืืจื— = 127.0.0.1
ื™ืฆื™ืื” = 8888

ืชื•ืกืฃ:NAME - as ืจื‘ ืกืขื™ืคื™ื as ืืชื” ืจื•ืฆื”
ืœื”ืฉืชืžืฉ ื”ืฉื ื”ืžืœื ื”ืžืฆื‘ื™ืข ืขืœ ืžืขืžื“ ื”ืคืœืื’ื™ืŸ.

ื“ื‘ืจ ืื—ืจ
ื›ืœ ืžืคืชื— ืื—ืจ ืฉื ืžืฆื ื‘ืงื˜ืข ืžื•ืขื‘ืจ ืœื‘ื•ื ื” ื”ืคืœืื’ื™ืŸ ื‘-
config ืžื™ืคื•ื™.

ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœ ืืคืฉืจื•ื™ื•ืช ื”ืฆื•ืคื”, ืžื›ื™ื•ื•ืŸ ืฉืชื•ืกืฃ ืžื•ืคืขืœ ื›ืžื• ืฆื•ืคื”.

Circus ืžื’ื™ืข ืขื ื›ืžื” ืชื•ืกืคื™ื ืฉื ืฉืœื—ื• ืžืจืืฉ ืื‘ืœ ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืจื—ื™ื‘ ืื•ืชื ื‘ืงืœื•ืช ืขืœ ื™ื“ื™
ืœืคืชื— ืžืฉืœืš.

env or env[:WATCHERS] - as ืจื‘ ืกืขื™ืคื™ื as ืืชื” ืจื•ืฆื”
ื“ื‘ืจ
ืฉื ืžืฉืชื ื” ืกื‘ื™ื‘ื” ืœื”ืงืฆืืช ืขืจืš. ืกื‘ื™ื‘ื” ื‘ืกื’ื ื•ืŸ bash
ืชื—ืœื™ืคื™ื ื ืชืžื›ื™ื. ืœืžืฉืœ, ืœืฆืจืฃ / ืกืœ ืœ ื ืชื™ื‘ 'ื ืชื™ื‘ =
$PATH:/ ืกืœ'

ืžื“ื•ืจ ื”ืื—ืจืื™ ืขืœ ืืกืคืงืช ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ืœื”ืคืขืœืช ืชื”ืœื™ื›ื™ื.

ื“ื•ื’ืžื:

[watcher:worker1]
cmd = ping 127.0.0.1

[watcher:worker2]
cmd = ping 127.0.0.1

[env]
ืขื•ื’ื” = ืฉืงืจ

ื”ืžืฉืชื ื” ืขื•ื’ื” ื™ื•ืคืฅ ืœื›ืœ ื”ืฆื•ืคื™ื ื”ืžื•ื’ื“ืจื™ื ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”.

WATCHERS ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจืฉื™ืžื” ืžื•ืคืจื“ืช ื‘ืคืกื™ืงื™ื ืฉืœ ืงื˜ืขื™ ืฆื•ืคื” ืœื”ื—ื™ืœ ืกื‘ื™ื‘ื” ื–ื•.
ืื ืงื˜ืขื™ Env ืžืจื•ื‘ื™ื ืชื•ืืžื™ื ืœืฆื•ืคื”, ื”ื ื™ืฉื•ืœื‘ื• ืœืคื™ ื”ืกื“ืจ ืฉื‘ื• ื”ื ืžื•ืคื™ืขื™ื
ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”. ืขืจื›ื™ื ืžืื•ื—ืจื™ื ื™ื•ืชืจ ื™ืงื‘ืœื• ืขื“ื™ืคื•ืช.

ื“ื•ื’ืžื:

[watcher:worker1]
cmd = ping 127.0.0.1

[watcher:worker2]
cmd = ping 127.0.0.1

[env:worker1,worker2]
ื ืชื™ื‘ = / ืกืœ

[env:worker1]
PATH = $PATH

[env:worker2]
ืขื•ื’ื” = ืฉืงืจ

worker1 ื™ื•ืคืขืœ ืขื PATH = $PATH (ืžื•ืจื—ื‘ ืžื”ืกื‘ื™ื‘ื” circusd ื”ื•ืคืขืœ)
worker2 ื™ื•ืคืขืœ ืขื PATH = / ืกืœ ื•ืขื•ื’ื” = ืฉืงืจ

ืืคืฉืจ ืœื”ืฉืชืžืฉ ื’ื ื‘ืชื•ื•ื™ื ื›ืœืœื™ื™ื.

ื“ื•ื’ืžื:

[watcher:worker1]
cmd = ping 127.0.0.1

[watcher:worker2]
cmd = ping 127.0.0.1

[env:worker*]
ื ืชื™ื‘ = / ืกืœ

ืฉื ื™ื”ื worker1 ื• worker2 ื™ื•ืคืขืœ ืขื PATH = / ืกืœ

ืฉื™ืžื•ืฉ ืกื‘ื™ื‘ื” ืžืฉืชื ื™ื
ื‘ืขืช ื›ืชื™ื‘ืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœืš, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ื”ืžื•ื’ื“ืจื™ื ื‘- env
ืžืงื˜ืข ืื• ื‘ os.environ ืขืฆืžื•.

ืืชื” ืจืง ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘- circus.env. ืงื™ื“ื•ืžืช.

ื“ื•ื’ืžื:

[watcher:worker1]
cmd = $(circus.env.shell)

[watcher:worker2]
baz = $(circus.env.user)
bar = $(circus.env.yeah)
sup = $(circus.env.oh)

[socket:socket1]
port = $(circus.env.port)

[plugin:plugin1]
use = some.path
ืคืจืžื˜ืจ1 = $(circus.env.plugin_param)

[env]
ื›ืŸ = ื‘ื•ื–

[env:worker2]
ืื” = ื‘ืกื“ืจ

ืื ืžืฉืชื ื” ืžื•ื’ื“ืจ ื‘ืžืกืคืจ ืžืงื•ืžื•ืช, ืœืขืจืš ื”ืžื™ื•ื—ื“ ื‘ื™ื•ืชืจ ื™ืฉ ืขื“ื™ืคื•ืช: ื
ืžืฉืชื ื” ื”ืžื•ื’ื“ืจ ื‘ env:XXX ื™ืขืงื•ืฃ ืžืฉืชื ื” ืฉื”ื•ื’ื“ืจ ื‘ env, ืืฉืจ ื™ืขืงื•ืฃ ืืช ื
ืžืฉืชื ื” ื”ืžื•ื’ื“ืจ ื‘ os.environ.

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื—ืœืคื•ืช ืกื‘ื™ื‘ื” ื‘ื›ืœ ื—ืœืง ืฉืœ ื”ืชืฆื•ืจื” ื‘ื›ืœ ืกืขื™ืฃ
ืžืฉืชื ื”

ืขื™ืฆื•ื‘ ืžื” ื”ื™ื ืคืงื•ื“ื•ืช ื• ื˜ื™ืขื•ื ื™ื ืขื ื“ื™ื ืžื™ ืžืฉืชื ื™ื
ื›ืคื™ ืฉืื•ืœื™ ืจืื™ืช, ืืคืฉืจ ืœื”ืขื‘ื™ืจ ืžื™ื“ืข ืžืกื•ื™ื ืฉืžื—ื•ืฉื‘
ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ื‘ืขืช ื”ืคืขืœืช ื”ืชื”ืœื™ื›ื™ื. ื‘ื™ืŸ ื”ื™ืชืจ ื ื™ืชืŸ ืœืงื‘ืœ ืืช ืชืขื•ื“ืช ื”ืขื•ื‘ื“
(WID) ื•ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ืžื•ืขื‘ืจื•ืช ืœ- ื”ืชึทื”ึฒืœึดื™ืš. ื‘ื ื•ืกืฃ, ืืคืฉืจ
ืœื’ืฉืช ืœืืคืฉืจื•ื™ื•ืช ืฉื”ื•ืขื‘ืจื• ืœ- ืฆื•ืคื” ืžื” ืฉื”ืฆื™ื’ ืืช ื”ืชื”ืœื™ืš.

ื”ืขืจื”:
ืžื–ื”ื” ื”ืขื•ื‘ื“ ืฉื•ื ื” ืžื–ื”ื” ื”ืชื”ืœื™ืš. ื–ื” ืขืจืš ื™ื™ื—ื•ื“ื™, ื”ื—ืœ ืž-1,
ืฉื”ื•ื ื™ื™ื—ื•ื“ื™ ืจืง ืขื‘ื•ืจ ื”ืฆื•ืคื”.

ืœื“ื•ื’ืžื”, ืื ืืชื” ืจื•ืฆื” ืœื’ืฉืช ืœืžืฉืชื ื™ื ืžืกื•ื™ืžื™ื ื”ื›ืœื•ืœื™ื ื‘ืกื‘ื™ื‘ื”,
ืชืฆื˜ืจืš ืœืขืฉื•ืช ืืช ื–ื” ืขื ื”ื’ื“ืจื” ื›ื–ื•:

cmd = "ืชื›ื™ืŸ ืœื™ ืงืคื” --sugar $(CIRCUS.ENV.SUGAR_AMOUNT)"

ื–ื” ืขื•ื‘ื“ ืขื ืฉื ื™ื”ื cmd ื• ื˜ื•ืขืŸ.

ื—ึธืฉืื•ึผื‘:

ยท ื›ืœ ื”ืžืฉืชื ื™ื ืžืงื‘ืœื™ื ืงื™ื“ื•ืžืช ืงืจืงืก.

ยท ื”ืชื—ืœื™ืฃ ืื™ื ื• ืชืœื•ื™ ืจื™ืฉื™ื•ืช.

ื–ืจื ืชืฆื•ืจื”
ื›ื™ืชืช ื–ืจื ืคืฉื•ื˜ื” ื›ืžื• QueueStream ื• StdoutStream ืื™ืŸ ืชื›ื•ื ื•ืช ืกืคืฆื™ืคื™ื•ืช ืื‘ืœ
ืžื—ืœืงืช ื–ืจื ืื—ืจืช ืขืฉื•ื™ื” ืœื›ืœื•ืœ ื›ืžื”:

ื–ืจื ืงื•ื‘ืฅ
ืฉื ื”ืงื•ื‘ืฅ
ื ืชื™ื‘ ื”ืงื•ื‘ืฅ ืฉื‘ื• ื™ื™ื›ืชื‘ ื™ื•ืžืŸ.

ืคื•ืจืžื˜ ื–ืžืŸ
ืคื•ืจืžื˜ strftime ืฉื™ืฉืžืฉ ืœืงื™ื“ื•ืžืช ื›ืœ ืคืขื ืขื ื—ื•ืชืžืช ื–ืžืŸ. ืขืœ ื™ื“ื™
ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื ืœื ื™ื”ื™ื• ืงื™ื“ื•ืžืช.

ื›ืœื•ืžืจ: %Y-%m-%d %H:%M:%S

max_bytes
ื”ื’ื•ื“ืœ ื”ืžืจื‘ื™ ืฉืœ ืงื•ื‘ืฅ ื”ื™ื•ืžืŸ ืœืคื ื™ ื”ืคืขืœืช ืงื•ื‘ืฅ ื—ื“ืฉ. ืื ืœื ืžืกื•ืคืง, ื”
ื”ืงื•ื‘ืฅ ืœื ืžืชื”ืคืš.

ื’ื™ื‘ื•ื™_ืกืคื™ืจืช
ืžืกืคืจ ืงื•ื‘ืฆื™ ื”ื™ื•ืžืŸ ืฉื™ื™ืฉืžืจื• ื›ื‘ืจื™ืจืช ืžื—ื“ืœ backup_count ื”ื•ื null.

ื”ืขืจื”:
ื”ื’ืœื’ื•ืœ ืžืชืจื—ืฉ ื‘ื›ืœ ืคืขื ืฉืงื•ื‘ืฅ ื”ื™ื•ืžืŸ ื”ื ื•ื›ื—ื™ ื‘ืื•ืจืš ืฉืœ ื›ืžืขื˜ max_bytes. ืื
backup_count ื”ื•ื >= 1, ื”ืžืขืจื›ืช ืชื™ืฆื•ืจ ื‘ืจืฆื™ืคื•ืช ืงื‘ืฆื™ื ื—ื“ืฉื™ื ืขื ืื•ืชื•
ืฉื ื”ื ืชื™ื‘ ื›ืงื•ื‘ืฅ ื”ื‘ืกื™ืก, ืืš ืขื ื”ืกื™ื•ืžื•ืช ".1", ".2" ื•ื›ื•' ืžืฆื•ืจืคื•ืช ืืœื™ื•. ืœ
ืœื“ื•ื’ืžื”, ืขื backup_count ืฉืœ 5 ื•ืฉื ืงื•ื‘ืฅ ื‘ืกื™ืก ืฉืœ "app.log", ืชืงื‘ืœ
"app.log", "app.log.1", "app.log.2", ... ืขื“ "app.log.5". ื”ืงื•ื‘ืฅ ื”ื ื›ืชื‘
to ื”ื•ื ืชืžื™ื“ "app.log" - ื›ืืฉืจ ื”ื•ื ืžืชืžืœื, ื”ื•ื ื ืกื’ืจ ื•ืฉืžื” ืฉื•ื ื” ืœ
"app.log.1", ื•ืื ืงื™ื™ืžื™ื ืงื‘ืฆื™ื "app.log.1", "app.log.2" ื•ื›ื•', ืฉืžื ืฉื•ื ื”
ืœ-"app.log.2", "app.log.3" ื•ื›ื•' ื‘ื”ืชืืžื”.

ื“ื•ื’ืžื:

[ืฆื•ืคื”:ื”ืชื•ื›ื ื™ืช ืฉืœื™]
cmd = python -m myapp.server

stdout_stream.class = FileStream
stdout_stream.filename = test.log
stdout_stream.time_format = %Y-%m-%d %H:%M:%S
stdout_stream.max_bytes = 1073741824
stdout_stream.backup_count = 5

WatchedFileStream
ืฉื ื”ืงื•ื‘ืฅ
ื ืชื™ื‘ ื”ืงื•ื‘ืฅ ืฉื‘ื• ื™ื™ื›ืชื‘ ื™ื•ืžืŸ.

ืคื•ืจืžื˜ ื–ืžืŸ
ืคื•ืจืžื˜ strftime ืฉื™ืฉืžืฉ ืœืงื™ื“ื•ืžืช ื›ืœ ืคืขื ืขื ื—ื•ืชืžืช ื–ืžืŸ. ืขืœ ื™ื“ื™
ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื ืœื ื™ื”ื™ื• ืงื™ื“ื•ืžืช.

ื›ืœื•ืžืจ: %Y-%m-%d %H:%M:%S

ื”ืขืจื”:
WatchedFileStream ืžืกืชืžืš ืขืœ ื›ืœื™ ืกื™ื‘ื•ื‘ ื™ื•ืžืŸ ื—ื™ืฆื•ื ื™ ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืงื•ื‘ืฆื™ ื™ื•ืžืŸ
ืืœ ืชื”ืคื•ืš ืœื’ื“ื•ืœ ืžื“ื™. ืงื•ื‘ืฅ ื”ืคืœื˜ ื™ื”ื™ื” ื‘ืžืขืงื‘ ื•ืื ื”ื•ื ื™ื™ืžื—ืง ืื™ ืคืขื ืื•
ื”ื•ืขื‘ืจ ืขืœ ื™ื“ื™ ื›ืœื™ ืกื™ื‘ื•ื‘ ื”ื™ื•ืžืŸ ื”ื—ื™ืฆื•ื ื™, ื•ืื– ื”ืื—ื™ื–ื” ืฉืœ ืงื•ื‘ืฅ ื”ืคืœื˜ ืชื”ื™ื”
ื ื˜ืขืŸ ืžื—ื“ืฉ ืื•ื˜ื•ืžื˜ื™ืช.

ื“ื•ื’ืžื:

[ืฆื•ืคื”:ื”ืชื•ื›ื ื™ืช ืฉืœื™]
cmd = python -m myapp.server

stdout_stream.class = WatchedFileStream
stdout_stream.filename = test.log
stdout_stream.time_format = %Y-%m-%d %H:%M:%S

TimedRotatingFileStream
ืฉื ื”ืงื•ื‘ืฅ
ื ืชื™ื‘ ื”ืงื•ื‘ืฅ ืฉื‘ื• ื™ื™ื›ืชื‘ ื™ื•ืžืŸ.

ื’ื™ื‘ื•ื™_ืกืคื™ืจืช
ืžืกืคืจ ืงื•ื‘ืฆื™ ื”ื™ื•ืžืŸ ืฉื™ื™ืฉืžืจื• ื›ื‘ืจื™ืจืช ืžื—ื“ืœ backup_count ื”ื•ื null.

ืคื•ืจืžื˜ ื–ืžืŸ
ืคื•ืจืžื˜ strftime ืฉื™ืฉืžืฉ ืœืงื™ื“ื•ืžืช ื›ืœ ืคืขื ืขื ื—ื•ืชืžืช ื–ืžืŸ. ืขืœ ื™ื“ื™
ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื ืœื ื™ื”ื™ื• ืงื™ื“ื•ืžืช.

ื›ืœื•ืžืจ: %Y-%m-%d %H:%M:%S

ืกื•ื‘ื‘_ืžืชื™
ืกื•ื’ ื”ืžืจื•ื•ื—. ืจืฉื™ืžืช ื”ืขืจื›ื™ื ื”ืืคืฉืจื™ื™ื ื ืžืฆืืช ืœืžื˜ื”. ืฉื™ืžื• ืœื‘ ืฉื”ื ื›ืŸ
ืœื ืจื’ื™ืฉ ืœืื•ืชื™ื•ืช ื’ื“ื•ืœื•ืช.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚ืขืจืš โ”‚ ืกื•ื’ ื”ืžืจื•ื•ื— โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚'S' โ”‚ ืฉื ื™ื•ืช โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚'M' โ”‚ ื“ืงื•ืช โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚'H' โ”‚ ืฉืขื•ืช โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚'D' โ”‚ ื™ืžื™ื โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚'W0'-'W6' โ”‚ ื™ื•ื ื—ื•ืœ (0=ื™ื•ื ืฉื ื™) โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚'ื—ืฆื•ืช' โ”‚ ื”ืชื”ืคื›ื• ื‘ื—ืฆื•ืช โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

rotate_interval
ืžืจื•ื•ื— ื”ื”ืชื”ืคื›ื•ืช.

ื”ืขืจื”:
TimedRotatingFileStream ืžืกื•ื‘ื‘ ืงื•ื‘ืฆื™ ื™ื•ืžืŸ ื‘ืžืจื•ื•ื—ื™ ื–ืžืŸ ืžืกื•ื™ืžื™ื. ืžืจื•ื•ื— ื’ืœื’ื•ืœ
ื ืงื‘ืข ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ ืฉืœ rotate_when ื•-rotate_interval.

ื“ื•ื’ืžื:

[ืฆื•ืคื”:ื”ืชื•ื›ื ื™ืช ืฉืœื™]
cmd = python -m myapp.server

stdout_stream.class = TimedRotatingFileStream
stdout_stream.filename = test.log
stdout_stream.time_format = %Y-%m-%d %H:%M:%S
stdout_stream.utc = ื ื›ื•ืŸ
stdout_stream.rotate_when = H
stdout_stream.rotate_interval = 1

FancyStdoutStream
ืฆึถื‘ึทืข

ื”ืฉืžื™ื™ื ืฉื of an ASCII ืฆึถื‘ึทืข:

ยท ืื“ื•ื

ยท ื™ืจื•ืง

ยท ืฆื”ื•ื‘

ยท ื›ื—ื•ืœ

ยท ืžื’ื ื˜ื”

ยท ื˜ื•ืจืงื™ื–

ยท ืœื‘ืŸ

ืคื•ืจืžื˜ ื–ืžืŸ
ืคื•ืจืžื˜ strftime ืฉืœื›ืœ ืฉื•ืจื” ืชื”ื™ื” ืงื™ื“ื•ืžืช.

ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื: %Y-%m-%d %H:%M:%S

ื“ื•ื’ืžื:

[ืฆื•ืคื”:ื”ืชื•ื›ื ื™ืช ืฉืœื™]
cmd = python -m myapp.server
stdout_stream.class = FancyStdoutStream
stdout_stream.color = ื™ืจื•ืง
stdout_stream.time_format = %Y/%m/%d | %H:%M:%S

ืคืงื•ื“ื•ืช
ื‘ืžื•ืงื“ ื”ืงืจืงืก ืžืชื’ื•ืจืจื•ืช ืžืขืจื›ื•ืช ื”ืคื™ืงื•ื“. circusctl ื”ื•ื ืจืง ืœืงื•ื— zeromq,
ื•ืื ืฆืจื™ืš ืืชื” ื™ื›ื•ืœ ืœื ื”ื•ื’ ื‘ืื•ืคืŸ ืชื•ื›ื ืชื™ ื‘ืžืขืจื›ืช Circus ืขืœ ื™ื“ื™ ื›ืชื™ื‘ืช zmq ืžืฉืœืš
ืœืงื•ื—ื•ืช.

ื›ืœ ื”ื”ื•ื“ืขื•ืช ื”ืŸ ืžื™ืคื•ื™ JSON.

ืขื‘ื•ืจ ื›ืœ ืคืงื•ื“ื” ืœืžื˜ื”, ืื ื• ืžืกืคืงื™ื ื“ื•ื’ืžื” ืœืฉื™ืžื•ืฉ ืขื circusctl ืืš ื’ื ืืช ื”ืงืœื˜ /
ืคืœื˜ ื”ื•ื“ืขื•ืช zmq.

circus-ctl ืคืงื•ื“ื•ืช
ยท ืœื”ื•ืกื™ืฃ: ืคืงื•ื“ื•ืช/ื”ื•ืกืฃ

ยท decr: ืคืงื•ื“ื•ืช/ื”ืกืจื”

ยท dstats: ืคืงื•ื“ื•ืช/dstats

ยท ืœืงื‘ืœ: ืคืงื•ื“ื•ืช/ืงื‘ืœ

ยท ืื•ืคืฆื™ื•ืช ื’ืœื•ื‘ืœื™ื•ืช: ืคืงื•ื“ื•ืช/ื’ืœื•ื‘ืœืื•ืคืฆื™ื•ืช

ยท ืชื•ืกืคืช: ืคืงื•ื“ื•ืช/incr

ยท ืคึผึดื™ืชื•ึนืŸ: ืคืงื•ื“ื•ืช/ืื™ืคื™ื˜ื•ืŸ

ยท ืจืฉื™ืžื”: ืคืงื•ื“ื•ืช/ืจืฉื™ืžื”

ยท ืœื”ืงืฉื™ื‘: ืคืงื•ื“ื•ืช/ื”ืื–ื ื”

ยท ืฉืงืขื™ ืจืฉื™ืžื•ืช: ืคืงื•ื“ื•ืช/ืœื™ืกื˜ื™ื

ยท ืžืกืคืจ ืชื”ืœื™ื›ื™ื: ืคืงื•ื“ื•ืช/ืžืกืคืจ ืชื”ืœื™ื›ื™ื

ยท ืฉื•ืžืจื™ ืžืกืคืจ: ืคืงื•ื“ื•ืช / numwatchers

ยท ืืคืฉืจื•ื™ื•ืช: ืคืงื•ื“ื•ืช/ืืคืฉืจื•ื™ื•ืช

ยท ืœื”ืคืกื™ืง: ืคืงื•ื“ื•ืช/ืฆื

ยท ืœื˜ืขื•ืŸ ืžื—ื“ืฉ: ืคืงื•ื“ื•ืช/ื˜ืขื™ื ื” ืžื—ื“ืฉ

ยท ื˜ืขืŸ ืžื—ื“ืฉ ืืช ื”ืชืฆื•ืจื”: commands/reloadconfig

ยท ื”ืคืขืœื” ืžื—ื“ืฉ: ืคืงื•ื“ื•ืช/ื”ืคืขืœื” ืžื—ื“ืฉ

ยท rm: ืคืงื•ื“ื•ืช/rm

ยท ืกื˜: ืคืงื•ื“ื•ืช/ืกื˜

ยท ืื•ึนืช: ืคืงื•ื“ื•ืช/ืื•ืช

ยท ื”ืชื—ืœื”: ืคืงื•ื“ื•ืช/ื”ืชื—ืœ

ยท ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช: ืคืงื•ื“ื•ืช/ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช

ยท ืžืฆื‘: ืคืงื•ื“ื•ืช/ืกื˜ื˜ื•ืก

ยท ืœื”ืคืกื™ืง: ืคืงื•ื“ื•ืช/ืขืฆื™ืจื”

ืœื”ื•ืกื™ืฃ a ืฆื•ึนืคึถื”
ืคืงื•ื“ื” ื–ื• ืžื•ืกื™ืคื” ืฆื•ืคื” ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ืœื‘ื•ืจืจ.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ื”ื•ืกืฃ",
"ื ื›ืกื™ื": {
"cmd": "/path/to/commandline --option"
"name": "nameofwatcher"
"args": [],
"ืืคืฉืจื•ื™ื•ืช": {},
"ื”ืชื—ืœ": ืฉืงืจ
}
}

ื”ื•ื“ืขื” ืžื›ื™ืœื” 2 ืžืืคื™ื™ื ื™ื:

ยท cmd: ืฉื•ืจืช ืคืงื•ื“ื” ืžืœืื” ืœื‘ื™ืฆื•ืข ื‘ืชื”ืœื™ืš

ยท args: ืžืขืจืš, ืืจื’ื•ืžื ื˜ื™ื ืฉื”ื•ืขื‘ืจื• ืœืคืงื•ื“ื” (ืื•ืคืฆื™ื•ื ืœื™)

ยท ืฉื: ืฉื ื”ืฆื•ืคื”

ยท ืืคืฉืจื•ื™ื•ืช: ืืคืฉืจื•ื™ื•ืช ืฉืœ ืฆื•ืคื”

ยท ื”ืชื—ืœ: ื”ืคืขืœ ืืช ื”ืฆื•ืคื” ืœืื—ืจ ื”ื™ืฆื™ืจื”

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ".

ืคื™ืงื•ื“ ืงื•
$ circusctl ื”ื•ืกืฃ [--ื”ืชื—ืœ]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื” ืฉื™ืฉ ืœื™ืฆื•ืจ

ยท : ืฉื•ืจืช ืคืงื•ื“ื” ืžืœืื” ืœื‘ื™ืฆื•ืข ื‘ืชื”ืœื™ืš

ยท --ื”ืชื—ืœ: ื”ืคืขืœ ืืช ื”ืฆื•ืคื” ืžื™ื“

ื”ืฆื”ืจื” ืžื” ื”ื™ื ืžืกืคืจ of ืชื”ืœื™ื›ื™ื in a ืฆื•ึนืคึถื”
ื”ืขืจื” ื–ื• ืžื•ืจื™ื“ื” ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื” ื‘- , 1 ื”ื•ื ื”
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "decr",
"ื ื›ืกื™ื": {
"ืฉื": " "
"ื "ื‘:
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืžืืคื™ื™ืŸ 'numprocesses':

{ "status": "ื‘ืกื“ืจ", "numprocesses": , "ื–ืžืŸ", "ื—ื•ืชืžืช ื–ืžืŸ" }

ืคื™ืงื•ื“ ืงื•
$ circusctl decr [ ] [--ืžื—ื›ื”]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื”

ยท : ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ืœื”ืกืจื”.

ืœืงื‘ืœ ืงืจืงืก ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช
ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื‘ื›ืœ ืขืช ื›ืžื” ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืขืœ circusd ืขื ื”ืคืงื•ื“ื” dstat.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ืฉืœ ื”ืงืจืงืก, ืคืฉื•ื˜ ื”ืจืฅ:

{
"command": "dstats"
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืžื™ืคื•ื™ ืฉืœ ื”ืžืืคื™ื™ืŸ "ืžื™ื“ืข" ื”ืžื›ื™ืœ ื›ืžื” ืžื™ื“ืข ืขืœ ืชื”ืœื™ืš:

{
"ืžื™ื“ืข": {
"ื™ืœื“ื™ื": [],
"cmdline": "ืคื™ืชื•ืŸ",
"ืžืขื‘ื“": 0.1,
"ctime": "0:00.41",
"ืžืž": 0.1,
"mem_info1": "3 ืžื™ืœื™ื•ืŸ",
"mem_info2": "2G",
"ื ื—ืžื“": 0,
"pid": 47864,
"ืฉื ืžืฉืชืžืฉ": "ืฉื•ืจืฉ"
},
"status": "ื‘ืกื“ืจ",
"ื–ืžืŸ": 1332265655.897085
}

ืคื™ืงื•ื“ ืงื•
$ circusctl dstats

ืœืงื‘ืœ ืžื” ื”ื™ื ืขืจืš of ืกืคืฆื™ืคื™ ืฆื•ึนืคึถื” ืืคืฉืจื•ื™ื•ืช
ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” ื–ื• ื›ื“ื™ ืœืฉืื•ืœ ืืช ื”ืขืจืš ื”ื ื•ื›ื—ื™ ืฉืœ ืืคืฉืจื•ืช ืฆื•ืคื” ืื—ืช ืื• ื™ื•ืชืจ.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ืงื‘ืœ",
"ื ื›ืกื™ื": {
"keys": ["key1, "key2"]
"name": "nameofwatcher"
}
}

ื”ื•ื“ืขืช ื‘ืงืฉื” ืžื›ื™ืœื” ืฉื ื™ ืžืืคื™ื™ื ื™ื:

ยท ืžืงืฉื™ื: ืจืฉื™ืžื”, ืžืงืฉื™ ื”ืืคืฉืจื•ืช ืฉืขื‘ื•ืจื ื‘ืจืฆื•ื ืš ืœืงื‘ืœ ืืช ื”ืขืจื›ื™ื

ยท ืฉื: ืฉื ื”ืฆื•ืคื”

ืœืื•ื‘ื™ื™ืงื˜ ื”ืชื’ื•ื‘ื” ื™ืฉ ืžืืคื™ื™ืŸ ืืคืฉืจื•ื™ื•ืช ืฉื”ื•ื ืžื™ืœื•ืŸ ืฉืœ ืฉืžื•ืช ืืคืฉืจื•ื™ื•ืช ื•
ืขืจื›ื™ื.

ืœื“ื•ื’ืžื”:

{
"status": "ื‘ืกื“ืจ",
"ืืคืฉืจื•ื™ื•ืช": {
"timeout_graceful": 300,
"send_hup": ื ื›ื•ืŸ,
},
ื–ืžืŸ': 1332202594.754644
}

ืคื™ืงื•ื“ ืงื•
$ circusctl ืœืงื‘ืœ

ืœืงื‘ืœ ืžื” ื”ื™ื ืคื•ืกืง ืืคืฉืจื•ื™ื•ืช
ืคืงื•ื“ื” ื–ื• ืžื—ื–ื™ืจื” ืืช ืืคืฉืจื•ื™ื•ืช ื”ื‘ื•ืจืจ

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ื’ืœื•ื‘ืœืื•ืคืฆื™ื•ืช",
"ื ื›ืกื™ื": {
"key1": "val1",
..
}
}

ื”ื•ื“ืขื” ืžื›ื™ืœื” 2 ืžืืคื™ื™ื ื™ื:

ยท ืžืงืฉื™ื: ืจืฉื™ืžื”, ืžืงืฉื™ ื”ืืคืฉืจื•ืช ืฉืขื‘ื•ืจื ื‘ืจืฆื•ื ืš ืœืงื‘ืœ ืืช ื”ืขืจื›ื™ื

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืื•ื‘ื™ื™ืงื˜ ืขื ืžืืคื™ื™ืŸ "ืืคืฉืจื•ื™ื•ืช" ื”ืžื›ื™ืœ ืืช ืจืฉื™ืžืช ื”ืžืคืชื—/ืขืจืš
ื”ื•ื—ื–ืจ ืขืœ ื™ื“ื™ ืงืจืงืก.

ืœื“ื•ื’ืžื”:

{
"status": "ื‘ืกื“ืจ",
"ืืคืฉืจื•ื™ื•ืช": {
"check_delay": 1,
...
},
ื–ืžืŸ': 1332202594.754644
}

ืคื™ืงื•ื“ ืงื•
$ circusctl ืื•ืคืฆื™ื•ืช ื’ืœื•ื‘ืœื™ื•ืช

ืืคืฉืจื•ื™ื•ืช
ืžืงืฉื™ ื”ืืคืฉืจื•ื™ื•ืช ื”ื:

ยท ื ืงื•ื“ืช ืงืฆื”: ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ื”ื‘ืงืจ ZMQ

ยท pubsub_endpoint: ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ pubsub

ยท check_delay: ื”ื”ืฉื”ื™ื” ื‘ื™ืŸ ืฉืชื™ ื ืงื•ื“ื•ืช ื‘ืงืจ

ยท multicast_endpoint: ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ multicast ืœื’ื™ืœื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืืฉื›ื•ืœ circusd

ืชื•ึนืกึถืคึถืช ืžื” ื”ื™ื ืžืกืคืจ of ืชื”ืœื™ื›ื™ื in a ืฆื•ึนืคึถื”
ื”ืขืจื” ื–ื• ืžื’ื“ื™ืœื” ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื” ื‘- , 1 ื”ื•ื ื”
ื‘ืจื™ืจืช ืžื—ื“ืœ

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "incr",
"ื ื›ืกื™ื": {
"ืฉื": " ",
"ื "ื‘: ,
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืžืืคื™ื™ืŸ 'numprocesses':

{ "status": "ื‘ืกื“ืจ", "numprocesses": , "ื–ืžืŸ", "ื—ื•ืชืžืช ื–ืžืŸ" }

ืคื™ืงื•ื“ ืงื•
$ circusctl Incr [ ] [--ืžื—ื›ื”]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื”.

ยท : ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ืฉื™ืฉ ืœื”ื•ืกื™ืฃ.

ืฆื•ืจ ืคึผึธื’ึธื– ืืœ ืชื•ืš ืงืจืงืก ืชื”ืœื™ืš
ืคืงื•ื“ื” ื–ื• ืฉื™ืžื•ืฉื™ืช ืจืง ืื ืžื•ืชืงื ืช ื—ื‘ื™ืœืช ipython.

ืคื™ืงื•ื“ ืงื•
$ circusctl ipython

ืœืงื‘ืœ ืจืฉื™ืžื” of ืฆื•ืคื™ื or ืชื”ืœื™ื›ื™ื in a ืฆื•ึนืคึถื”
ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
ื›ื“ื™ ืœืงื‘ืœ ืืช ืจืฉื™ืžืช ื›ืœ ื”ืฆื•ืคื™ื:

{
"command": "ืจืฉื™ืžื”",
}

ื›ื“ื™ ืœืงื‘ืœ ืืช ืจืฉื™ืžืช ื”ืชื”ืœื™ื›ื™ื ื”ืคืขื™ืœื™ื ื‘-watcher:

{
"command": "ืจืฉื™ืžื”",
"ื ื›ืกื™ื": {
"name": "nameofwatcher",
}
}

ื”ืชื’ื•ื‘ื” ื”ื—ื–ื™ืจื” ืืช ื”ืจืฉื™ืžื” ื‘ื™ืงืฉื”. ื”ืžื™ืคื•ื™ ื”ืžื•ื—ื–ืจ ื™ื›ื•ืœ ืœื”ื™ื•ืช 'ืฆื•ืคื™ื' ืื•
'pids' ื‘ื”ืชืื ืœื‘ืงืฉื”.

ืคื™ืงื•ื“ ืงื•
$ circusctl ืจืฉื™ืžื” [ ]

ื”ื™ืจืฉื ืœ a ืฆื•ึนืคึถื” ืื™ืจื•ืข
ZMQ
ื‘ื›ืœ ืจื’ืข ื ื™ืชืŸ ืœื”ื™ืจืฉื ืœืื™ืจื•ืข ืงืจืงืก. ืงืจืงืก ืžืกืคืง ืขื“ื›ื•ืŸ PUB/SUB ืขืœื™ื•
ื›ืœ ืœืงื•ื— ื™ื›ื•ืœ ืœื”ื™ืจืฉื. URI ืฉืœ ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ื”ืžื ื•ื™ ื ืงื‘ืข ื‘-circus.ini
ืงื•ื‘ืฅ ืชืฆื•ืจื”.

ืื™ืจื•ืขื™ื ื”ื ื ื•ืฉืื™ ืคืื‘:

ยท ืฆื•ึนืคึถื”. .ืœึดืงืฆื•ึนืจ: ื›ืืฉืจ ืชื”ืœื™ืš ืงื•ืฆืจ

ยท ืฆื•ึนืคึถื”. .ืœึฐื”ึทืฉืึฐืจึดื™ืฅ: ื›ืืฉืจ ื ื•ืฆืจ ืชื”ืœื™ืš

ยท ืฆื•ึนืคึถื”. .ืœึทื”ึฒืจื•ึนื’: ื›ืืฉืจ ืชื”ืœื™ืš ืžื•ืžืช

ยท ืฆื•ึนืคึถื”. .ืžึฐืขื•ึผื“ื›ึผึธืŸ: ื›ืืฉืจ ืชืฆื•ืจืช ื”ืฆื•ืคื” ืžืชืขื“ื›ื ืช

ยท ืฆื•ึนืคึถื”. .ืชืคืกื™ืง: ื›ืืฉืจ ืฆื•ืคื” ืžื•ืคืกืง

ยท ืฆื•ึนืคึถื”. .ื”ึทืชื—ึธืœึธื”: ื›ืืฉืจ ืžื•ืคืขืœ ืฆื•ืคื”

ื›ืœ ื”ื•ื“ืขื•ืช ื”ืื™ืจื•ืขื™ื ื ืžืฆืื•ืช ื‘ืžื‘ื ื” json.

ืคื™ืงื•ื“ ืงื•
ื”ืœืงื•ื— ืขื•ื“ื›ืŸ ื›ื“ื™ ืœืกืคืง ื“ืจืš ืคืฉื•ื˜ื” ืœื”ืื–ื™ืŸ ืœืื™ืจื•ืขื™ื:

ืชืงืฉื™ื‘ ื‘ืžืขื’ืœ [ ,...]

ื“ื•ื’ืžื” of ื”ืชื•ืฆืื”
$ circusctl ืœื”ืื–ื™ืŸ tcp://127.0.0.1:5556
watcher.refuge.spawn: {u'process_id': 6, u'process_pid': 72976,
u'time': 1331681080.985104}
watcher.refuge.spawn: {u'process_id': 7, u'process_pid': 72995,
u'time': 1331681086.208542}
watcher.refuge.spawn: {u'process_id': 8, u'process_pid': 73014,
u'time': 1331681091.427005}

ืœืงื‘ืœ ืžื” ื”ื™ื ืจืฉื™ืžื” of ืืจื•ื‘ื•ืช
ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
ื›ื“ื™ ืœืงื‘ืœ ืืช ืจืฉื™ืžืช ื”ืฉืงืขื™ื:

{
"command": "listsockets",
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืจืฉื™ืžื” ืฉืœ ืžื™ืคื•ื™ื™ json ืขื ืžืคืชื—ื•ืช ืขื‘ื•ืจ fd, name, host ื•-port.

ืคื™ืงื•ื“ ืงื•
$ circusctl listsockets

ืœืงื‘ืœ ืžื” ื”ื™ื ืžืกืคืจ of ืชื”ืœื™ื›ื™ื
ืงื‘ืœ ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื” ืื• ื‘ื‘ื•ืจืจ

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "numprocesses",
"ื ื›ืกื™ื": {
"ืฉื": " "
}

}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืžืืคื™ื™ืŸ 'numprocesses':

{ "status": "ื‘ืกื“ืจ", "numprocesses": , "ื–ืžืŸ", "ื—ื•ืชืžืช ื–ืžืŸ" }

ืื ืฉื ื”ืžืืคื™ื™ืŸ ืœื ืฆื•ื™ืŸ, ืกื›ื•ื ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื”ืžื ื•ื”ืœื™ื ื™ื•ื—ื–ืจ.

ืคื™ืงื•ื“ ืงื•
$ circusctl numprocesses [ ]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื”

ืœืงื‘ืœ ืžื” ื”ื™ื ืžืกืคืจ of ืฆื•ืคื™ื
ืงื‘ืœ ืืช ืžืกืคืจ ื”ืฆื•ืคื™ื ื‘ื‘ื•ืจืจ

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "numwatchers",
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ืžืกืคืจ ื”ืฆื•ืคื™ื ื‘ืžืืคื™ื™ืŸ 'numwatchers':

{ "status": "ื‘ืกื“ืจ", "numwatchers": , "ื–ืžืŸ", "ื—ื•ืชืžืช ื–ืžืŸ" }

ืคื™ืงื•ื“ ืงื•
$ circusctl numwatchers

ืœืงื‘ืœ ืžื” ื”ื™ื ืขืจืš of ืืช ื›ืœ ืืคืฉืจื•ื™ื•ืช ืœ a ืฆื•ึนืคึถื”
ืคืงื•ื“ื” ื–ื• ืžื—ื–ื™ืจื” ืืช ื›ืœ ืขืจื›ื™ ื”ืืคืฉืจื•ื™ื•ืช ืขื‘ื•ืจ ืฆื•ืคื” ื ืชื•ืŸ.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ืืคืฉืจื•ื™ื•ืช",
"ื ื›ืกื™ื": {
"name": "nameofwatcher",
}
}

ื”ื•ื“ืขื” ืžื›ื™ืœื” ืžืืคื™ื™ืŸ ืื—ื“:

ยท ืฉื: ืฉื ื”ืฆื•ืคื”

ืœืื•ื‘ื™ื™ืงื˜ ื”ืชื’ื•ื‘ื” ื™ืฉ ืžืืคื™ื™ืŸ ืืคืฉืจื•ื™ื•ืช ืฉื”ื•ื ืžื™ืœื•ืŸ ืฉืœ ืฉืžื•ืช ืืคืฉืจื•ื™ื•ืช ื•
ืขืจื›ื™ื.

ืœื“ื•ื’ืžื”:

{
"status": "ื‘ืกื“ืจ",
"ืืคืฉืจื•ื™ื•ืช": {
"timeout_graceful": 300,
"send_hup": ื ื›ื•ืŸ,
...
},
ื–ืžืŸ': 1332202594.754644
}

ืคื™ืงื•ื“ ืงื•
$ circusctl ืืคืฉืจื•ื™ื•ืช

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื”

ืžืงืฉื™ ื”ืืคืฉืจื•ื™ื•ืช ื”ื:

ยท ืžืกืคืจ ืชื”ืœื™ื›ื™ื: ืžืกืคืจ ืฉืœื, ืžืกืคืจ ืชื”ืœื™ื›ื™ื

ยท warmup_delay: ืžืกืคืจ ืฉืœื ืื• ืžืกืคืจ, ืขื™ื›ื•ื‘ ืœื”ืžืชื ื” ื‘ื™ืŸ ื”ืฉืจืฆืช ืชื”ืœื™ืš ื‘ืฉื ื™ื•ืช

ยท working_dir: ืžื—ืจื•ื–ืช, ืกืคืจื™ื™ื” ืฉื‘ื” ื™ืชื‘ืฆืข ื”ืชื”ืœื™ืš

ยท uid: ืžื—ืจื•ื–ืช ืื• ืžืกืคืจ ืฉืœื, ืžื–ื”ื” ืžืฉืชืžืฉ ื”ืžืฉืžืฉ ืœื”ืคืขืœืช ื”ืชื”ืœื™ืš

ยท gid: ืžื—ืจื•ื–ืช ืื• ืžืกืคืจ ืฉืœื, ืžื–ื”ื” ืงื‘ื•ืฆื” ื”ืžืฉืžืฉ ืœื”ืคืขืœืช ื”ืชื”ืœื™ืš

ยท send_hup: ื‘ื•ืœื™ืื ื™, ืื TRU ื”ืื•ืช HUP ื™ืฉืžืฉ ื‘ื˜ืขื™ื ื” ืžื—ื“ืฉ

ยท shell: boolean, ื™ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื” ื‘ืกื‘ื™ื‘ืช ืžืขื˜ืคืช ืื ื”ื™ื ื ื›ื•ื ื”

ยท cmd: string, ืฉื•ืจืช ื”ืคืงื•ื“ื” ื”ืžืฉืžืฉืช ืœื”ืคืขืœืช ื”ืชื”ืœื™ืš

ยท env: ืื•ื‘ื™ื™ืงื˜, ื”ื’ื“ืจ ืืช ื”ืกื‘ื™ื‘ื” ืฉื‘ื” ื”ืชื”ืœื™ืš ื™ื•ืฉืง

ยท retry_in: ืžืกืคืจ ืฉืœื ืื• ืžืกืคืจ, ื–ืžืŸ ื‘ืฉื ื™ื•ืช ืฉืื ื• ืžื—ื›ื™ื ืœืคื ื™ ืฉื ื ืกื” ืฉื•ื‘ ืœื”ืคืขื™ืœ ืืช
ืชื”ืœื™ืš ืื ื”ื•ืฉื’ ืžืกืคืจ ื”ื ื™ืกื™ื•ื ื•ืช ื”ืžืจื‘ื™.

ยท max_retry: ืžืกืคืจ ืฉืœื, ื”ืžืงืกื™ืžื•ื ืฉืœ ืœื•ืœืื•ืช ื ื™ืกื™ื•ื ื•ืช ื—ื•ื–ืจื™ื

ยท ืคืกืง ื–ืžืŸ_graceful: ืžืกืคืจ ืฉืœื ืื• ืžืกืคืจ, ื–ืžืŸ ืฉืื ื• ืžื—ื›ื™ื ืœืคื ื™ ืฉื‘ื•ื•ื“ืื™ ื ื”ืจื•ื’ ืชื”ืœื™ืš.

ยท ืขื“ื™ืคื•ืช: ืžืฉืžืฉ ืœืžื™ื•ืŸ ืฆื•ืคื™ื ื‘ื‘ื•ืจืจ

ยท ื™ื—ื™ื“: ืื ื ื›ื•ืŸ, ืฆื•ืคื” ื™ื—ื™ื“.

ยท max_age: ื–ืžืŸ ืฉื‘ื• ืชื”ืœื™ืš ื™ื›ื•ืœ ืœื—ื™ื•ืช ืœืคื ื™ ืฉื”ื•ื ืžื•ืคืขืœ ืžื—ื“ืฉ

ยท max_age_variance: ืžืฉืชื ื” ื–ืžืŸ ื ื•ืกืฃ ืœื—ื™ื•ืช, ื ืžื ืข ืžื”ื›ืช ืขื“ืจ.

ืœื”ืคืกื™ืง ืžื” ื”ื™ื ืคื•ืกืง ืžื™ื“
ื›ืืฉืจ ื”ื‘ื•ืจืจ ืžืงื‘ืœ ืคืงื•ื“ื” ื–ื•, ื”ื‘ื•ืจืจ ื™ื•ืฆื.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ืฆื",
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ".

If ื”ืžืชื ื” ื”ื•ื False (ื‘ืจื™ืจืช ืžื—ื“ืœ), ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืžื™ื“ ืœืื—ืจ ื”ืฉื™ื—ื” ืื•ืช_ืขืฆื™ืจื”
ืขืœ ื›ืœ ืชื”ืœื™ืš.

If ื”ืžืชื ื” ื ื›ื•ืŸ, ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืจืง ื›ืืฉืจ ืชื”ืœื™ืš ื”ืขืฆื™ืจื” ื™ืกืชื™ื™ื ืœื—ืœื•ื˜ื™ืŸ.
ื‘ื’ืœืœ ื”ืืคืฉืจื•ืช graceful_timeout, ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ืงืฆืช ื–ืžืŸ.

ืคื™ืงื•ื“ ืงื•
$ circusctl ืขื–ื•ื‘ [--ืžืžืชื™ืŸ]

ืœึดื˜ืขื•ึนืŸ ืžึดื—ึธื“ึธืฉื ืžื” ื”ื™ื ืคื•ืกืง or a ืฆื•ึนืคึถื”
ืคืงื•ื“ื” ื–ื• ื˜ื•ืขื ืช ืžื—ื“ืฉ ืืช ื›ืœ ื”ืชื”ืœื™ืš ื‘ืฆื•ืคื” ืื• ืืช ื›ืœ ื”ืฆื•ืคื™ื. ื–ื” ื™ืงืจื” ื‘ืื—ื“
ืžืชื•ืš 3 ื“ืจื›ื™ื:

ยท ืื ื—ื™ื ื ื™ ื”ื•ื ืฉืงืจ, ืžืชืจื—ืฉืช ื”ืคืขืœื” ืžื—ื“ืฉ ืคืฉื•ื˜ื”.

ยท ืื ืฉืœื—_ื”ืค ื ื›ื•ืŸ ืขื‘ื•ืจ ื”ืฆื•ืคื”, ืื•ืช HUP ื ืฉืœื— ืœื›ืœ ืชื”ืœื™ืš.

ยท

ืื—ืจืช:

ยท ืื ื”ืจืฆืฃ ื”ื•ื ืฉืงืจ, ื”ื‘ื•ืจืจ ื™ื ืกื” ืœื”ืฉืจื™ืฅ ืžืกืคืจ ืชื”ืœื™ื›ื™ื ื—ื“ืฉ
ืชื”ืœื™ื›ื™ื. ืื ื”ืชื”ืœื™ื›ื™ื ื”ื—ื“ืฉื™ื ื ื•ืฆืจื• ื‘ื”ืฆืœื—ื”, ื”ืชื•ืฆืื” ื”ื™ื ื–ืืช
ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื”ื™ืฉื ื™ื ื ืขืฆืจื™ื, ืฉื›ืŸ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ืชื”ืœื™ื›ื™ื ื”ื™ืฉื ื™ื ื‘ื™ื•ืชืจ ื”ื
ื”ื•ืคืกืง ื›ืืฉืจ ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืคื•ืขืœ ืขื‘ื•ืจ ืฆื•ืคื” ื’ื“ื•ืœ ืž
ืžืกืคืจ ืชื”ืœื™ื›ื™ื.

ยท ืื ืจืฆืฃ ื ื›ื•ืŸ, ื”ื‘ื•ืจืจ ื™ืชื—ื™ืœ ืžื—ื“ืฉ ื›ืœ ืชื”ืœื™ืš ื‘ืจืฆืฃ
ื“ืจืš (ืขื ื ืขื™ื›ื•ื‘_ื—ื™ืžื•ื ื”ืคืกืงื” ื‘ื™ืŸ ื›ืœ ืฉืœื‘)

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ื˜ืขืŸ ืžื—ื“ืฉ",
"ื ื›ืกื™ื": {
"ืฉื":' ",
"ื—ืŸ": ื ื›ื•ืŸ,
"sequential": false,
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ". ืื ื”ื ื›ืก ื—ื™ื ื ื™ ืžื•ื’ื“ืจ ื›ืืžืช ื”ืชื”ืœื™ื›ื™ื
ื™ื™ืฆื ื‘ื—ืŸ.

ืื ืฉื ื”ื ื›ืก ืงื™ื™ื, ื”ื˜ืขื™ื ื” ืžื—ื“ืฉ ืชื•ื—ืœ ืขืœ ื”ืฆื•ืคื”.

ืคื™ืงื•ื“ ืงื•
ื˜ืขืŸ ืžื—ื“ืฉ $ circusctl [ ] [--ืœื”ืคืกื™ืง] [--ืžืžืชื™ืŸ]
[--ืกึดื“ืจึธืชึดื™]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื”

ยท --ืœื‘ื˜ืœ, ืœืกื™ื™ื; ืฆื ืžื”ืฆื•ืžืช ืžื™ื“

ืœึดื˜ืขื•ึนืŸ ืžึดื—ึธื“ึธืฉื ืžื” ื”ื™ื ืชืฆื•ืจื” ืคื™ืœื”
ืคืงื•ื“ื” ื–ื• ื˜ื•ืขื ืช ืžื—ื“ืฉ ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”, ื›ืš ืฉืฉื™ื ื•ื™ื™ื ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื™ื”ื™ื•
ืžืฉืชืงืฃ ื‘ืชืฆื•ืจืช ื”ืงืจืงืก.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "reloadconfig",
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ". ืื ื”ื ื›ืก ื—ื™ื ื ื™ ืžื•ื’ื“ืจ ื›ืืžืช ื”ืชื”ืœื™ื›ื™ื
ื™ื™ืฆื ื‘ื—ืŸ.

ืคื™ืงื•ื“ ืงื•
$ circusctl reloadconfig [--ืžืžืชื™ืŸ]

ื”ืคืขืœ ืžื—ื“ืฉ ืžื” ื”ื™ื ืคื•ืกืง or a ืฆื•ึนืคึถื”
ืคืงื•ื“ื” ื–ื• ื”ืคืขืœ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืชื”ืœื™ืš ื‘ืฆื•ืคื” ืื• ืืช ื›ืœ ื”ืฆื•ืคื™ื. ื”ืคื•ื ืงืฆื™ื” ื”ื–ื• ืคืฉื•ื˜
ืขืฆื•ืจ ืฆื•ืคื” ื•ืื– ื”ืคืขืœ ืื•ืชื• ืžื—ื“ืฉ.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ื”ืคืขืœ ืžื—ื“ืฉ",
"ื ื›ืกื™ื": {
"ืฉื": " ",
"ืžืžืชื™ืŸ": ืฉืงืจ,
"match": "[ืคืฉื•ื˜|ื’ืœื•ื‘|ืจื’ืงืก]"
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ".

ืื ืฉื ื”ื ื›ืก ืงื™ื™ื, ื”ื˜ืขื™ื ื” ืžื—ื“ืฉ ืชื•ื—ืœ ืขืœ ื”ืฆื•ืคื”.

If ื”ืžืชื ื” ื”ื•ื False (ื‘ืจื™ืจืช ืžื—ื“ืœ), ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืžื™ื“ ืœืื—ืจ ื”ืฉื™ื—ื” ืื•ืช_ืขืฆื™ืจื”
ืขืœ ื›ืœ ืชื”ืœื™ืš.

If ื”ืžืชื ื” ื ื›ื•ืŸ, ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืจืง ื›ืืฉืจ ืชื”ืœื™ืš ื”ื”ืคืขืœื” ืžื—ื“ืฉ ื™ื”ื™ื” ืžืœื
ื”ืกืชื™ื™ื. ื‘ื’ืœืœ ื”ืืคืฉืจื•ืช graceful_timeout, ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ืงืฆืช ื–ืžืŸ.

ื”ืฉืžื™ื™ื ืœื”ืชืื™ื ืคืจืžื˜ืจ ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืขืจืš ืคืฉื•ื˜ ืœื”ืฉื•ื•ืืช ืžื—ืจื•ื–ืช, ื’ื•ืฉ ืขื‘ื•ืจ ืชื• ื›ืœืœื™
ื”ืชืืžื” (ื‘ืจื™ืจืช ืžื—ื“ืœ) ืื• regex ืขื‘ื•ืจ ื”ืชืืžืช ื‘ื™ื˜ื•ื™ื™ื ืจื’ื™ืœื™ื.

ืคื™ืงื•ื“ ืงื•
$ circusctl ื”ืคืขืœ ืžื—ื“ืฉ [ืฉื] [--waiting] [--match=simple|glob|regex]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ืื• ืชื‘ื ื™ืช ืฉืœ ื”ืฆื•ืคื”/ื™ื

ยท : ืฉื™ื˜ืช ื”ืชืืžื” ืฉืœ ืฆื•ืคื”

ืœื”ืกื™ืจ a ืฆื•ึนืคึถื”
ืคืงื•ื“ื” ื–ื• ืžืกื™ืจื” ืฆื•ืคื” ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ืžื”ื‘ื•ืจืจ. ื”ืฆื•ืคื™ื ื”ื ื‘ื—ืŸ
ื”ื•ืคืกืง ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "rm",
"ื ื›ืกื™ื": {
"ืฉื": " ",
"nostop": ืฉืงืจ,
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ".

If ืื™ืŸ ืขืฆื™ืจื” ื ื›ื•ืŸ (ื‘ืจื™ืจืช ืžื—ื“ืœ: False), ื”ืชื”ืœื™ื›ื™ื ืขื‘ื•ืจ ื”ืฆื•ืคื” ืœื ื™ื•ืคืกืงื• -
ื‘ืžืงื•ื ื–ืืช, ื”ืฆื•ืคื” ืคืฉื•ื˜ ื™ื™ืฉื›ื— ืขืœ ื™ื“ื™ ื”ืงืจืงืก ื•ืชื”ืœื™ื›ื™ ื”ืฆื•ืคื” ื™ื”ื™ื•
ืื—ืจืื™ื ืœืขืฆื•ืจ ืืช ืขืฆืžื. ืื ืื™ืŸ ืขืฆื™ืจื” ืœื ืฆื•ื™ืŸ ืื• ืฉื”ื•ื False, ืื– ื”-
ืชื”ืœื™ื›ื™ ื”ืฆื•ืคื” ื™ื•ืคืกืงื• ื‘ื—ืŸ.

If ื”ืžืชื ื” ื”ื•ื False (ื‘ืจื™ืจืช ืžื—ื“ืœ), ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืžื™ื“ ืœืื—ืจ ืชื—ื™ืœืช ื”ื”ืกืจื”
ื•ืœืขืฆื•ืจ ืืช ื”ืฆื•ืคื” ื”ืžืงื‘ื™ืœ.

If ื”ืžืชื ื” ื ื›ื•ืŸ, ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืจืง ืœืื—ืจ ืชื”ืœื™ืš ื”ื”ืกืจื” ื•ื”ืขืฆื™ืจื”
ื”ืกืชื™ื™ื ืœื—ืœื•ื˜ื™ืŸ. ื‘ื’ืœืœ ื”ืืคืฉืจื•ืช graceful_timeout, ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ืงืฆืช ื–ืžืŸ.

ืคื™ืงื•ื“ ืงื•
$ circusctl rm [--ืžื—ื›ื”] [--nostop]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื” ืฉื™ืฉ ืœื”ืกื™ืจ

ยท nostop: ืืœ ืชืคืกื™ืง ืืช ืชื”ืœื™ื›ื™ ื”ืฆื•ืคื”, ืคืฉื•ื˜ ื”ืกืจ ืืช ื”ืฆื•ืคื”

ืœืงื‘ื•ืข a ืฆื•ึนืคึถื” ืื•ึนืคึผึฐืฆึดื™ึธื”
ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ืงื‘ืข",
"ื ื›ืกื™ื": {
"name": "nameofwatcher",
"ืืคืฉืจื•ื™ื•ืช": {
"key1": "val1",
..
}
"ืžื—ื›ื”": ืœื ื ื›ื•ืŸ
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ". ืขื™ื™ืŸ ื‘ืคืงื•ื“ื” 'ืืคืฉืจื•ื™ื•ืช' ืขื‘ื•ืจ ืจืฉื™ืžื” ืฉืœ ืžืคืชื—ื•ืช ืœื”ื’ื“ืจื”.

ืคื™ืงื•ื“ ืงื•
$ circusctl ืกื˜ --ื”ึทืžืชึธื ึธื”

ืฉื™ืœื—ื• a ืื•ึนืช
ืคืงื•ื“ื” ื–ื• ืžืืคืฉืจืช ืœืฉืœื•ื— ืื•ืช ืœื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื”, ืชื”ืœื™ืš ืกืคืฆื™ืคื™
ื‘ืฆื•ืคื” ืื• ื‘ื™ืœื“ื™ื•.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
ื›ื“ื™ ืœืฉืœื•ื— ืื•ืช ืœื›ืœ ื”ืชื”ืœื™ื›ื™ื ืขื‘ื•ืจ ืฆื•ืคื”:

{
"command": "ืื•ืช",
"ืชื›ื•ื ื”": {
"ืฉืึตื": ,
"ืกื™ืžืŸ":
}

ื›ื“ื™ ืœืฉืœื•ื— ืื•ืช ืœืชื”ืœื™ืš:

{
"command": "ืื•ืช",
"ืชื›ื•ื ื”": {
"ืฉืึตื": ,
"pid": ,
"ืกื™ืžืŸ":
}

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื ื›ืก ืื•ืคืฆื™ื•ื ืœื™ "ื™ืœื“ื™ื" ื›ื“ื™ ืœืฉืœื•ื— ืืช ื”ืื•ืช ืœื›ืœ ื”ื™ืœื“ื™ื ื“ื•ื•ืงื
ืžืืฉืจ ื”ืชื”ืœื™ืš ืขืฆืžื•:

{
"command": "ืื•ืช",
"ืชื›ื•ื ื”": {
"ืฉืึตื": ,
"pid": ,
"ืกื™ืžืŸ": ,
"ื™ืœื“ื™ื": ื ื›ื•ืŸ
}

ื›ื“ื™ ืœืฉืœื•ื— ืื•ืช ืœื™ืœื“ ื‘ืชื”ืœื™ืš:

{
"command": "ืื•ืช",
"ืชื›ื•ื ื”": {
"ืฉืึตื": ,
"pid": ,
"ืกื™ืžืŸ": ,
"child_pid": ,
}

ืืคืฉืจ ื’ื ืœืฉืœื•ื— ืื•ืช ืœื›ืœ ื™ืœื“ื™ ื”ืฆื•ืคื”:

{
"command": "ืื•ืช",
"ืชื›ื•ื ื”": {
"ืฉืึตื": ,
"ืกื™ืžืŸ": ,
"ื™ืœื“ื™ื": ื ื›ื•ืŸ
}

ืœื‘ืกื•ืฃ, ืืชื” ื™ื›ื•ืœ ืœืฉืœื•ื— ืื•ืช ืœืชื”ืœื™ืš ื• ื™ืœื“ื™ื”, ืขื ื” ืจืงื•ืจืกื™ื‘ื™ืช ืืคืฉืจื•ืช:

{
"command": "ืื•ืช",
"ืชื›ื•ื ื”": {
"ืฉืึตื": ,
"ืกื™ืžืŸ": ,
"ืจืงื•ืจืกื™ื‘ื™": ื ื›ื•ืŸ
}

ืคื™ืงื•ื“ ืงื•
ืื•ืช circusctl $ [ ] [--ื™ืœื“ื™ื]
[--ืจืงื•ืจืกื™ื‘ื™]

ืืคืฉืจื•ื™ื•ืช:
ยท : ืฉื ื”ืฆื•ืคื”

ยท : ืžืกืคืจ ืฉืœื, ืžื–ื”ื” ื”ืชื”ืœื™ืš.

ยท : ืžืกืคืจ ื”ืื•ืช (ืื• ื”ืฉื) ืœืฉืœื™ื—ื”.

ยท : ืคื™ื“ ืฉืœ ื™ืœื“, ืื ื‘ื›ืœืœ

ยท : ื‘ื•ืœื™ืื ื™, ืฉืœื— ืืช ื”ืื•ืช ืœื›ืœ ื”ื™ืœื“ื™ื

ยท : ื‘ื•ืœื™ืื ื™, ืฉืœื— ืืช ื”ืื•ืช ืœืชื”ืœื™ืš ื•ืœื™ืœื“ื™ื•

ื”ึทืชื—ึธืœึธื” ืžื” ื”ื™ื ืคื•ืกืง or a ืฆื•ึนืคึถื”
ืคืงื•ื“ื” ื–ื• ืžืชื—ื™ืœื” ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื” ืื• ืืช ื›ืœ ื”ืฆื•ืคื™ื.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ื”ืชื—ืœ",
"ื ื›ืกื™ื": {
"ืฉื":' ",
"ืžืžืชื™ืŸ": ืฉืงืจ,
"match": "[ืคืฉื•ื˜|ื’ืœื•ื‘|ืจื’ืงืก]"
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ".

ืื ืฉื ื”ื ื›ืก ืงื™ื™ื, ื”ืฆื•ืคื” ื™ื•ืคืขืœ.

If ื”ืžืชื ื” ื”ื•ื False (ื‘ืจื™ืจืช ืžื—ื“ืœ), ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืžื™ื“ ืœืื—ืจ ื”ืฉื™ื—ื” ื”ืชื—ืœื” on
ื›ืœ ืชื”ืœื™ืš.

If ื”ืžืชื ื” ื ื›ื•ืŸ, ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืจืง ื›ืืฉืจ ืชื”ืœื™ืš ื”ื”ืชื—ืœื” ื™ืกืชื™ื™ื ืœื—ืœื•ื˜ื™ืŸ.
ื‘ื’ืœืœ ื”ืืคืฉืจื•ืช graceful_timeout, ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ืงืฆืช ื–ืžืŸ.

ื”ืฉืžื™ื™ื ืœื”ืชืื™ื ืคืจืžื˜ืจ ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืขืจืš ืคืฉื•ื˜ ืœื”ืฉื•ื•ืืช ืžื—ืจื•ื–ืช, ื’ื•ืฉ ืขื‘ื•ืจ ืชื• ื›ืœืœื™
ื”ืชืืžื” (ื‘ืจื™ืจืช ืžื—ื“ืœ) ืื• regex ืขื‘ื•ืจ ื”ืชืืžืช ื‘ื™ื˜ื•ื™ื™ื ืจื’ื™ืœื™ื.

ืคื™ืงื•ื“ ืงื•
$ circusctl ื”ืคืขืœ ืžื—ื“ืฉ [ืฉื] [--waiting] [--match=simple|glob|regex]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ืื• ืชื‘ื ื™ืช ืฉืœ ื”ืฆื•ืคื”/ื™ื

ยท : ืฉื™ื˜ืช ื”ืชืืžื” ืฉืœ ืฆื•ืคื”

ืœืงื‘ืœ ืชื”ืœื™ืš infos
ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื‘ื›ืœ ืขืช ื›ืžื” ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืขืœ ื”ืชื”ืœื™ื›ื™ื ืฉืœืš ืขื ื”ืคืงื•ื“ื” stat.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
ื›ื“ื™ ืœืงื‘ืœ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขื‘ื•ืจ ื›ืœ ื”ืฆื•ืคื™ื:

{
"command": "ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช"
}

ื›ื“ื™ ืœืงื‘ืœ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขื‘ื•ืจ ืฆื•ืคื”:

{
"command": "ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช",
"ื ื›ืกื™ื": {
"ืฉืึตื":
}
}

ื›ื“ื™ ืœืงื‘ืœ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขื‘ื•ืจ ืชื”ืœื™ืš:

{
"command": "ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช",
"ื ื›ืกื™ื": {
"ืฉืึตื": ,
"ืชื”ืœื™ืš":
}
}

ื ื™ืชืŸ ืœื”ืจื—ื™ื‘ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขื ื”-extend_stats ื”ื•ืง, ืืš ื™ืฉ ืฆื•ืจืš ื‘ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืžื•ืจื—ื‘ื™ื
ื‘ื™ืงืฉ:

{
"command": "ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช",
"ื ื›ืกื™ื": {
"ืฉืึตื": ,
"ืชื”ืœื™ืš": ,
"ืžื•ืจื—ื‘": ื ื›ื•ืŸ
}
}

ื”ืชื’ื•ื‘ื” ืชื›ื•ื ื” ืžื—ื“ืฉ ืื•ื‘ื™ื™ืงื˜ ืœื›ืœ ืชื”ืœื™ืš ืขื ื”ืžืืคื™ื™ืŸ "ืžื™ื“ืข" ื”ืžื›ื™ืœ ืชื”ืœื™ืš ื›ืœืฉื”ื•
ืžื™ื“ืข:

{
"ืžื™ื“ืข": {
"ื™ืœื“ื™ื": [],
"cmdline": "ืคื™ืชื•ืŸ",
"ืžืขื‘ื“": 0.1,
"ctime": "0:00.41",
"ืžืž": 0.1,
"mem_info1": "3 ืžื™ืœื™ื•ืŸ",
"mem_info2": "2G",
"ื ื—ืžื“": 0,
"pid": 47864,
"ืฉื ืžืฉืชืžืฉ": "ืฉื•ืจืฉ"
},
"ืชื”ืœื™ืš": 5,
"status": "ื‘ืกื“ืจ",
"ื–ืžืŸ": 1332265655.897085
}

ืคื™ืงื•ื“ ืงื•
$ circusctl ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช [--ืžื•ืจื—ื‘] [ ] [ ]

ืœืงื‘ืœ ืžื” ื”ื™ื ืžืฆื‘ of a ืฆื•ึนืคึถื” or ืืช ื›ืœ ืฆื•ืคื™ื
ืคืงื•ื“ื” ื–ื• ื”ืชื—ืœ ืœืงื‘ืœ ืืช ื”ืกื˜ื˜ื•ืก ืฉืœ ืฆื•ืคื” ืื• ื›ืœ ื”ืฆื•ืคื™ื.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ืกื˜ื˜ื•ืก",
"ื ื›ืกื™ื": {
"ืฉื":' ",
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ืคืขื™ืœ" ืื• "ื ืขืฆืจ" ืื• ืืช ื”ืกื˜ื˜ื•ืก / ืฆื•ืคื™ื.

ืคื™ืงื•ื“ ืงื•
$ circusctl status [ ]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ื”ืฆื•ืคื”

ื“ื•ื’ืžื”
$ circusctl ืกื˜ื˜ื•ืก ื“ืžื”
ืคืขื™ืœ
$ circusctl ืกื˜ื˜ื•ืก
ื“ืžื”: ืคืขื™ืœ
dummy2: ืคืขื™ืœ
ืžืงืœื˜: ืคืขื™ืœ

ืขืฆื•ืจ ืฆื•ืคื™ื
ืคืงื•ื“ื” ื–ื• ืขื•ืฆืจืช ืฆื•ืคื” ื ืชื•ืŸ ืื• ืืช ื›ืœ ื”ืฆื•ืคื™ื.

ZMQ ื”ืขืจื•ืช ื ื•ืกืคื•ืช
{
"command": "ืขืฆื•ืจ",
"ื ื›ืกื™ื": {
"ืฉื": " ",
"ืžืžืชื™ืŸ": ืฉืงืจ,
"match": "[ืคืฉื•ื˜|ื’ืœื•ื‘|ืจื’ืงืก]"
}
}

ื”ืชื’ื•ื‘ื” ืžื—ื–ื™ืจื” ืืช ื”ืกื˜ื˜ื•ืก "ื‘ืกื“ืจ".

ืื ืฉื ื”ื ื›ืก ืงื™ื™ื, ื•ืื– ื”ืขืฆื™ืจื” ืชื—ื•ืœ ืขืœ ื”ืฆื•ืคื”
ืžืชืื™ื ืœืฉื ื–ื”. ืื—ืจืช, ื›ืœ ื”ืฆื•ืคื™ื ื™ื™ืขืฆืจื•.

If ื”ืžืชื ื” ื”ื•ื False (ื‘ืจื™ืจืช ืžื—ื“ืœ), ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืžื™ื“ ืœืื—ืจ ื”ืฉื™ื—ื” ืื•ืช_ืขืฆื™ืจื”
ืขืœ ื›ืœ ืชื”ืœื™ืš.

If ื”ืžืชื ื” ื ื›ื•ืŸ, ื”ืฉื™ื—ื” ืชื—ื–ื•ืจ ืจืง ื›ืืฉืจ ืชื”ืœื™ืš ื”ืขืฆื™ืจื” ื™ืกืชื™ื™ื ืœื—ืœื•ื˜ื™ืŸ.
ื‘ื’ืœืœ ื”ืืคืฉืจื•ืช graceful_timeout, ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ืงืฆืช ื–ืžืŸ.

ื”ืฉืžื™ื™ื ืœื”ืชืื™ื ืคืจืžื˜ืจ ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืขืจืš ืคืฉื•ื˜ ืœื”ืฉื•ื•ืืช ืžื—ืจื•ื–ืช, ื’ื•ืฉ ืขื‘ื•ืจ ืชื• ื›ืœืœื™
ื”ืชืืžื” (ื‘ืจื™ืจืช ืžื—ื“ืœ) ืื• regex ืขื‘ื•ืจ ื”ืชืืžืช ื‘ื™ื˜ื•ื™ื™ื ืจื’ื™ืœื™ื.

ืคื™ืงื•ื“ ืงื•
$ circusctl stop [name] [--waiting] [--match=simple|glob|regex]

ืืคืฉืจื•ื™ื•ืช
ยท : ืฉื ืื• ืชื‘ื ื™ืช ืฉืœ ื”ืฆื•ืคื”/ื™ื

ยท : ืฉื™ื˜ืช ื”ืชืืžื” ืฉืœ ืฆื•ืคื”

CLI ื›ืœื™ื
ื˜ื•ืค ืงืจืงืก
ื˜ื•ืค ืงืจืงืก ื”ื™ื ืงื•ื ืกื•ืœื” ื“ืžื•ื™ื™ืช ืžื•ื‘ื™ืœื” ืฉืชื•ื›ืœ ืœื”ืคืขื™ืœ ื›ื“ื™ ืœืฆืคื•ืช ื‘ืฉื™ื“ื•ืจ ื—ื™ ื‘ืžืขืจื›ืช ื”-Circus ืฉืœืš. ื–ื”
ื™ืฆื™ื’ ืืช ื”-CPU, ืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ ื•ื›ื ื™ืกื•ืช ืฉืงืข ืื ื™ืฉ ืœืš.

ื“ื•ื’ืžื” ืœืคืœื˜:

-------------------------------------------------- ---------------------
ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก
PID CPU (%) ื–ื™ื›ืจื•ืŸ (%)
14252 0.8 0.4
0.8 (ืžืžื•ืฆืข) 0.4 (ืกื›ื•ื)

ื“ืžื”
PID CPU (%) ื–ื™ื›ืจื•ืŸ (%)
14257 78.6 0.1
14256 76.6 0.1
14258 74.3 0.1
14260 71.4 0.1
14259 70.7 0.1
74.32 (ืžืžื•ืฆืข) 0.5 (ืกื›ื•ื)

-------------------------------------------------- --------------------

ื˜ื•ืค ืงืจืงืก ื”ื™ื ืงื•ื ืกื•ืœื” ืœืงืจื™ืื” ื‘ืœื‘ื“. ืื ืืชื” ืจื•ืฆื” ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืžืขืจื›ืช, ื”ืฉืชืžืฉ circusctl.

circusctl
circusctl ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื”ืคืขื™ืœ ื›ืœ ืคืงื•ื“ื” ื”ืจืฉื•ืžื” ื‘ืคืงื•ื“ื•ืช. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื
ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืฆื•ืคื™ื, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช

ืจืฉื™ืžืช $ circusctl

ืžืœื‘ื“ ืชืžื™ื›ื” ื‘ืงื•ืžืฅ ืืคืฉืจื•ื™ื•ืช, ืืชื” ื™ื›ื•ืœ ื’ื ืœืฆื™ื™ืŸ ืืช ื ืงื•ื“ืช ื”ืงืฆื” circusctl ืฆืจื™ืš
ืœื”ืฉืชืžืฉ ื‘ืืžืฆืขื•ืช CIRCUSCTL_ENDPOINT ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื”.

ื”ืฉืžื™ื™ื ืื™ื ื˜ืจื ื˜ ืงื•ื ืกื•ืœ
Circus ืžื’ื™ืข ืขื ืงื•ื ืกื•ืœืช ืื™ื ื˜ืจื ื˜ ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ืœื ื™ื”ื•ืœ ื”ืžืขืจื›ืช.

ืžืกื•ืฃ ื”ืื™ื ื˜ืจื ื˜ ืžืืคืฉืจ ืœืš:

ยท ื”ืชื—ื‘ืจ ืœื›ืœ ืžืขืจื›ืช Circus ืคื•ืขืœืช

ยท ืฆืคื• ื‘ืชื”ืœื™ื›ื™ ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ ื•ื‘ื–ื™ื›ืจื•ืŸ ื‘ื–ืžืŸ ืืžืช

ยท ื”ื•ืกืฃ ืื• ื”ืจื’ ืชื”ืœื™ื›ื™ื

ยท ื”ื•ืกืฃ ืฆื•ืคื™ื ื—ื“ืฉื™ื

ื”ืขืจื”:
ืชื›ื•ื ืช ื”ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ ื•ื–ื™ื›ืจื•ืŸ ื‘ื–ืžืŸ ืืžืช ืžืฉืชืžืฉืช ื‘ืฉืงืข ื”ืกื˜ื˜ื™ืกื˜ื™ืงื”. ืื ืืชื” ืจื•ืฆื”
ื”ืคืขืœ ืื•ืชื•, ื•ื“ื ืฉืžืขืจื›ืช ื”ืกื™ืจืงื•ืก ืฉืืœื™ื” ืชืชื—ื‘ืจ ืžื›ื™ืœื” ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื
ืžื•ืคืขืœ ื‘ืชืฆื•ืจื” ืฉืœื•:

[ืงืจืงืก]
statsd = ื ื›ื•ืŸ

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืืคืฉืจื•ืช ื–ื• ืื™ื ื” ืžื•ืคืขืœืช.

ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜ ื”ื™ื ื—ื‘ื™ืœื” ืžืฉืœื”, ืขืœื™ืš ืœื”ืชืงื™ืŸ:

$ pip ืœื”ืชืงื™ืŸ circus-web

ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืžืกื•ืฃ, ื”ื•ืกืฃ ื›ืžื” ืืคืฉืจื•ื™ื•ืช ื‘ืงื•ื‘ืฅ Circus ini:

[ืงืจืงืก]
httpd = ื ื›ื•ืŸ
httpd_host = ืžืืจื— ืžืงื•ืžื™
httpd_port = 8080

httpd_host ื• httpd_port ื”ื ืื•ืคืฆื™ื•ื ืœื™ื™ื, ื•ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื localhost ื• 8080.

ืื ืืชื” ืจื•ืฆื” ืœื”ืคืขื™ืœ ืืช ืืคืœื™ืงืฆื™ื™ืช ื”ืื™ื ื˜ืจื ื˜ ืœื‘ื“, ืคืฉื•ื˜ ื”ืคืขืœ ืืช circushttpd ืชึทืกืจึดื™ื˜:

$ circushttpd
ืฉืจืช ื‘ืงื‘ื•ืงื™ื ืžื•ืคืขืœ...
ืžืื–ื™ืŸ ื”ืœืื” http://localhost: 8080 /
ืœื—ืฅ ืขืœ Ctrl-C ื›ื“ื™ ืœืฆืืช.

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื”ืกืงืจื™ืคื˜ ื™ืจื™ืฅ ืืช ืžืกื•ืฃ ื”ืื™ื ื˜ืจื ื˜ ื‘ื™ืฆื™ืื” 8080, ืื‘ืœ ื”ืืคืฉืจื•ืช --port ื™ื›ื•ืœื” ืœื”ื™ื•ืช
ื ื”ื’ ืœืฉื ื•ืช ืืช ื–ื”.

ืฉื™ืžื•ืฉ ืžื” ื”ื™ื ืœื ื—ื
ืœืื—ืจ ืฉื”ืกืงืจื™ืคื˜ ืคื•ืขืœ, ืืชื” ื™ื›ื•ืœ ืœืคืชื•ื— ื“ืคื“ืคืŸ ื•ืœื‘ืงืจ http://localhost: 8080. ืืชื”
ืฆืจื™ืš ืœืงื‘ืœ ืืช ื”ืžืกืš ื”ื–ื”: [ืชืžื•ื ื”]

ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜ ืžื•ื›ื ื” ืœื—ื™ื‘ื•ืจ ืœืžืขืจื›ืช Circus, ื‘ื”ืชื—ืฉื‘ ื‘ื” ื ืงื•ื“ืช ืกื™ื•ื. ืขืœ ื™ื“ื™
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ื ืงื•ื“ืช ื”ืงืฆื” tcp://127.0.0.1:5555.

ื‘ืจื’ืข ืฉืืชื” ืžื›ื” ืœึฐื—ึทื‘ึผึตืจ, ืืคืœื™ืงืฆื™ื™ืช ื”ืื™ื ื˜ืจื ื˜ ืชืชื—ื‘ืจ ืœืžืขืจื›ืช ื”ืงืจืงืก.

ื›ืืฉืจ ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜ ืžื—ื•ื‘ืจืช, ืืชื” ืืžื•ืจ ืœืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ืฆื•ืคื™ื ื•ืกื˜ื˜ื•ืก ื‘ื–ืžืŸ ืืžืช
ืฉืœ ืฉื ื™ ืชื”ืœื™ื›ื™ ื”ืงืจืงืก (ืกื™ืจืงืก ื•-circusd-stats).

ืืชื” ื™ื›ื•ืœ ืœืœื—ื•ืฅ ืขืœ ื”ืกื˜ื˜ื•ืก ืฉืœ ื›ืœ ืฆื•ืคื” ื›ื“ื™ ืœืขื‘ื•ืจ ืžืžื ื• Active (ื™ืจื•ืง) ืœ ืœื ืคืขื™ืœ
(ืึธื“ื•ึนื). ืฉื™ื ื•ื™ ื–ื” ืชืงืฃ ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ ื•ืžืืคืฉืจ ืœืš ืœื”ืชื—ื™ืœ ื•ืœืขืฆื•ืจ ืฆื•ืคื™ื.

ืื ืชืœื—ืฅ ืขืœ ืฉื ื”ืฆื•ืคื”, ืชืงื‘ืœ ื“ืฃ ืื™ื ื˜ืจื ื˜ ืขื‘ื•ืจ ืื•ืชื• ืฆื•ืคื” ืกืคืฆื™ืคื™,
ืขื ื”ืชื”ืœื™ื›ื™ื ืฉืœื•:

ื‘ืžืกืš ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืื• ืœื”ืกื™ืจ ืชื”ืœื™ื›ื™ื ื•ืœื”ืจื•ื’ ืชื”ืœื™ื›ื™ื ืงื™ื™ืžื™ื.

ืื—ืจื•ืŸ ื—ื‘ื™ื‘, ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืฆื•ืคื” ื—ื“ืฉ ืœื’ืžืจื™ ืขืœ ื™ื“ื™ ืœื—ื™ืฆื” ืขืœ ืœื”ื•ืกื™ืฃ ืฆื•ืคื” ืงื™ืฉื•ืจ ืคื ื™ืžื”
ื”ืชืคืจื™ื˜ ื”ืฉืžืืœื™: .SS ืคื•ืขืœ ืžืื—ื•ืจื™ Nginx

Nginx ื™ื›ื•ืœ ืœืฉืžืฉ ื›ืฉื›ื‘ืช ืคืจื•ืงืกื™ ื•ืื‘ื˜ื—ื” ืžื•ืœ ืจืฉืช ืงืจืงืก.

ื”ืขืจื”:
ื›ื“ื™ ืœืงื‘ืœ ืขื“ื›ื•ื ื™ ืกื˜ื˜ื•ืก ื•ื’ืจืคื™ื ื‘ื–ืžืŸ ืืžืช ื‘-circus-web, ืขืœื™ืš ืœืกืคืง Nginx
ืคืชืจื•ืŸ ืคืจื•ืงืกื™ ืฉื™ืฉ ืœื• ืชืžื™ื›ื” ื‘-websocket

nginx >= 1.3.13
ื”ื—ืœ ืž-Nginx>=1.3.13 ืชืžื™ื›ืช websocket ืžื•ื‘ื ื™ืช, ื›ืš ืฉืื™ืŸ ืฆื•ืจืš ืœืฉืœื‘ ืืช Nginx
ืขื ืœื›ื” ืื• HAProxy. ืชืฆื•ืจืช Nginx ืœื“ื•ื’ืžื” ืขื ืชืžื™ื›ื” ื‘-websocket:

ื‘ืžืขืœื” ื”ื–ืจื circusweb_server {
ืฉืจืช 127.0.0.1:8080;
}

ืฉืจืช {
ืœื”ืงืฉื™ื‘ 80;
ืฉื ืฉืจืช _;

ืžืงื•ื / {
proxy_pass http://circusweb_server;
proxy_http_version 1.1;
proxy_set_header ืฉื“ืจื•ื’ $http_upgrade;
proxy_set_header ื—ื™ื‘ื•ืจ "ืฉื“ืจื•ื’";
proxy_set_header ืžืืจื— $ ืžืืจื—;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for $;
proxy_set_header X-Forwarded-Proto http;
proxy_redirect off;
}

ืžื™ืงื•ื ~/media/\*(.png|.jpg|.css|.js|.ico)$ {
ื›ื™ื ื•ื™ /path_to_site-packages/circusweb/media/;
}
}

nginx < 1.3.13
ื’ืจืกืื•ืช Nginx < 1.3.13 ืื™ื ืŸ ื›ื•ืœืœื•ืช ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘-websocket.

ื›ื“ื™ ืœืกืคืง ืชืžื™ื›ื” ื‘-websocket ืขื‘ื•ืจ circus-web ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-Nginx < 1.3.13, ืืชื” ื™ื›ื•ืœ ืœืฉืœื‘
Nginx ืขื ืœื›ื” ืื• HAProxy. ื›ืœื•ืžืจ, Nginx ืžื•ืœ circus-web, ืขื Varnish ืื•
HAProxy ืžื•ืœ Nginx.

ื”ื“ื•ื’ืžื” ืœื”ืœืŸ ืžืฆื™ื’ื” ืืช ืชืฆื•ืจืช Nginix ื•- Varnish ื”ืžืฉื•ืœื‘ืช ื”ื ื“ืจืฉืช ืœ-proxy
circus-web ื•ืœืกืคืง ืชืžื™ื›ื” ื‘-websocket.

nginx Definitive

ื‘ืžืขืœื” ื”ื–ืจื circusweb_server {
ืฉืจืช 127.0.0.1:8080;
}

ืฉืจืช {
ืœื”ืงืฉื™ื‘ 8001;
ืฉื ืฉืจืช _;

ืžืงื•ื / {
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for $;
ืžืืจื— proxy_set_header $ HTTP_HOST;
proxy_redirect off;
proxy_pass http://circusweb_server;
}

ืžื™ืงื•ื ~/media/\*(.png|.jpg|.css|.js|.ico)$ {
ื›ื™ื ื•ื™ /path_to_site-packages/circusweb/media/;
}
}

ืื ืืชื” ืจื•ืฆื” ืขื•ื“ ืืคืฉืจื•ื™ื•ืช ืชืฆื•ืจื” ืฉืœ Nginx, ืจืื” http://wiki.nginx.org/HttpProxyModule.

ื•ืจื ื™ืช Definitive

ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืื—ื•ืจื™ืช {
.host = "127.0.0.1";
.port = "8001";
}

ืฉืงืข ืื—ื•ืจื™ {
.host = "127.0.0.1";
.port = "8080";
โ€Ž.connect_timeout = 1s;
.first_byte_timeout = 2 ืฉื ื™ื•ืช;
.between_bytes_timeout = 60 ืฉื ื™ื•ืช;
}

sub vcl_pipe {
if (req.http.upgrade) {
set bereq.http.upgrade = req.http.upgrade;
}
}

sub vcl_recv {
if (req.http.Upgrade ~ "(?i)websocket") {
set req.backend = socket;
ื—ื–ืจื” (ืฆื™ื ื•ืจ);
}
}

ื‘ื“ื•ื’ืžื” ืฉืœ ืชืฆื•ืจืช Varnish ืœืขื™ืœ ืžื•ื’ื“ืจื™ื ืฉื ื™ ืงืฆื” ืื—ื•ืจื™ื™ื. ืื—ื“ ื”ืžืฉืจืช ืืช ื”ืื™ื ื˜ืจื ื˜
ืงื•ื ืกื•ืœื” ื•ืื—ื“ ื”ืžืฉืจืช ืืช ื—ื™ื‘ื•ืจื™ ื”ืฉืงืข. ื‘ืงืฉื•ืช ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜ ื›ื‘ื•ืœื™ื ืœื™ืฆื™ืื”
8001. ื™ืฉ ืœื”ื’ื“ื™ืจ ืืช ื”ื”ื ื—ื™ื” 'ืฉืจืช' ืฉืœ Nginx ืœื”ืื–ื ื” ื‘ื™ืฆื™ืื” 8001.

ื—ื™ื‘ื•ืจื™ Websocket ืžืฉื•ื“ืจื’ื™ื ื•ืžื•ืขื‘ืจื™ื ื™ืฉื™ืจื•ืช ืœืชื”ืœื™ืš ื”ืื–ื ื” ืฉืœ circushttpd
ืขืœ ื ืžืœ 8080 ืขืœ ื™ื“ื™ Varnish. ื›ืœื•ืžืจ ืขืงื™ืคืช ืคืจื•ืงืกื™ Nginx.

ืื•ื‘ื•ื ื˜ื•
ืžืื– ื”ื’ืจืกื” 13.10 (ืกืื•ืกื™), ืื•ื‘ื•ื ื˜ื• ื›ื•ืœืœืช Nginx ืขื ืชืžื™ื›ื” ื‘-websocket ื‘ืคื ื™ ืขืฆืžื”
ืžืื’ืจื™ื. ืขื‘ื•ืจ ื’ืจืกืื•ืช ื™ืฉื ื•ืช ื™ื•ืชืจ, ืืชื” ื™ื›ื•ืœ ืœื”ืชืงื™ืŸ Nginx>=1.3.13 ืžื”-Nginx ื”ืจืฉืžื™
PPA ื™ืฆื™ื‘, ื›ืš:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nginx/stable
ืขื“ื›ื•ืŸ sudo apt-get
sudo apt-get ืœื”ืชืงื™ืŸ nginx
nginx -v

ื”ื’ืŸ ื‘ืืžืฆืขื•ืช ืกื™ืกืžื” circushttpd
ื›ืคื™ ืฉื”ื•ืกื‘ืจ ื‘ื“ืฃ ื”ืื‘ื˜ื—ื”, ืคื•ืขืœ circushttpd ื”ื•ื ื“ื™ ืœื ื‘ื˜ื•ื—. ืื ื—ื ื• ืœื ืžืกืคืงื™ื
ื›ืœ ืื‘ื˜ื—ื” ื‘ืกื™ืจืงื•ืก ืขืฆืžื•, ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœื”ื’ืŸ ืขืœ ื”ืงื•ื ืกื•ืœื” ืฉืœืš ื‘ืจืžืช NGinx, ืขืœ ื™ื“ื™
ื‘ืืžืฆืขื•ืช http://wiki.nginx.org/HttpAuthBasicModule

ื“ื•ื’ืžื:

ืžืงื•ื / {
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for $;
ืžืืจื— proxy_set_header $ HTTP_HOST;
proxy_set_header X-Forwarded-Host: $http_host;
proxy_set_header X-Forwarded-Proto: $scheme;
proxy_redirect off;
proxy_pass http://127.0.0.1: 8080;
auth_basic "ืžื•ื’ื‘ืœ";
auth_basic_user_file /path/to/htpasswd;
}

ื”ืฉืžื™ื™ื htpasswd ื”ืงื•ื‘ืฅ ืžื›ื™ืœ ืžืฉืชืžืฉื™ื ื•ืืช ื”ืกื™ืกืžืื•ืช ืฉืœื”ื, ื•ืžืชื™ ืชื•ืคื™ืข ื‘ืงืฉืช ืกื™ืกืžื”
ืืชื” ื ื™ื’ืฉ ืœืงื•ื ืกื•ืœื”.

ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืกืงืจื™ืคื˜ htpasswd ืฉืœ Apache ื›ื“ื™ ืœืขืจื•ืš ืื•ืชื•, ืื• ื‘ืกืงืจื™ืคื˜ Python ืฉื”ื ืžืกืคืงื™ื ื‘:
http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

ืขื ื–ืืช, ืื™ืŸ ืชืžื™ื›ื” ืžืงื•ืจื™ืช ืœืฉื™ืžื•ืฉ ื”ืžืฉื•ืœื‘ ื‘-HTTP Authentication ื•
WebSockets (ื”ืฉืจืช ื™ื–ืจื•ืง ืงื•ื“ื™ ืฉื’ื™ืื” ืฉืœ HTTP 401). ื“ืจืš ืœืขืงื™ืคืช ื”ื‘ืขื™ื” ื”ื™ื ืœื”ืฉื‘ื™ืช ื›ืืœื”
ืื™ืžื•ืช ืขื‘ื•ืจ ืฉืจืช socket.io.

ื“ื•ื’ืžื” (ื™ืฉ ืœื”ื•ืกื™ืฃ ืœืคื ื™ ื”ื›ืœืœ ื”ืงื•ื“ื):

ืžื™ืงื•ื /socket.io {
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for $;
ืžืืจื— proxy_set_header $ HTTP_HOST;
proxy_set_header X-Forwarded-Host: $http_host;
proxy_set_header X-Forwarded-Proto: $scheme;
proxy_redirect off;
proxy_pass http://127.0.0.1: 8080;
}

ื›ืžื•ื‘ืŸ ืฉื–ื• ืจืง ื“ืจืš ืื—ืช ืœื”ื’ืŸ ืขืœ ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜ ืฉืœืš, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืจื‘ื•ืช ืื—ืจื•ืช
ื˜ื›ื ื™ืงื•ืช.

ืžืืจื™ืš ืžื” ื”ื™ื ืื™ื ื˜ืจื ื˜ ืœื ื—ื
ื‘ื—ืจื ื• ื‘ืงื‘ื•ืง ืœื‘ื ื•ืช ืืช ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜, ื‘ืขื™ืงืจ ื‘ื’ืœืœ ืฉื–ื• ืžืกื’ืจืช ืžืžืฉ ื–ืขื™ืจื”
ืœื ืขื•ืฉื” ื”ืจื‘ื”. ืขื™ื•ืŸ ื‘ืงื•ื“ ืฉืœ ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜, ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืชืžืฆื
ื”ื—ื•ืฆื” ืฉื–ื” ืžืžืฉ ืคืฉื•ื˜ ืœื”ื‘ื ื”.

ื”ื ื” ืื™ืš ื–ื” ืžื—ื•ืœืง:

ยท circushttpd.py ื”ืงื•ื‘ืฅ ืžื›ื™ืœ ืืช ื”ื’ื“ืจื•ืช "ืชืฆื•ื’ื•ืช" ื•ืงืฆืช ืงื•ื“ ืœื˜ื™ืคื•ืœ ื‘
ื—ื™ื‘ื•ืจ ืฉืงืข (ื‘ืืžืฆืขื•ืช socketio).

ยท ื” controller.py ืžื›ื™ืœ ืžื—ืœืงื” ืื—ืช ืฉืื—ืจืื™ืช ืขืœ ื‘ื™ืฆื•ืข ื”ืชืงืฉื•ืจืช
ืขื ื‘ืงืจ ื”ืงืจืงืก. ื–ื” ืžืืคืฉืจ ืœืงื‘ืœ API ื‘ืจืžื” ื’ื‘ื•ื”ื” ื™ื•ืชืจ ื›ืฉืžื’ื“ื™ืจื™ื ืืช
ืฉืจืช ืื™ื ื˜ืจื ื˜.

ืื ื‘ืจืฆื•ื ืš ืœื”ื•ืกื™ืฃ ืชื›ื•ื ื” ื‘ืงื•ื ืกื•ืœืช ื”ืื™ื ื˜ืจื ื˜, ืชื•ื›ืœ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืงื•ื“ ื”ืงื™ื™ื. ื
ื›ืžื” ื›ืœื™ื ืขื•ืžื“ื™ื ืœืจืฉื•ืชืš ื›ื“ื™ ืœื”ืงืœ ืขืœ ื”ืชื”ืœื™ืš:

ยท ื™ืฉ ืœื“ืงืœื ืคื•ื ืงืฆื™ื”, ืฉืœื•ืงื—ืช ืืช ื”ืืจื’ื•ืžื ื˜ื™ื ื‘ืขืœื™ ื”ืฉื ืฉืืชื” ืžืขื‘ื™ืจ ืืœื™ื” ื•
ืœื”ืขื‘ื™ืจ ืื•ืชื ืœืžืขื‘ื“ ื”ืชื‘ื ื™ื•ืช ื•ืœื”ื—ื–ื™ืจ ืืช ื”-HTML ืฉื ื•ืฆืจ. ื–ื” ื’ื ืขื•ื‘ืจ ื—ืœืง
ืžืฉืชื ื™ื ื ื•ืกืคื™ื, ื›ื’ื•ืŸ ื”ืคื’ื™ืฉื”, ื’ืจืกืช ื”ืงืจืงืก ื•ื”ืœืงื•ื— ืื ื”ื•ื’ื“ืจ.

ยท ืื ืืชื” ืจื•ืฆื” ืœื”ืจื™ืฅ ืคืงื•ื“ื•ืช ื•ืœืขืฉื•ืช ื ื™ืชื•ื‘ ืžื—ื“ืฉ ื‘ื”ืชืื ืœืชื•ืฆืื” ืฉืœ ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ
ืžื” ื”ื™ื run_command ืคื•ื ืงืฆื™ื”, ืฉืœื•ืงื—ืช ืืจื’ื•ืžื ื˜ ืฉื ื™ืชืŸ ืœืงืจื•ื ื›ืืจื’ื•ืžื ื˜ ืจืืฉื•ืŸ, ื”ื•ื“ืขื” ื‘ืžืงืจื”
ืฉืœ ื”ืฆืœื—ื” ื•ื›ืชื•ื‘ืช ืืชืจ ืœื”ืคื ื™ื” ืžื—ื“ืฉ.

ื”ืฉืžื™ื™ื ืžืจื—ื‘ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื class ืื—ืจืื™ืช ืœื ื™ื”ื•ืœ ืชืงืฉื•ืจืช ื”-websocket ื‘-
ื‘ืฆื“ ื”ืฉืจืช. ื”ืชื™ืขื•ื“ ืฉืœื• ืืžื•ืจ ืœืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ ืžื” ื”ื•ื ืขื•ืฉื”.

ืขื‘ื•ื“ื” ืขื ืืจื•ื‘ื•ืช
Circus ื™ื›ื•ืœ ืœืื’ื“ ืฉืงืขื™ ืจืฉืช ื•ืœื ื”ืœ ืื•ืชื ื›ืคื™ ืฉื”ื•ื ืขื•ืฉื” ืขื‘ื•ืจ ืชื”ืœื™ื›ื™ื.

ื”ืจืขื™ื•ืŸ ื”ืžืจื›ื–ื™ ื”ื•ื ืฉืชื”ืœื™ืš ื™ืœื“ ืฉื ื•ืฆืจ ืขืœ ื™ื“ื™ ืงืจืงืก ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ืื—ื“ ื”ืฆื•ืคื™ื
ื”ืคืงื•ื“ื” ื™ื›ื•ืœื” ืœืจืฉืช ืžื›ืœ ืžืชืืจื™ ื”ืงื•ื‘ืฅ ืฉื ืคืชื—ื•.

ื›ืš ืขื•ื‘ื“ ืืคืืฆ'ื™ ืื• ื—ื“ ืงืจืŸ, ื•ื›ืœื™ื ืจื‘ื™ื ืื—ืจื™ื ื‘ื—ื•ืฅ.

ืžื˜ืจื”
ื”ืžื˜ืจื” ืฉืœ ืฉืงืขื™ื ื”ืžื ื•ื”ืœื™ื ืขืœ ื™ื“ื™ Circus ื”ื™ื ืœื”ื™ื•ืช ืžืกื•ื’ืœื™ื ืœื ื”ืœ ืืคืœื™ืงืฆื™ื•ืช ืจืฉืช
ื‘ืงืจืงืก ื‘ื“ื™ื•ืง ื›ืžื• ืืคืœื™ืงืฆื™ื•ืช ืื—ืจื•ืช.

ืœื“ื•ื’ืžื”, ืื ืืชื” ืžืฉืชืžืฉ ื‘ืกื™ืจืงื•ืก ืขื ื’ึถืจึถื‘ -- ืฉืจืช WGSI, ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืฉืจืช ืžื”ื™ืจ ืžืื•ื“
ืฉืจืช ืื™ื ื˜ืจื ื˜ ืคื•ืขืœ ื•ืžื ื”ืœ "ืื™ื ื˜ืจื ื˜ ืขื•ื‘ื“ื™ื" ื‘ืงืจืงืก ื›ืคื™ ืฉื”ื™ื™ืช ืขื•ืฉื” ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืื—ืจ
ื”ืชื”ืœื™ืš.

ืคื™ืฆื•ืœ ื ื™ื”ื•ืœ ื”ืฉืงืขื™ื ืžืืคืœื™ืงืฆื™ื™ืช ื”ืจืฉืช ืขืฆืžื” ืžืฆื™ืข ื”ืจื‘ื”
ื”ื–ื“ืžื ื•ื™ื•ืช ืœื”ืจื—ื™ื‘ ื•ืœื ื”ืœ ืืช ื”ืขืจื™ืžื” ืฉืœืš.

ืขื™ืฆื•ื‘
ืขื™ืงืจ ื”ืชื›ื•ื ื” ื ืขืฉื” ืขืœ ื™ื“ื™ ืงืฉื™ืจืช ื”ืฉืงืข ื•ื”ืชื—ืœ ืœื”ืื–ื™ืŸ ืœื• ืคื ื™ืžื”
ืงืจืงืก:

ืฉืงืข ื™ื‘ื•ื

sock = socket.socket(FAMILY, TYPE)
sock.bind((HOST, PORT))
sock.listen(BACKLOG)
fd = sock.fileno()

ืœืื—ืจ ืžื›ืŸ ืงืจืงืก ืขื•ืงื‘ ืื—ืจ ื›ืœ ื”-fds ืฉื ืคืชื—ื•, ื•ื ื•ืชืŸ ืœืชื”ืœื™ื›ื™ื ืฉื”ื•ื ืžืจื™ืฅ ื‘ื™ืœื“ื•ืชื
ื™ืฉ ืœื”ื ื’ื™ืฉื” ืืœื™ื”ื ืื ื”ื ืจื•ืฆื™ื.

ืื ืชื™ืฆื•ืจ ืกืงืจื™ืคื˜ ืจืฉืช ืงื˜ืŸ ืฉืœ Python ืฉืืชื” ืžืชื›ื•ื•ืŸ ืœื”ืคืขื™ืœ ื‘-Circus, ื–ื” ื™ื›ื•ืœ
ื ืจืื” ื›ืžื• ื–ื”:

ืฉืงืข ื™ื‘ื•ื
ื™ื™ื‘ื•ื

fd = int(sys.argv[1]) # ืžืงื‘ืœ ืืช ื”-FD ืžื”ืงืจืงืก
sock = socket.fromfd(fd, FAMILY, TYPE)

# ื˜ื™ืคื•ืœ ื‘ื‘ืงืฉื” ืื—ืช ื‘ื›ืœ ืคืขื
ื‘ืขื•ื“ ื ื›ื•ืŸ:
conn, addr = sock.accept()
ื‘ืงืฉื” = conn.recv(1024)
.. ืชืขืฉื” ืžืฉื”ื• ..
conn.sendall(response)
conn.close()

ืื– ืงืจืงืก ื™ื›ื•ืœ ืœืจื•ืฅ ื›ืš:

[ืงืจืงืก]
check_delay = 5
ื ืงื•ื“ืช ืงืฆื” = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[ืฆื•ืคื”:ื“ืžื”]
cmd = mycoolscript $(circus.sockets.foo)
use_sockets = ื ื›ื•ืŸ
delay_warmup = 0
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 5

[socket:foo]
ืžืืจื— = 127.0.0.1
ื™ืฆื™ืื” = 8888

$(circus.sockets.foo) ื™ื•ื—ืœืฃ ื‘ืขืจืš FD ืœืื—ืจ ื™ืฆื™ืจืช ื”ืฉืงืข ื•
ืงืฉื•ืจ ืœ-8888 ื ืžืœ.

ื”ืขืจื”:
ื”ื—ืœ ืž-Circus 0.8 ื™ืฉ ืชื—ื‘ื™ืจ ื—ืœื•ืคื™ ื›ื“ื™ ืœืžื ื•ืข ื”ืชื ื’ืฉื•ื™ื•ืช ืžืกื•ื™ืžื•ืช ืขื ื›ืžื”
ืžื ืชื—ื™ ืชืฆื•ืจื”. ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘:

((circus.sockets.foo))

ืขื•ืœื ืืžื™ืชื™ ื“ื•ื’ืžื”
ื’ึถืจึถื‘ ื”ื•ื ื”ืžืœื•ื•ื” ื”ืžื•ืฉืœื ืœืกื™ืจืงื•ืก ืื ืืชื” ืจื•ืฆื” ืœื”ืคืขื™ืœ ืืช ืืคืœื™ืงืฆื™ื™ืช WSGI ืฉืœืš.

ืœืื—ืจ ื”ื”ืชืงื ื”, ื”ืคืขืœืช 5 ืžื™ื™ืŸื”ืœื“ ืขื•ื‘ื“ื™ื ื ื™ืชืŸ ืœืขืฉื•ืช ืขืœ ื™ื“ื™ ื™ืฆื™ืจืช ืฉืงืข ื•
ืงื•ืจื ืœ ื’ึถืจึถื‘ ืคืงื•ื“ื” ื‘ืขื•ื‘ื“, ื›ืš:

[ืงืจืงืก]
ื ืงื•ื“ืช ืงืฆื” = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[watcher:web]
cmd = chaussette --fd $(circus.sockets.web) --backend meinheld mycool.app
use_sockets = ื ื›ื•ืŸ
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 5

[socket:web]
ืžืืจื— = 0.0.0.0
ื™ืฆื™ืื” = 8000

ืขื“ื™ื™ืŸ ืœื ืคืจืกืžื ื• ืžื“ื“ื™ื, ืืœื ืืฉื›ื•ืœ ืื™ื ื˜ืจื ื˜ ื‘ื ื™ื”ื•ืœื• ืฉืœ Circus ืขื Gevent ืื•
ื”ืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ Meinheld ื”ื•ื ืžื”ื™ืจ ื›ืžื• ื›ืœ ืฉืจืช WSGI pre-fork ื‘ื—ื•ืฅ.

ืฉื™ืžื•ืฉ ืžื•ื‘ื ื” ืชื•ืกืคื™ื
Circus ืžื’ื™ืข ืขื ื›ืžื” ืชื•ืกืคื™ื ืžื•ื‘ื ื™ื. ืกืขื™ืฃ ื–ื” ืžืฆื™ื’ ืืช ื”ืชื•ืกืคื™ื ื”ืœืœื• ื•ืฉืœื”ื
ืืคืฉืจื•ื™ื•ืช ืชืฆื•ืจื”.

ืกื˜ื˜ื™ืกื˜ื™ืงื”
ืœื”ืฉืชืžืฉ ืžื•ื’ื“ืจ ืœ'circus.plugins.statsd.StatsdEmitter'

ืฉื ืืคืœื™ืงืฆื™ื”
ื”ืฉื ื”ืžืฉืžืฉ ืœื–ื™ื”ื•ื™ ืงื™ื“ื•ืžืช ื”ื“ืœื™ ืฉืืœื™ื” ื™ืฉืœื—ื• ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื (ื–ื” ื™ื”ื™ื”
ืขื ืงื™ื“ื•ืžืช ืงืจืงืก. ื•ืžื•ืกืžืš ืขื .ืฆื•ึนืคึถื”)

ื”ืžืืจื— ื”ืžืืจื— ืฉืืœื™ื• ื™ืฉ ืœืคืจืกื ืืช ื ืชื•ื ื™ ื”-statds

ื ืžืœ ื”ื™ืฆื™ืื” ืฉื”ื“ืžื•ืŸ ื”-statsd ืžืื–ื™ืŸ ืœื”

ืงืฆื‘ ื“ื’ื™ืžื”
ืื ืืชื” ืžืขื“ื™ืฃ ืงืฆื‘ ื“ื’ื™ืžื” ืฉื•ื ื” ืž-1, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืื•ืชื• ื›ืืŸ

ื ืชื•ื ื™ื ืžืœืื™ื
ื”ืจื—ื‘ื” ื‘ืชื•ืกืฃ Statsd ืฉืžืคืจืกืžืช ื’ื ืืช ืกื˜ื˜ื™ืกื˜ื™ืงืช ื”ืชื”ืœื™ืš. ื›ื›ื–ื” ื–ื”
ื™ืฉ ืืช ืื•ืชืŸ ืืคืฉืจื•ื™ื•ืช ืชืฆื•ืจื” ื›ืžื• Statsd ื•ื”ื‘ืื™ื.

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ circus.plugins.statsd.FullStats

loop_rate
ื”ืชื“ื™ืจื•ืช ืฉื”ืชื•ืกืฃ ืฆืจื™ืš ืœื‘ืงืฉ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื‘ืฉื ื™ื•ืช. ื‘ืจื™ืจืช ืžื—ื“ืœ: 60.

RedisObserver
ืฉื™ืจื•ืช ื–ื” ืžืฉืงื™ืฃ ืขื‘ื•ืจืš ื‘ืชื”ืœื™ืš ื ื™ืชื•ื— ืžื—ื“ืฉ, ืžืคืจืกื ืืช ื”ืžื™ื“ืข ืœ-statsd
ื•ืžืฆื™ืข ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืฆื•ืคื” ื›ืืฉืจ ื”ื•ื ืœื ืžื’ื™ื‘ ื‘ื–ืžืŸ ืงืฆื•ื‘ ื ืชื•ืŸ. ื”ืชื•ืกืฃ ื”ื–ื”
ื“ื•ืจืฉ redis-py ืœืจื•ืฅ.

ื™ืฉ ืœื• ืื•ืชื” ืชืฆื•ืจื” ื›ืžื• statd ื•ืžื•ืกื™ืฃ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ circus.plugins.redis_observer.RedisObserver

loop_rate
ื”ืชื“ื™ืจื•ืช ืฉื”ืชื•ืกืฃ ืฆืจื™ืš ืœื‘ืงืฉ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื‘ืฉื ื™ื•ืช. ื‘ืจื™ืจืช ืžื—ื“ืœ: 60.

redis_url
ืžืกื“ ื”ื ืชื•ื ื™ื ืฉื™ืฉ ืœื‘ื“ื•ืง ืื•ืชื• ื›ื›ืชื•ื‘ืช ืืชืจ redis. ื‘ืจื™ืจืช ืžื—ื“ืœ: "redis://localhost:6379/0"

ืคืกืง ื–ืžืŸ
ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ื‘ืฉื ื™ื•ืช ืฉื”ื‘ืงืฉื” ืขืฉื•ื™ื” ืœื”ื™ืžืฉืš ืœืคื ื™ ืฉื”ื™ื ื ื—ืฉื‘ืช ืžื•ืฉื‘ืชืช.
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 5.

restart_on_timeout
ืฉื ื”ืชื”ืœื™ืš ืœื”ืคืขืœื” ืžื—ื“ืฉ ื›ืืฉืจ ืชื ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ืฉืœ ื”ื‘ืงืฉื”. ืื™ืŸ ื”ืคืขืœื” ืžื—ื“ืฉ
ืžื•ืคืขืœ ื›ืืฉืจ ืœื ื ื™ืชืŸ. ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ.

HttpObserver
ืฉื™ืจื•ืช ื–ื” ืžืฉืงื™ืฃ ืขื‘ื•ืจืš ื‘ืชื”ืœื™ืš http ืขืœ ื™ื“ื™ ืคื™ื ื’ ืœืืชืจ ืžืกื•ื™ื ื‘ืื•ืคืŸ ืงื‘ื•ืข.
ื‘ื“ื•ืžื” ืœ-redis observer ื”ื•ื ืžืฆื™ืข ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืฆื•ืคื” ืขืœ ืฉื’ื™ืื”. ื–ื” ื“ื•ืจืฉ
ื˜ื•ืจื ื“ื• ืœืจื•ืฅ.

ื™ืฉ ืœื• ืื•ืชื” ืชืฆื•ืจื” ื›ืžื• statd ื•ืžื•ืกื™ืฃ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ circus.plugins.http_observer.HttpObserver

loop_rate
ื”ืชื“ื™ืจื•ืช ืฉื”ืชื•ืกืฃ ืฆืจื™ืš ืœื‘ืงืฉ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื‘ืฉื ื™ื•ืช. ื‘ืจื™ืจืช ืžื—ื“ืœ: 60.

check_url
ื›ืชื•ื‘ืช ื”ืืชืจ ืฉืฆืจื™ืš ืœื‘ื“ื•ืง. ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ: http://localhost/

ืคืกืง ื–ืžืŸ
ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ื‘ืฉื ื™ื•ืช ืฉื”ื‘ืงืฉื” ืขืฉื•ื™ื” ืœื”ื™ืžืฉืš ืœืคื ื™ ืฉื”ื™ื ื ื—ืฉื‘ืช ืžื•ืฉื‘ืชืช.
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 10.

restart_on_error
ืฉื ื”ืชื”ืœื™ืš ืœื”ืคืขืœื” ืžื—ื“ืฉ ื›ืืฉืจ ืชื ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ืœื‘ืงืฉื” ืื• ืฉื”ื—ื–ื™ืจื” ื‘ืงืฉื” ื›ืœืฉื”ื™
ืกื•ื’ ืื—ืจ ืฉืœ ืฉื’ื™ืื”. ืœื ืžื•ืคืขืœืช ืžื—ื“ืฉ ื›ืืฉืจ ืœื ื ื™ืชืŸ. ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ.

ResourceWatcher
ืฉื™ืจื•ืช ื–ื” ืฆื•ืคื” ื‘ืžืฉืื‘ื™ื ืฉืœ ื”ืชื”ืœื™ืš ื”ื ืชื•ืŸ ื•ืžืคืขื™ืœ ื”ืคืขืœื” ืžื—ื“ืฉ ื›ืืฉืจ
ื”ื ื—ื•ืจื’ื™ื ืžืžื’ื‘ืœื•ืช ืžืกื•ื™ืžื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžื“ื™ ื‘ืจืฆื™ืคื•ืช.

ื™ืฉ ืœื• ืื•ืชื” ืชืฆื•ืจื” ื›ืžื• statd ื•ืžื•ืกื™ืฃ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ circus.plugins.resource_watcher.ResourceWatcher

loop_rate
ื”ืชื“ื™ืจื•ืช ืฉื”ืชื•ืกืฃ ืฆืจื™ืš ืœื‘ืงืฉ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื‘ืฉื ื™ื•ืช. ื‘ืจื™ืจืช ืžื—ื“ืœ: 60.

ืฆื•ึนืคึถื”
ื”ืฆื•ืคื” ืฉืฉื•ืžืจ ื”ืžืฉืื‘ ื”ื–ื” ืฆืจื™ืš ืœื“ืื•ื’ ืœื•. (ื ืงืจื ื‘ืขื‘ืจ
ืฉืจื•ืช ืื‘ืœ ืฉืจื•ืช ื”ื•ืฆื ื›ืขืช ืžืฉื™ืžื•ืฉ)

max_cpu
ื”ืžืขื‘ื“ ื”ืžืงืกื™ืžืœื™ ืฉืœ ืชื”ืœื™ืš ืื—ื“ ืžื•ืชืจ ืœืฆืจื•ืš (ื‘%). ื‘ืจื™ืจืช ืžื—ื“ืœ: 90

min_cpu
ื”ืžืขื‘ื“ ื”ืžื™ื ื™ืžืœื™ ืฉืชื”ืœื™ืš ืื—ื“ ืฆืจื™ืš ืœืฆืจื•ืš (ื‘%). ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ (ืœืœื ืžื™ื ื™ืžื•ื)
ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืืช min_cpu ืœ-0 (ืืคืก), ื‘ืžืงืจื” ื–ื” ืื ืชื”ืœื™ืš ืื—ื“ ืฆื•ืจืš ื‘ื“ื™ื•ืง
0% ืžืขื‘ื“, ื–ื” ื™ืคืขื™ืœ ืืช ื”ื’ื‘ื•ืœ ื”ื—ื•ืจื’.

max_mem
ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ืฉืžื•ืชืจ ืชื”ืœื™ืš ืื—ื“ ืฉืœ ื”ืฆื•ืคื” ื”ื–ื” ืœืฆืจื•ืš. ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ:
90. ืื ืœื ืฆื•ื™ื ื” ื™ื—ื™ื“ื”, ื”ืขืจืš ื”ื•ื ื‘ืื—ื•ื–ื™ื. ื“ื•ื’ืžื”: 50 ืื ื™ื—ื™ื“ื” ื”ื™ื
ืฉืฆื•ื™ืŸ, ื”ืขืจืš ื”ื•ื ื‘ื‘ืชื™ื. ื”ื™ื—ื™ื“ื•ืช ื”ื ืชืžื›ื•ืช ื”ืŸ B, K, M, G, T, P, E, Z, Y.
ื“ื•ื’ืžื”: 250 ืžื™ืœื™ื•ืŸ

min_mem
ื”ื–ื™ื›ืจื•ืŸ ื”ืžื™ื ื™ืžืœื™ ืฉืชื”ืœื™ืš ืื—ื“ ืฉืœ ื”ืฆื•ืคื” ื”ื–ื” ืฆืจื™ืš ืœืฆืจื•ืš. ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ (ืœื
ืžึดื™ื ึดื™ืžื•ึผื). ืื ืœื ืฆื•ื™ื ื” ื™ื—ื™ื“ื”, ื”ืขืจืš ื”ื•ื ื‘ืื—ื•ื–ื™ื. ื“ื•ื’ืžื”: 50 ืื ื™ื—ื™ื“ื” ื”ื™ื
ืฉืฆื•ื™ืŸ, ื”ืขืจืš ื”ื•ื ื‘ื‘ืชื™ื. ื”ื™ื—ื™ื“ื•ืช ื”ื ืชืžื›ื•ืช ื”ืŸ B, K, M, G, T, P, E, Z, Y.
ื“ื•ื’ืžื”: 250 ืžื™ืœื™ื•ืŸ

ืกืฃ_ื‘ืจื™ืื•ืช
ื”ื‘ืจื™ืื•ืช ื”ื™ื ื”ืžืžื•ืฆืข ืฉืœ ื”ืžืขื‘ื“ ื•ื”ื–ื™ื›ืจื•ืŸ (ื‘%) ืฉืœ ืชื”ืœื™ื›ื™ ื”ืฆื•ืคื”
ืžื•ืชืจ ืœืฆืจื•ืš (ื‘%). ื‘ืจื™ืจืช ืžื—ื“ืœ: 75

max_count
ื‘ืื™ื–ื• ืชื“ื™ืจื•ืช ืžื•ืชืจ ืœื”ื’ื‘ื™ืœ ืืช ื”ื’ื‘ื•ืœื•ืช ื”ืืœื” (ื›ืœ ืื—ื“ ืžื”ื ื ืกืคืจ ื‘ื ืคืจื“).
ื—ืจื™ื’ื” ืœืคื ื™ ืฉืชื•ืคืขืœ ื”ืคืขืœื” ืžื—ื“ืฉ. ื‘ืจื™ืจืช ืžื—ื“ืœ: 3

ื“ื•ื’ืžื:

[ืงืจืงืก]
; ...

[ืฆื•ืคื”:ืชื•ื›ื ื™ืช]
cmd = ืฉื™ื ื” 120

[plugin:myplugin]
use = circus.plugins.resource_watcher.ResourceWatcher
ืฆื•ืคื” = ืชื•ื›ื ื™ืช
min_cpu = 10
max_cpu = 70
min_mem = 0
max_mem = 20

ื›ืœื‘ ืฉืžื™ืจื”
ืชื•ืกืฃ ืฉืžืงืฉืจ ืฉืงืข udp ื•ืžื—ื›ื” ืœื”ื•ื“ืขื•ืช Watchdog. ืขื‘ื•ืจ "ืžืฉืžืจ"
ืชื”ืœื™ื›ื™ื, ื›ืœื‘ ื”ืฉืžื™ืจื” ื™ื”ืจื•ื’ ืื•ืชื ืื ื”ื ืœื ื™ืฉืœื—ื• ืคืขื™ืžืช ืœื‘ ื‘ื–ืžืŸ ืžืกื•ื™ื
ืคืจืง ื–ืžืŸ ืฉื”ืชืžืžืฉ ืœืคื™ loop_rate * max_count. (ืงืจืงืก ื™ื”ื™ื” ืื•ื˜ื•ืžื˜ื™
ื”ืคืขืœ ืžื—ื“ืฉ ืืช ื”ืชื”ืœื™ื›ื™ื ื”ื—ืกืจื™ื ื‘ืฆื•ืคื”)

ื›ืœ ืชื”ืœื™ืš ืžื ื•ื˜ืจ ืฆืจื™ืš ืœืฉืœื•ื— ื”ื•ื“ืขืช udp ืœืคื—ื•ืช ื‘-loop_rate. ื”-udp
ืคื•ืจืžื˜ ื”ื”ื•ื“ืขื” ื”ื•ื ืฉื•ืจืช ื˜ืงืกื˜, ืžืคื•ืขื ื—ืช ื‘ืืžืฆืขื•ืช msg_regex ืคึผึธืจึธืžึถื˜ึถืจ. ืคืขื™ืžื•ืช ื”ืœื‘
ื”ื”ื•ื“ืขื” ื—ื™ื™ื‘ืช ืœื”ื›ื™ืœ ืœืคื—ื•ืช ืืช ื”-PID ืฉืœ ืชื”ืœื™ืš ืฉืœื™ื—ืช ื”ื”ื•ื“ืขื”.

ืจืฉื™ืžืช ื”ืฆื•ืคื™ื ื”ืžื ื•ื˜ืจื™ื ื ืงื‘ืขืช ืœืคื™ ื”ืคืจืžื˜ืจ watchers_regex ื‘
ืชืฆื•ืจื”.

ืคืจืžื˜ืจื™ ืชืฆื•ืจื”:

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ circus.plugins.watchdog.WatchDog

loop_rate
ืงืฆื‘ ื”ืœื•ืœืื” ืฉืœ ื›ืœื‘ ื”ืฉืžื™ืจื” ื‘ืฉื ื™ื•ืช. ื‘ื›ืœ ืœื•ืœืื”, WatchDog ื™ื—ืคืฉ "ืžืชื™ื"
ืชื”ืœื™ื›ื™ื.

watchers_regex
regex ืขื‘ื•ืจ ื”ืชืืžืช ืฉืžื•ืช ืฆื•ืคื™ื ืฉืืžื•ืจื™ื ืœื”ื™ื•ืช ื‘ืžืขืงื‘ ืขืœ ื™ื“ื™ ื›ืœื‘ ื”ืฉืžื™ืจื”
(ื‘ึผึฐืจึดื™ืจึทืช ืžึถื—ื“ึธืœ: .* ื›ืœ ื”ืฆื•ืคื™ื ืžื ื•ื˜ืจื™ื)

msg_regex
regex ืขื‘ื•ืจ ืคืขื ื•ื— ื”ื•ื“ืขืช ืคืขื™ืžื•ืช ื”ืœื‘ ืฉื”ืชืงื‘ืœื” ื‘-udp (ื‘ืจื™ืจืช ืžื—ื“ืœ:
^(?P .*);(?P .*)$) ืคื•ืจืžื˜ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื•ื ื”ื•ื“ืขืช ื˜ืงืกื˜ ืคืฉื•ื˜ื”:
pid;ื—ื•ืชืžืช ื–ืžืŸ

max_count
ื”ืžืกืคืจ ื”ืžืจื‘ื™ ืฉืœ ื”ืœื•ืœืื” ืฉืขื‘ืจื” ืœืœื ืงื‘ืœืช ืคืขื™ืžื•ืช ืœื‘ ืœืคื ื™ ื”ืคืขืœื” ืžื—ื“ืฉ
ืชื”ืœื™ืš (ื‘ืจื™ืจืช ืžื—ื“ืœ: 3)

ip ip ื›ืœื‘ ื”ืฉืžื™ืจื” ื™ื—ื™ื™ื‘ (ื‘ืจื™ืจืช ืžื—ื“ืœ: 127.0.0.1)

ื ืžืœ ื™ืฆื™ืื” ืฉื›ืœื‘ ื”ืฉืžื™ืจื” ื™ื—ื™ื™ื‘ (ื‘ืจื™ืจืช ืžื—ื“ืœ: 1664)

ืžืชื ืคื ืฃ
ื›ืืฉืจ ืขื•ื‘ื“ ืžืชื—ื™ืœ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžื“ื™, ืื ื• ืื•ืžืจื™ื ืฉื›ืŸ ืžืชื ืคื ืฃ. ืชื•ืกืฃ ื–ื” ืขื•ืงื‘ ืื—ืจื™ื•
ืฉืœ ื”ืขื•ื‘ื“ ืžืคืขื™ืœ ืžื—ื“ืฉ ื•ืžืคืกื™ืง ืืช ื”ืฆื•ืคื” ื”ืžืงื‘ื™ืœ ืœืžืงืจื” ืฉื”ื•ื ืžืชื ื•ืคืฃ. ื–ึถื”
ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืชื•ืกืฃ ื›ื“ื™ ืœืขืฆื•ืจ ืื•ื˜ื•ืžื˜ื™ืช ืขื•ื‘ื“ื™ื ื”ืžื•ืคืขืœื™ื ืžื—ื“ืฉ ื›ืœ ื”ื–ืžืŸ ื‘ื’ืœืœ
ื”ื ืœื ืขื•ื‘ื“ื™ื ื›ืžื• ืฉืฆืจื™ืš.

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ ืชื•ืกืคื™ ืงืจืงืก. ืžืชื ืคื ืคื™ื. ืžืชื ืคื ืคื™ื

ื ื™ืกื™ื•ื ื•ืช
ืžืกืคืจ ื”ืคืขืžื™ื ืฉืชื”ืœื™ืš ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ, ื‘ืชื•ืš ื—ืœื•ืŸ ืฉื ื™ื•ืช, ืœืคื ื™ ืฉืื ื—ื ื•
ืชื—ืฉื•ื‘ ืฉื–ื” ืžืชื ื•ืคืฃ (ื‘ืจื™ืจืช ืžื—ื“ืœ: 2)

ื—ืœื•ืŸ ื—ืœื•ืŸ ื”ื–ืžืŸ ื‘ืฉื ื™ื•ืช ืœื‘ื“ื™ืงืช ื”ืชื ื•ืคืคื•ืช. ืื ื”ืชื”ืœื™ืš ื™ืชื—ื™ืœ ืžื—ื“ืฉ ื™ื•ืชืจ
ืžึตืึฒืฉืึถืจ ื ื™ืกื™ื•ื ื•ืช ืคืขืžื™ื ื‘ืชื•ืš ื—ืœื•ืŸ ื”ื–ืžืŸ ื”ื–ื”, ืื ื• ืจื•ืื™ื ื‘ื–ื” ืชื”ืœื™ืš ืžืชื ื•ืคืฃ.
(ื‘ืจื™ืจืช ืžื—ื“ืœ: 1)

ื ืกื• ืฉื•ื‘ ื‘ืขื•ื“
ื–ืžืŸ ื‘ืฉื ื™ื•ืช ืœื—ื›ื•ืช ืขื“ ืฉื ื ืกื” ืœื”ืชื—ื™ืœ ืฉื•ื‘ ืชื”ืœื™ืš ืฉื”ื™ื”
ืžืชื ื•ืคืคืช. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 7)

max_retry
ืžืกืคืจ ื”ืคืขืžื™ื ืฉืื ื• ืžื ืกื™ื ืœื”ืชื—ื™ืœ ืชื”ืœื™ืš ืฉื”ืชื ื•ืคืฃ ื‘ืขื‘ืจ
ืื ื—ื ื• ื ื•ื˜ืฉื™ื ื•ืขื•ืฆืจื™ื ืืช ื›ืœ ื”ืฆื•ืคื”. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 5) ื”ื’ื“ืจ ืœ-1 ื›ื“ื™ ืœื”ืฉื‘ื™ืช
max_retry ื•ื ืกื” ืฉื•ื‘ ืœืœื ื”ื’ื‘ืœืช ื–ืžืŸ.

ืคืขื™ืœ ืœื”ื’ื“ื™ืจ ืื ื”ืคืœืื’ื™ืŸ ืคืขื™ืœ ืื• ืœื (ื‘ืจื™ืจืช ืžื—ื“ืœ: True). ืื ื”ื“ื’ืœ ื”ืขื•ืœืžื™ ื”ื•ื
ืžื•ื’ื“ืจ ืœ-false, ื”ืชื•ืกืฃ ืœื ืžื•ืคืขืœ.

ื ื™ืชืŸ ืœืขืงื•ืฃ ืืช ื”ืืคืฉืจื•ื™ื•ืช ื‘ืงื˜ืข ื”ืฆื•ืคื” ื‘ืืžืฆืขื•ืช ื ืžืชื ื•ืคืคืช. ืงื™ื“ื•ืžืช. ืœื“ื•ื’ืžื”,
ื”ื ื” ืื™ืš ืชื’ื“ื™ืจ ืกืคืฆื™ืคื™ max_retry ืขืจืš ืขื‘ื•ืจ nginx:

[watcher:nginx]
cmd = /path/to/nginx
flapping.max_retry = 2

[watcher:myscript]
cmd = ./my_script.py

; ... ืฆื•ืคื™ื ืื—ืจื™ื

[plugin:flapping]
use = circus.plugins.flapping.flapping
max_retry = 5

CommandReloader
ืชื•ืกืฃ ื–ื” ื™ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืฆื•ืคื™ื ื›ืืฉืจ ืงื•ื‘ืฅ ื”ืคืงื•ื“ื” ืฉืœื”ื ื™ืฉืชื ื”. ื–ื” ืขื•ื‘ื“ ืœืคื™
ื‘ื“ื™ืงืช ื–ืžืŸ ื”ืฉื™ื ื•ื™ ื•ื”ื ืชื™ื‘ ืฉืœ ื”ืงื•ื‘ืฅ ืฉืžืฆื‘ื™ืข ืขืœ ื™ื“ื™ ื”- cmd ืืคืฉืจื•ืช ื›ืœ
loop_rate ืฉื ื™ื•ืช. ื–ื” ืขืฉื•ื™ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ื‘ืขืช ืคื™ืชื•ื— ืชื”ืœื™ื›ื™ ืขื‘ื•ื“ื” ืื• ืืคื™ืœื• ืขื‘ื•ืจ ื—ื
ืฉื“ืจื•ื’ ืงื•ื“ ื‘ื™ื™ืฆื•ืจ.

ืœื”ืฉืชืžืฉ ืžื›ื•ื•ืŸ ืœ circus.plugins.command_reloader.CommandReloader

loop_rate
ื”ืชื“ื™ืจื•ืช ืฉื”ืชื•ืกืฃ ืฆืจื™ืš ืœื‘ื“ื•ืง ืื ื™ืฉ ืฉื™ื ื•ื™ื™ื ื‘ืฉื ื™ื•ืช. ื‘ืจื™ืจืช ืžื—ื“ืœ: 1.

ืคึผึฐืจึดื™ืกึธื”
ืœืžืจื•ืช ืฉื ื™ืชืŸ ืœื ื”ืœ ืืช ื“ืžื•ืŸ ื”ืงืจืงืก ืขื ื”ืคืงื•ื“ื” circusd, ืงืœ ื™ื•ืชืจ ืœืงื‘ืœ ืื•ืชื•
ืœื”ืชื—ื™ืœ ื‘ืืชื—ื•ืœ. ืื ื”ืžืขืจื›ืช ืฉืœืš ืชื•ืžื›ืช ื‘-Upstart, ืชื•ื›ืœ ืœื™ืฆื•ืจ ืืช ื”ืกืงืจื™ืคื˜ ืฉืœ Upstart ื–ื” ื‘
/etc/init/circus.conf.

ื”ืชื—ืœ ืขืœ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื•-net-device-up IFACE=lo
ืขืฆื•ืจ ื‘ืจืžืช ืจื™ืฆื” [016]

respawn
exec /usr/local/bin/circusd /etc/circus/circusd.ini

ื–ื” ื‘ื”ื ื—ื” ืฉ-circusd.ini ื ืžืฆื ื‘-/etc/circus/circusd.ini. ืœืื—ืจ ืืชื—ื•ืœ ืžื—ื“ืฉ, ืืชื”
ื™ื›ื•ืœ ืœืฉืœื•ื˜ ืขืœ circusd ืขื ืคืงื•ื“ืช ื”ืฉื™ืจื•ืช:

# ื”ืชื—ืœื”/ืขืฆื™ืจื”/ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ืงืจืงืก ืฉื™ืจื•ืช

ืื ื”ืžืขืจื›ืช ืฉืœืš ืชื•ืžื›ืช ื‘-systemd, ืชื•ื›ืœ ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ื™ื—ื™ื“ืช systemd ื–ื” ืชื—ืช
/etc/systemd/system/circus.service.

[ื™ื—ื™ื“ื”]
ืชื™ืื•ืจ=ืžื ื”ืœ ืชื”ืœื™ื›ื™ ืงืจืงืก
After=syslog.target network.target nss-lookup.target

[ืฉืึตืจื•ึผืช]
ืกื•ื’ = ืคืฉื•ื˜
ExecReload=/usr/bin/circusctl ื˜ืขืŸ ืžื—ื“ืฉ
ExecStart=/usr/bin/circusd /etc/circus/circus.ini
ื”ืคืขืœ ืžื—ื“ืฉ = ืชืžื™ื“
RestartSec = 5

[ืœื”ืชืงื™ืŸ]
WantedBy=default.target

ืœื ื ื“ืจืฉ ืืชื—ื•ืœ ืื ืืชื” ืžืคืขื™ืœ ืืช ืคืงื•ื“ืช daemon-reload ืœืžื˜ื”:

# systemctl --system daemon-load reload

ืื– ื ื™ืชืŸ ืœื ื”ืœ ืืช ื”ืงืจืงืก ื‘ืืžืฆืขื•ืช:

# systemctl start/stop/status/load reload circus

ืžืชื›ื•ื ื™ื
ื—ืœืง ื–ื” ื™ื›ื™ืœ ืžืชื›ื•ื ื™ื ืœืคืจื™ืกืช ืงืจืงืก. ืขื“ ืื– ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืืฆืœ ืคื™ื˜
ื‘ึผื•ึผื‘ึผึธื” ืžืชื›ื•ืŸ ืื• ืืฆืœ ืจืžื™ ืฉืึถืฃ ืžืชื›ื•ืŸ

ืืคื™ืคื™ื•ืจ ื”ืชึทื”ึฒืœึดื™ืš ื’ึทืจืขึดื™ืŸ
ื‘ืขื™ื” ืื—ืช ื”ืžืฉื•ืชืคืช ืœืžื ื”ืœื™ ืชื”ืœื™ื›ื™ื ื”ื™ื ืฉืื™ื ืš ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ืžื ื”ืœ ื”ืชื”ืœื™ื›ื™ื
ืžื‘ืœื™ ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืฉื”ื•ื ืžื ื”ืœ. ื–ื” ืžืงืฉื” ืขืœ ืคืจื™ืกืช ื
ื’ืจืกื” ื—ื“ืฉื” ืฉืœ Circus ืื• ื’ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ ื›ืœ ืื—ืช ืžื”ืกืคืจื™ื•ืช ืฉื‘ื”ืŸ ื–ื” ืชืœื•ื™.

ืื ืืชื” ืขืœ ืžืขืจื›ืช ืžืกื•ื’ Unix, Circus ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืœื™ื‘ืช ืชื”ืœื™ืš Papa. ื›ืฉืžืฉืชืžืฉื™ื ื‘ื•, ืื‘ื
ืชื™ืฆื•ืจ ื“ืžื•ืŸ ืืจื•ืš ื—ื™ื™ื ืฉื™ืฉืžืฉ ื›ืžืืจื— ืœื›ืœ ืชื”ืœื™ื›ื™ื ื•ืฉืงืขื™ื
ืืชื” ื™ื•ืฆืจ ืขื ื–ื”. ืื ื”ืงืจืงืก ื™ื™ืกื’ืจ, ืื‘ื ื™ืฉืžื•ืจ ืขืœ ื›ืœ ืžื” ืฉื”ื•ื ืžืืจื—.

ื”ืชืงื ื”
ื”ืชื—ืœ ื‘ื”ืชืงื ืช ื” ืื‘ื ื• setproctitle ืžื•ื“ื•ืœื™ื:

pip ืœื”ืชืงื™ืŸ ืื‘ื
pip ื”ืชืงื ืช setproctitle

ื”ืฉืžื™ื™ื setproctitle ื”ืžื•ื“ื•ืœ ื”ื•ื ืื•ืคืฆื™ื•ื ืœื™. ื”ื•ื ื™ืฉืžืฉ ืื ืงื™ื™ื ื›ื“ื™ ืœืฉื ื•ืช ืืช ืฉื ื“ืžื•ืŸ ื”ืคืคื
ืœ ื—ืœืง ืขืœื™ื•ืŸ ื• ps ืœืžืฉื”ื• ื›ืžื• "ื“ืžื•ืŸ ืื‘ื ืžื”ืงืจืงืก". ืื ืœื ืชืชืงื™ืŸ ืืช
setproctitle ืžื•ื“ื•ืœ, ื›ื•ืชืจืช ื–ื• ืชื”ื™ื” ืฉื•ืจืช ื”ืคืงื•ื“ื” ืฉืœ ื”ืชื”ืœื™ืš ืฉื”ืคืขื™ืœ ืื•ืชื”.
ืžืื•ื“ ืžื‘ืœื‘ืœ.

ืœืื—ืจ ื”ืชืงื ืช Papa, ื”ื•ืกืฃ use_papa=true ืœืชื”ืœื™ื›ื™ื ื•ืœืฉืงืขื™ื ื”ืงืจื™ื˜ื™ื™ื ืฉืœืš.
ื‘ื“ืจืš ื›ืœืœ ืืชื” ืจื•ืฆื” ืœืื›ืกืŸ ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืฉืœ ื”ืžื—ืกื ื™ืช ืฉืœืš ื‘-Papa, ื•ืืฃ ืื—ื“ ืžื”ื
ืงืจืงืก ืชื•ืžื›ื™ื ื‘ืชื”ืœื™ื›ื™ื ื›ืžื• ื”ืชื•ืกืคื™ื ืœืคืœืคื•ืœ ื•ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช.

[ืงืจืงืก]
loglevel = ืžื™ื“ืข

[watcher:nginx]
cmd = /usr/local/nginx/sbin/nginx -p /Users/scottmax/Source/service-framework/Common/conf/nginx -c /Users/scottmax/Source/service-framework/Common/conf/nginx/nginx .conf
delay_warmup = 3
ืคืกืง ื–ืžืŸ ื—ื™ื ื ื™ = 10
max_retry = 5
ื™ื—ื™ื“ = ื ื›ื•ืŸ
send_hup = ื ื›ื•ืŸ
stop_signal = QUIT
stdout_stream.class = FileStream
stdout_stream.filename = /var/logs/web-server.log
stdout_stream.max_bytes = 10000000
stdout_stream.backup_count = 10
stderr_stream.class = FileStream
stderr_stream.filename = /var/logs/web-server-error.log
stderr_stream.max_bytes = 1000000
stderr_stream.backup_count = 10
ืคืขื™ืœ = ื ื›ื•ืŸ
use_papa = ื ื›ื•ืŸ

[watcher:logger]
cmd = /my_service/env/bin/python logger.py ื”ืคืขืœื”
working_dir = /my_service
ืคืกืง ื–ืžืŸ ื—ื™ื ื ื™ = 10
ื™ื—ื™ื“ = ื ื›ื•ืŸ
stop_signal = INT
stdout_stream.class = FileStream
stdout_stream.filename = /var/logs/logger.log
stdout_stream.max_bytes = 10000000
stdout_stream.backup_count = 10
stderr_stream.class = FileStream
stderr_stream.filename = /var/logs/logger.log
stderr_stream.max_bytes = 1000000
stderr_stream.backup_count = 10
ืขื“ื™ืคื•ืช = 50
use_papa = ื ื›ื•ืŸ

[watcher:web_app]
cmd = /my_service/env/bin/uwsgi --ini uwsgi-live.ini --socket fd://$(circus.sockets.web) --stats 127.0.0.1:809$(circus.wid)
working_dir = /my_service/web_app
graceful_timeout=10
stop_signal = QUIT
use_sockets = ื ื›ื•ืŸ
stdout_stream.class = FileStream
stdout_stream.filename = /var/logs/web_app.log
stdout_stream.max_bytes = 10000000
stdout_stream.backup_count = 10
stderr_stream.class = FileStream
stderr_stream.filename = /var/logs/web_app.log
stderr_stream.max_bytes = 1000000
stderr_stream.backup_count = 10
hooks.after_spawn = examples.uwsgi_lossless_reload.children_started
hooks.before_signal = examples.uwsgi_lossless_reload.clean_stop
hooks.extended_stats = examples.uwsgi_lossless_reload.extended_stats
ืขื“ื™ืคื•ืช = 40
use_papa = ื ื›ื•ืŸ

[socket:web]
ื ืชื™ื‘ = /my_service/sock/uwsgi
use_papa = ื ื›ื•ืŸ

[plugin:flapping]
use = circus.plugins.flapping.flapping
ื—ืœื•ืŸ = 10
ืขื“ื™ืคื•ืช = 1000

ื”ืขืจื”:
ืื ืชื”ืœื™ื›ื™ ื”ืคืืคื ืžืฉืชืžืฉื™ื ื‘ืฉืงืขื™ื ื›ืœืฉื”ื, ืฉืงืขื™ื ืืœื” ื—ื™ื™ื‘ื™ื ืœื”ืฉืชืžืฉ ื’ื ื‘ืคืืคื.

ืขื™ืฆื•ื‘ ืžื˜ืจื”
Papa ืชื•ื›ื ืŸ ืœื”ื™ื•ืช ืžืื•ื“ ืžื™ื ื™ืžืœื™ืกื˜ื™ ื‘ืชื›ื•ื ื•ืช ื•ื‘ื“ืจื™ืฉื•ืช. ื–ื” ืขื•ืฉื”:

ยท ืฉืงืขื™ ื”ืคืขืœื” ื•ืขืฆื™ืจื”

ยท ืœืกืคืง ื—ื ื•ืช ืžืคืชื—/ืขืจืš

ยท ื”ืชื—ืœ ืชื”ืœื™ื›ื™ื ื•ื”ื—ื–ืจ ืืช stdout, stderr ื•ืงื•ื“ ื”ื™ืฆื™ืื”

ื–ื” ืœื:

ยท ื”ืคืขืœ ืžื—ื“ืฉ ืชื”ืœื™ื›ื™ื

ยท ืœืกืคืง ื“ืจืš ืœืขืฆื•ืจ ืชื”ืœื™ื›ื™ื

ยท ืœืกืคืง ื›ืœ ืžื™ื“ืข ืขืœ ืชื”ืœื™ื›ื™ื ืžืœื‘ื“ ื”ืื ื”ื ืขื“ื™ื™ืŸ ืคื•ืขืœื™ื ืื• ืœื

Papa ืื™ื ื• ื“ื•ืจืฉ ืกืคืจื™ื•ืช ืฉืœ ืฆื“ ืฉืœื™ืฉื™ ื›ืš ืฉื”ื•ื ื™ื›ื•ืœ ืœืคืขื•ืœ ืจืง ืขืœ ืกืคืจื™ื™ืช Python ื”ืกื˜ื ื“ืจื˜ื™ืช.
ื–ื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื‘ setproctitle ื—ื‘ื™ืœื” ืื‘ืœ ื–ื” ืžืฉืžืฉ ืจืง ืœื”ื›ื ืช ื”ื›ื•ืชืจืช
ื™ืคื” ื™ื•ืชืจ ืขื‘ื•ืจ ps ื• ื—ืœืง ืขืœื™ื•ืŸ ื•ืื™ื ื• ื—ื™ื•ื ื™.

ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื ืฉืžืจื” ืœืžื™ื ื™ืžื•ื ื›ืš ืฉืœืขื•ืœื ืœื ืชืฆื˜ืจืš ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช
ื“ืžื•ืŸ ืื‘ื. ื›ืžื” ืžื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื ื“ื—ืงื” ืœืกืคืจื™ื™ืช ื”ืœืงื•ื—
ืืคืฉืจื™. ื›ืš ืืชื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืคืจื•ืก ืขื•ืชืง ื—ื“ืฉ ืฉืœ Papa ืขื‘ื•ืจ ืชื›ื•ื ื•ืช ืœืงื•ื— ื—ื“ืฉื•ืช
ื‘ืœื™ ืฆื•ืจืš ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื“ืžื•ืŸ ืคืืคื. ืื‘ื ื ื•ืขื“ ืœื”ื™ื•ืช ืขืžื•ื“ ืชื•ื•ืš ืฉืœ ื™ืฆื™ื‘ื•ืช ื‘
ื™ื ืžืฉืชื ื” ืฉืœ ืกืคืจื™ื•ืช ืฆื“ ืฉืœื™ืฉื™.

ืคืขื•ืœื”
ืจื•ื‘ ื”ื“ื‘ืจื™ื ื ืฉืืจื™ื ืœืœื ืฉื™ื ื•ื™ ื‘ื™ืŸ ืื ืืชื” ืžืฉืชืžืฉ ื‘-Papa ื•ื‘ื™ืŸ ืื ืœื. ืืชื” ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ื•ืœืขืฆื•ืจ
ืชื”ืœื™ื›ื™ื. ืืชื” ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœืงื‘ืœ ืกื˜ื˜ื•ืก ื•ืกื˜ื˜ื™ืกื˜ื™ืงื” ืขื‘ื•ืจ ืชื”ืœื™ื›ื™ื. ื”ืขื™ืงืจ ืฉืžืฉืชื ื”
ื–ื” ื›ืืฉืจ ืืชื” ืขื•ืฉื” circusctl ืœื”ืคืกื™ืง, ื›ืœ ืชื”ืœื™ื›ื™ ื”ืคืืคื ื ื•ืชืจื• ืคื•ืขืœื™ื. ื›ืืฉืจ ืืชื”
ื”ืชื—ืœื” ืงืจืงืก ื’ื™ื‘ื•ื™, ืชื”ืœื™ื›ื™ื ืืœื” ืžืฉื•ื—ื–ืจื™ื.

ื”ืขืจื”:
ื›ืืฉืจ ืชื”ืœื™ื›ื™ื ืžืชืื•ืฉืฉื™ื, ืœืคื ื™_ื”ืชื—ืœ ื• before_spawn ื•ื•ื™ื ืžื“ืœื’ื™ื.

ืจื™ืฉื•ื
ื‘ื–ืžืŸ ืฉืกื™ืจืงื•ืก ืžื•ืฉื‘ืช, ืคืืคื ื™ืื—ืกืŸ ืขื“ 2 ืžื™ืœื™ื•ืŸ ืคืœื˜ ืœื›ืœ ืชื”ืœื™ืš. ื•ืื– ื–ื” ื™ื”ื™ื”
ืœื”ืชื—ื™ืœ ืœื–ืจื•ืง ืืช ื”ื ืชื•ื ื™ื ื”ื™ืฉื ื™ื ื‘ื™ื•ืชืจ. ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ ืžื—ื“ืฉ ืืช Circus, ื”ืคืœื˜ ื”ืžืื•ื—ืกืŸ ื‘ืžื˜ืžื•ืŸ ื–ื” ื™ื”ื™ื” ื‘ืžื”ื™ืจื•ืช
ืื•ื—ื–ืจ ื•ื ืฉืœื— ืœื–ืจืžื™ ื”ืคืœื˜. ืื‘ื ื“ื•ืจืฉ ืฉืงื‘ืœืช ื”ืคืœื˜ ืชื”ื™ื”
ืžืื•ืฉืจืช, ืื– ืืชื” ืœื ืืžื•ืจ ืœืื‘ื“ ืฉื•ื ืคืœื˜ ื‘ืžื”ืœืš ื›ื™ื‘ื•ื™.

ืœื ืจืง ื–ื”, ืื‘ืœ ืคืืคื ืฉื•ืžืจ ืืช ื—ื•ืชืžืช ื”ื–ืžืŸ ืฉืœ ื”ืคืœื˜. ืงืจืงืก ื”ื•ื’ื‘ืจ ืœ
ื ืฆืœ ืืช ื ืชื•ื ื™ ื—ื•ืชืžืช ื”ื–ืžืŸ ืื ืงื™ื™ืžื™ื. ืื– ืื ืืชื” ื›ื•ืชื‘ ืืช ื”ืคืœื˜ ืœืงื•ื‘ืฆื™ ื™ื•ืžืŸ
ืื• ืื™ืคืฉื”ื•, ื—ื•ืชืžื•ืช ื”ื–ืžืŸ ืฉืœืš ืฆืจื™ื›ื•ืช ืœื”ื™ื•ืช ื ื›ื•ื ื•ืช.

ื‘ืขื™ื•ืช
ืื ืืชื” ืžืฉืชืžืฉ ืชื•ืกืคืช or decr ืคืงื•ื“ื” ืœืฉื ื•ืช ืืช ืกืคื™ืจืช ื”ืชื”ืœื™ืš ืขื‘ื•ืจ ืฆื•ืคื”, ื–ื” ื™ืขืฉื”
ืœืืคืก ืœืจืžื” ื”ืžืฆื•ื™ื ืช ื‘ืงื•ื‘ืฅ INI ื›ืืฉืจ ืงืจืงืก ืžื•ืคืขืœ ืžื—ื“ืฉ.

ื›ืžื• ื›ืŸ, ื—ื•ื•ื™ืชื™ ื‘ืขื™ื•ืช ืขื ื”ืฉื™ืœื•ื‘ ืฉืœ copy_env ื• ื•ื™ืจื˜ื•ืืœื™. ื™ื™ืชื›ืŸ
ืฉื™ื ืœื‘ ืฉื“ื’ื™ืžืช ื”-INI ืœืขื™ืœ ืขื•ืงืคืช ื‘ืขื™ื” ื–ื• ืขื ื ืชื™ื‘ื™ื ืžืคื•ืจืฉื™ื.

Telnet ืžึดืžึฐืฉืึธืง
ืœ-Papa ื™ืฉ ืžืžืฉืง ืฉื•ืจืช ืคืงื•ื“ื” ื‘ืกื™ืกื™ ืฉืืœื™ื• ืืชื” ื™ื›ื•ืœ ืœื’ืฉืช ื“ืจืš telnet:

20202
ืœืขื–ื•ืจ

ืงืจืงืก ืœ ืžืคืชื—ื™ื
ืฉื™ืžื•ืฉ ืงืจืงืก as a ืกืคืจื™ื”
Circus ืžืกืคืง ืฉื™ืขื•ืจื™ื ื•ืคื•ื ืงืฆื™ื•ืช ื‘ืจืžื” ื’ื‘ื•ื”ื” ืฉื™ืืคืฉืจื• ืœืš ืœื ื”ืœ ืชื”ืœื™ื›ื™ื ืคื ื™ืžื”
ื”ื™ื™ืฉื•ืžื™ื ืฉืœืš.

ืœื“ื•ื’ืžื”, ืื ืืชื” ืจื•ืฆื” ืœื”ืคืขื™ืœ ืืจื‘ืขื” ืชื”ืœื™ื›ื™ื ืœื ืฆื—, ืชื•ื›ืœ ืœื›ืชื•ื‘:

ืž-Circus import get_arbiter

myprogram = {"cmd": "python myprogram.py", "numprocesses": 4}

arbiter = get_arbiter([ื”ืชื•ื›ื ื™ืช ืฉืœื™])
ื ืกื”:
arbiter.start()
ืกื•ืฃ ืกื•ืฃ:
arbiter.stop()

ืงื˜ืข ื–ื” ื™ืคืขื™ืœ ืืจื‘ืขื” ืžื•ืคืขื™ื ืฉืœ ื”ืชื•ื›ื ื™ืช ืฉืœื™ ื•ืœืฆืคื•ืช ื‘ื”ื ื‘ืฉื‘ื™ืœืš, ืœื”ืคืขื™ืœ ืื•ืชื ืžื—ื“ืฉ
ืื ื”ื ื™ืžื•ืชื• ื‘ืžืคืชื™ืข.

ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื›ืš, ืจืื” ืกืคืจื™ื”

ืžืืจื™ืš ืงืจืงืก
ืงืœ ืœื”ืจื—ื™ื‘ ืืช Circus ื›ื“ื™ ืœื™ืฆื•ืจ ืžืขืจื›ืช ืžื•ืจื›ื‘ืช ื™ื•ืชืจ, ืขืœ ื™ื“ื™ ื”ืื–ื ื” ืœื›ืœ
ืงืจืงืก ืื™ืจื•ืขื™ื ื“ืจืš ื”ืคืื‘/ืขืจื•ืฅ ื”ืžืฉื ื” ืฉืœื•, ื•ื”ื ืขืช ืื•ืชื• ื‘ืืžืฆืขื•ืช ืคืงื•ื“ื•ืช.

ื›ืš ืคื•ืขืœืช ืชื›ื•ื ืช ื”ื”ืชื ื•ืคืคื•ืช ืœืžืฉืœ: ื”ื™ื ืžืงืฉื™ื‘ื” ืœื›ืœ ื”ืชื”ืœื™ื›ื™ื ื’ื•ืกืกื™ื,
ืžื•ื“ื“ ื‘ืื™ื–ื• ืชื“ื™ืจื•ืช ื–ื” ืงื•ืจื”, ื•ืขื•ืฆืจ ืืช ื”ืฆื•ืคื™ื ื”ืžื•ืคืœืœื™ื ืœืื—ืจ ื™ื•ืชืจ ืžื“ื™ ื”ืคืขืœื” ืžื—ื“ืฉ
ื ื™ืกื™ื•ื ื•ืช.

Circus ืžื’ื™ืข ืขื ืžืขืจื›ืช ืชื•ืกืคื™ื ืฉืชืขื–ื•ืจ ืœืš ืœื›ืชื•ื‘ ื”ืจื—ื‘ื•ืช ื›ืืœื”, ื•ื›ืžื” ืžื•ื‘ื ื•ืช
ืชื•ืกืคื™ื ืฉืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื‘ื”ื ืฉื™ืžื•ืฉ ื—ื•ื–ืจ. ืจืื” ืชื•ืกืคื™ื.

ืืชื” ื™ื›ื•ืœ ื’ื ืœืงื‘ืœ ื”ืชื ื”ื’ื•ืช ื”ืคืขืœื” ื•ื›ื™ื‘ื•ื™ ืขื“ื™ื ื” ื™ื•ืชืจ ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘- ื•ื•ื™ื ืžืขืจื›ืช
ืฉื™ืืคืฉืจ ืœืš ืœื”ืจื™ืฅ ืงื•ื“ ืฉืจื™ืจื•ืชื™ ืœืคื ื™ ื•ืื—ืจื™ ื›ืžื” ืชื”ืœื™ื›ื™ื ืžื•ืคืขืœื™ื ืื•
ืขืฆืจ. ืจืื” ื•ื•ื™ื.

ืื—ืจื•ืŸ ื—ื‘ื™ื‘, ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ื•ืกื™ืฃ ืคืงื•ื“ื•ืช ื—ื“ืฉื•ืช. ืจืื” ื”ื•ืกืคืช cmds.

ืžืคืชื—ื™ื ืชื™ืขื•ื“ ืžื“ื“
ืงืจืงืก ืกึดืคึฐืจึดื™ึธื”
ื—ื‘ื™ืœืช ื”ืงืจืงืก ืžื•ืจื›ื‘ืช ืžืจืžื” ื’ื‘ื•ื”ื” get_arbiter() ืคื•ื ืงืฆื™ื” ื•ืฉื™ืขื•ืจื™ื ืจื‘ื™ื. ื‘
ื‘ืจื•ื‘ ื”ืžืงืจื™ื, ื”ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื” ื‘ืจืžื” ื’ื‘ื•ื”ื” ืืžื•ืจ ืœื”ืกืคื™ืง, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ื™ื•ืฆืจ ืืช ื›ืœ ืžื”
ื“ืจื•ืฉ ืœืงืจืงืก ืœืจื•ืฅ.

ืืชื” ื™ื›ื•ืœ ืœืชืช ื›ื™ืชื” ืœืฉื™ืขื•ืจื™ื ืฉืœ Circus ืื ืืชื” ืฆืจื™ืš ืคื™ืจื•ื˜ ืจื‘ ื™ื•ืชืจ ืžืžื” ืฉืžืฆื™ืข
ืชืฆื•ืจื”.

ื”ืฉืžื™ื™ื ืงื‘ืœ_ื‘ื•ืจืจ ืคื•ื ืงืฆื™ื”
get_arbiter() ื”ื•ื ืจืง ื ื•ื—ื•ืช ืขืœ ื’ื‘ื™ ืฉื™ืขื•ืจื™ ื”ืงืจืงืก ื”ืฉื•ื ื™ื. ื–ื” ื™ื•ืฆืจ ื
ืคื•ืกืง (ืžืขืžื“ ืฉื•ื˜ืจ) ืžื•ืคืข ืขื ื”ืืคืฉืจื•ื™ื•ืช ืฉืกื•ืคืงื•, ืืฉืจ ื‘ืชื•ืจื• ืžืจื™ืฅ ืกื™ื ื’ืœ
ืฆื•ืคื” ืขื ืกื™ื ื’ืœ ื”ืชึทื”ึฒืœึดื™ืš.

circus.get_arbiter()

ื“ื•ื’ืžื:

ืž-Circus import get_arbiter

arbiter = get_arbiter([{"cmd": "myprogram", "numprocesses": 3}])
ื ืกื”:
arbiter.start()
ืกื•ืฃ ืกื•ืฃ:
arbiter.stop()

ื—ื•ื’ื™ื
Circus ืžืกืคืงืช ืกื“ืจื” ืฉืœ ืฉื™ืขื•ืจื™ื ืฉื‘ื”ื ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื™ื™ืฉื ืืช ืžื ื”ืœ ื”ืชื”ืœื™ืš ืฉืœืš:

ยท ื”ืชึทื”ึฒืœึดื™ืš: ืขื•ื˜ืฃ ืชื”ืœื™ืš ืจืฅ ื•ืžืกืคืง ื›ืžื” ืขื•ื–ืจื™ื ืขืœ ื’ื‘ื™ื•.

ยท ืฆื•ืคื”: ื”ืคืขืœ ืžืกืคืจ ืžื•ืคืขื™ื ืฉืœ ื”ืชึทื”ึฒืœึดื™ืš ื ื’ื“ ืื•ืชื” ืคืงื•ื“ื”. ื ื”ืœ ืืช ื”ืžื•ื•ืช ื•
ื—ื™ื™ื ืฉืœ ืชื”ืœื™ื›ื™ื.

ยท ืฉื•ื˜ืจ: ืžื ื”ืœ ื›ืžื” ืฆื•ืคื”.

ื‘ื›ื™ืชื” circus.process.Process(name, wid, cmd, args=ืื™ืŸ, working_dir=ืœืœื, ืžืขื˜ืคืช=ืฉืงืจ,
uid=ืื™ืŸ, gid=ืื™ืŸ, env=ืื™ืŸ, rlimits=ืื™ืŸ, ื”ืคืขืœื”=ืื™ืŸ, use_fds=ืฉืงืจ, ืฆื•ืคื”=ืื™ืŸ,
spawn=ื ื›ื•ืŸ, pipe_stdout=ื ื›ื•ืŸ, pipe_stderr=ื ื›ื•ืŸ, close_child_stdout=ืฉืงืจ,
close_child_stderr=False)
ืขื•ื˜ืฃ ืชื”ืœื™ืš.

ืืคืฉืจื•ื™ื•ืช:

ยท wid: ื”ืžื–ื”ื” ื”ื™ื™ื—ื•ื“ื™ ืฉืœ ื”ืชื”ืœื™ืš. ืขืจืš ื–ื” ื™ืฉืžืฉ ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืืช $WID
ืžื—ืจื•ื–ืช ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ืื ืงื™ื™ืžืช.

ยท cmd: ื”ืคืงื•ื“ื” ืœื”ืคืขืœื”. ืขืฉื•ื™ ืœื”ื›ื™ืœ ื›ืœ ืื—ื“ ืžื”ืžืฉืชื ื™ื ื”ื–ืžื™ื ื™ื ืฉื”ื
ืžื•ืขื‘ืจ ืœื›ื™ืชื” ื–ื•. ื”ื ื™ื•ื—ืœืคื• ื‘ืืžืฆืขื•ืช ืชื—ื‘ื™ืจ ืคื•ืจืžื˜ python.

ยท ื˜ื•ืขืŸ: ื”ืืจื’ื•ืžื ื˜ื™ื ืœื”ืคืขืœืช ื”ืคืงื•ื“ื”. ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจืฉื™ืžื” ืื• ืžื—ืจื•ื–ืช. ืื ื˜ื•ืขืŸ is
ืžื—ืจื•ื–ืช, ื”ื™ื ืžืคื•ืฆืœืช ื‘ืืžืฆืขื•ืช shlex.split (). ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœืœื.

ยท ื”ืคืขืœื”: ื›ืืฉืจ ื ื™ืชืŸ ืงื•ื‘ืฅ ื”ืคืขืœื”, ื”ืคืจื™ื˜ ื”ืจืืฉื•ืŸ ื‘ืจืฆืฃ args
ื”ื•ืฉื’ ืž cmd ืขื“ื™ื™ืŸ ืžืชื™ื™ื—ืกื™ื ืœืจื•ื‘ ื”ืชื•ื›ื ื™ื•ืช ื›ืฉื ื”ืคืงื•ื“ื”, ืืฉืจ
ืœืื—ืจ ืžื›ืŸ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื•ื ื” ืžืฉื ื”ื”ืคืขืœื” ื‘ืคื•ืขืœ. ื–ื” ื”ื•ืคืš ืœืชืฆื•ื’ื”
ืฉื ืœืชื•ื›ื ื™ืช ื”ืžื‘ืฆืขืช ื‘ื›ืœื™ ืฉื™ืจื•ืช ื›ื’ื•ืŸ ps.

ยท working_dir: ืกืคืจื™ื™ืช ื”ืขื‘ื•ื“ื” ืฉื‘ื” ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื”. ืื ืœื ืžืกื•ืคืง, ื™ื”ื™ื”
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœืกืคืจื™ื™ืช ื”ืขื‘ื•ื“ื” ื”ื ื•ื›ื—ื™ืช.

ยท ืคึผึธื’ึธื–: ืื ื ึธื›ื•ึนืŸ, ื™ืจื™ืฅ ืืช ื”ืคืงื•ื“ื” ื‘ืกื‘ื™ื‘ืช ื”ืžืขื˜ืคืช. ืœื ื ื›ื•ืŸ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.
ืึทื–ื”ึธืจึธื”: ื–ึถื” is a ืื‘ื˜ื—ื” ืกื›ื ื”.

ยท uid: ืื ื ื™ืชืŸ, ื”ืื ืžื–ื”ื” ื”ืžืฉืชืžืฉ ืื• ื”ืฉื ืฉืื™ืชื• ื”ืคืงื•ื“ื” ืฆืจื™ื›ื” ืœืคืขื•ืœ. ื”ื ื•ื›ื—ื™
uid ื”ื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ยท gid: ืื ื ื™ืชืŸ, ื”ืื ืžื–ื”ื” ื”ืงื‘ื•ืฆื” ืื• ื”ืฉื ืฉืื™ืชื• ื”ืคืงื•ื“ื” ืฆืจื™ื›ื” ืœืคืขื•ืœ. ื”ื ื•ื›ื—ื™
gid ื”ื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ยท env: ืžื™ืคื•ื™ ื”ืžื›ื™ืœ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืื™ืชื ืชืคืขืœ ื”ืคืงื•ื“ื”.
ืื•ืคืฆื™ื•ื ืœื™

ยท rlimits: ืžื™ืคื•ื™ ื”ืžื›ื™ืœ ืฉืžื•ืช ื•ืขืจื›ื™ื ืฉืœ rlimit ืฉื™ื•ื’ื“ืจื• ืœืคื ื™ ื”-
ื”ืคืงื•ื“ื” ืคื•ืขืœืช.

ยท use_fds: ืื ื ื›ื•ืŸ, ืœื ื™ืกื’ื•ืจ ืืช ื”-fds ื‘ืชื”ืœื™ืš ื”ืžืฉื ื”. ื™ืฉ ืœื”ื’ื“ื™ืจ ืœ
ื ื›ื•ืŸ ื‘-Windows ืื stdout ืื• stderr ืžื ื•ืชื‘ื™ื ืžื—ื“ืฉ. ื‘ืจื™ืจืช ืžื—ื“ืœ: False.

ยท pipe_stdout: ืื ื ื›ื•ืŸ, ื™ืคืชื— PIPE ืขืœ stdout. ื‘ืจื™ืจืช ืžื—ื“ืœ: ื ื›ื•ืŸ.

ยท pipe_stderr: ืื ื ื›ื•ืŸ, ื™ืคืชื— PIPE ืขืœ stderr. ื‘ืจื™ืจืช ืžื—ื“ืœ: ื ื›ื•ืŸ.

ยท close_child_stdout: ืื ื ื›ื•ืŸ, ืžืคื ื” ืžื—ื“ืฉ ืืช ื”-stdout ืฉืœ ืชื”ืœื™ืš ื”ื™ืœื“ ืืœ /dev/null
ืื—ืจื™ ื”ืžื–ืœื’. ื‘ืจื™ืจืช ืžื—ื“ืœ: False.

ยท close_child_stderr: ืื ื ื›ื•ืŸ, ืžืคื ื” ืžื—ื“ืฉ ืืช ื”-stdout ืฉืœ ืชื”ืœื™ืš ื”ื™ืœื“ ืืœ /dev/null
ืื—ืจื™ ื”ืžื–ืœื’. ื‘ืจื™ืจืช ืžื—ื“ืœ: False.

ื’ื™ืœ() ื”ื—ื–ืจ ืืช ื’ื™ืœ ื”ืชื”ืœื™ืš ื‘ืฉื ื™ื•ืช.

ื™ึฐืœึธื“ึดื™ื()
ื”ื—ื–ืจ ืจืฉื™ืžื” ืฉืœ ื™ืœื“ื™ื ื™ืœื“ื™ื.

ืžื™ื“ืข () ื”ื—ื–ืจืช ืžื™ื“ืข ืขืœ ืชื”ืœื™ืš.

ื”ืžื™ื“ืข ื”ืžื•ื—ื–ืจ ื”ื•ื ืžื™ืคื•ื™ ืขื ื”ืžืคืชื—ื•ืช ื”ื‘ืื™ื:

ยท mem_info1: ื–ื™ื›ืจื•ืŸ ื’ื•ื“ืœ ืชื•ืฉื‘ ื‘ื‘ืชื™ื (RSS)

ยท mem_info2: ื’ื•ื“ืœ ื–ื™ื›ืจื•ืŸ ื•ื™ืจื˜ื•ืืœื™ ื‘ื‘ืชื™ื (VMS).

ยท ืžืขื‘ื“:% ืžื”ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“.

ยท ืž: % ืžืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ.

ยท ื–ืžืŸ: ื–ืžืŸ ืขื™ื‘ื•ื“ ืžืขื‘ื“ (ืžืฉืชืžืฉ + ืžืขืจื›ืช) ื‘ืฉื ื™ื•ืช.

ยท PID: ืžื–ื”ื” ืชื”ืœื™ืš.

ยท ืฉื ืžืฉืชืžืฉ: ืฉื ืžืฉืชืžืฉ ืฉื”ื•ื ื”ื‘ืขืœื™ื ืฉืœ ื”ืชื”ืœื™ืš.

ยท ื ื—ืžื“: ื ื—ืžื“ื•ืช ื”ืชื”ืœื™ืš (ื‘ื™ืŸ -20 ืœ-20)

ยท ืงื• ืก"ืž: ืฉื•ืจืช ื”ืคืงื•ื“ื” ืื™ืชื” ื”ืชื ื”ืœ ื”ืชื”ืœื™ืš.

is_child(pid)
ื”ื—ื–ืจ ื ื›ื•ืŸ ื”ื•ื ื”ื ืชื•ืŸ PID ื”ื•ื ื™ืœื“ ืฉืœ ื”ืชื”ืœื™ืš ื”ื–ื”.

PID ืœื”ื—ื–ื™ืจ ืืช PID

send_signal(*args, ** ืงื™ืœื•ื•ืื˜)
ืฉื•ืœื— ืื•ืช sig ืœืชื”ืœื™ืš.

send_signal_child(*args, ** ืงื™ืœื•ื•ืื˜)
ืฉืœื— ืื•ืช ื—ืชื™ืžื” ืœื™ืœื“ PID.

send_signal_children(*args, ** ืงื™ืœื•ื•ืื˜)
ืฉืœื— ืื•ืช ื—ืชื™ืžื” ืœื›ืœ ื”ื™ืœื“ื™ื.

ืžืฆื‘ ื”ื—ื–ืจ ืืช ืžืฆื‘ ื”ืชื”ืœื™ืš ื›ืงื‘ื•ืข

ยท ืจืฅ

ยท DEAD_OR_ZOMBIE

ยท ืœื ืงื™ื™ื

ยท ืื—ืจ

ืกื˜ื“ืจืจ ืœื”ื—ื–ื™ืจ ืืช stdout ื–ืจื

stdout ืœื”ื—ื–ื™ืจ ืืช stdout ื–ืจื

ืขืฆื•ืจ(*ืืจื’ืก, ** ืงื™ืœื•ื•ืื˜)
ืขืฆื•ืจ ืืช ื”ืชื”ืœื™ืš ื•ืกื’ื•ืจ ืืช stdout/stderr

ืื ื”ืชื”ืœื™ืš ื”ืžืชืื™ื ืขื“ื™ื™ืŸ ื›ืืŸ (ื‘ื“ืจืš ื›ืœืœ ื”ื•ื ื›ื‘ืจ ื ื”ืจื’ ืขืœ ื™ื“ื™
ื”ืฆื•ืคื”), ื ืฉืœื— SIGTERM, ื•ืื– SIGKILL ืœืื—ืจ ืฉื ื™ื™ื” ืื—ืช.

ืชื”ืœื™ืš ื”ื›ื™ื‘ื•ื™ (SIGTERM ื•ืื– SIGKILL) ืžืชื‘ืฆืข ื‘ื“ืจืš ื›ืœืœ ืขืœ ื™ื“ื™
ืฆื•ึนืคึถื”. ืื– ืื ื”ืชื”ืœื™ืš ืขื“ื™ื™ืŸ ืฉื, ื–ื” ืกื•ื’ ืฉืœ ื”ืชื ื”ื’ื•ืช ืจืขื”
ื›ื™ ืคืกืง ื”ื–ืžืŸ ื”ื—ื™ื ื ื™ ืœื ื™ื›ื‘ื“ ื›ืืŸ.

ื“ื•ื’ืžื:

>>> ืžืชื•ืš ืชื”ืœื™ืš ื™ื™ื‘ื•ื โ€‹โ€‹circus.process
>>> process = Process('Top', 'top', shell=True)
>>> process.age()
3.0107998847961426
>>> process.info()
'ืœืžืขืœื”: 6812 N/A tarek Zombie N/AN/AN/AN/AN/A'
>>> process.status
1
>>> process.stop()
>>> process.status
2
>>> process.info()
'ืื™ืŸ ืชื”ืœื™ืš ื›ื–ื” (ื ืขืฆืจ?)'

ื‘ื›ื™ืชื” circus.watcher.Watcher(ืฉื, cmd, args=ืื™ืŸ, numprocesses=1, warmup_delay=0.0,
working_dir=ืœืœื, ืžืขื˜ืคืช=ืฉืงืจ, shell_args=ืื™ืŸ, uid=ืื™ืŸ, max_retry=5, gid=ืื™ืŸ,
send_hup=ืฉืงืจ, stop_signal=15, stop_children=ืฉืงืจ, env=ืื™ืŸ, graceful_timeout=30.0,
prereload_fn=ืื™ืŸ, rlimits=ืื™ืŸ, ื”ืคืขืœื”=ืื™ืŸ, stdout_stream=ืื™ืŸ, stderr_stream=ืื™ืŸ,
priority=0, ืœื•ืœืื”=ืื™ืŸ, singleton=ืฉืงืจ, use_sockets=ืฉืงืจ, copy_env=ืฉืงืจ,
copy_path=ืฉืงืจ, max_age=0, max_age_variance=30, ื•ื•ื™ื=ืื™ืŸ, respawn=ื ื›ื•ืŸ, autostart=ื ื›ื•ืŸ,
on_demand=ืฉืงืจ, virtualenv=ืœืœื, close_child_stdout=ืฉืงืจ, close_child_stderr=ืฉืงืจ,
virtualenv_py_ver=ืœืœื, use_papa=ืฉืงืจ, **ืืคืฉืจื•ื™ื•ืช)
ื›ื™ืชื” ื ื™ื”ื•ืœ ืจืฉื™ืžื” ืฉืœ ืชื”ืœื™ื›ื™ื ืขื‘ื•ืจ ืคืงื•ื“ื” ื ืชื•ื ื”.

ืืคืฉืจื•ื™ื•ืช:

ยท ืฉื: ืฉื ืฉื ื™ืชืŸ ืœืฆื•ืคื”. ืžืฉืžืฉ ืœื–ื™ื”ื•ื™ ื™ื™ื—ื•ื“ื™.

ยท cmd: ื”ืคืงื•ื“ื” ืœื”ืคืขืœื”. ืขืฉื•ื™ ืœื”ื›ื™ืœ $WID, ืืฉืจ ื™ื•ื—ืœืฃ ื‘ wid.

ยท ื˜ื•ืขืŸ: ื”ืืจื’ื•ืžื ื˜ื™ื ืœื”ืคืขืœืช ื”ืคืงื•ื“ื”. ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจืฉื™ืžื” ืื• ืžื—ืจื•ื–ืช. ืื ื˜ื•ืขืŸ is
ืžื—ืจื•ื–ืช, ื”ื™ื ืžืคื•ืฆืœืช ื‘ืืžืฆืขื•ืช shlex.split (). ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœืœื.

ยท ืžืกืคืจ ืชื”ืœื™ื›ื™ื: ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ืœื”ืคืขืœื”.

ยท working_dir: ืกืคืจื™ื™ืช ื”ืขื‘ื•ื“ื” ืฉื‘ื” ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื”. ืื ืœื ืžืกื•ืคืง, ื™ื”ื™ื”
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœืกืคืจื™ื™ืช ื”ืขื‘ื•ื“ื” ื”ื ื•ื›ื—ื™ืช.

ยท ืคึผึธื’ึธื–: ืื ื ึธื›ื•ึนืŸ, ื™ืจื™ืฅ ืืช ื”ืคืงื•ื“ื” ื‘ืกื‘ื™ื‘ืช ื”ืžืขื˜ืคืช. ืœื ื ื›ื•ืŸ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.
ืึทื–ื”ึธืจึธื”: ื–ึถื” is a ืื‘ื˜ื—ื” ืกื›ื ื”.

ยท uid: ืื ื ื™ืชืŸ, ื”ืื ืžื–ื”ื” ื”ืžืฉืชืžืฉ ืื• ื”ืฉื ืฉืื™ืชื• ื”ืคืงื•ื“ื” ืฆืจื™ื›ื” ืœืคืขื•ืœ. ื”ื ื•ื›ื—ื™
uid ื”ื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ยท gid: ืื ื ื™ืชืŸ, ื”ืื ืžื–ื”ื” ื”ืงื‘ื•ืฆื” ืื• ื”ืฉื ืฉืื™ืชื• ื”ืคืงื•ื“ื” ืฆืจื™ื›ื” ืœืคืขื•ืœ. ื”ื ื•ื›ื—ื™
gid ื”ื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ยท ืฉืœื—_ื”ืค: ืื ื ื›ื•ืŸ, ื˜ืขื™ื ืช ืชื”ืœื™ืš ืžื—ื“ืฉ ืชืชื‘ืฆืข ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื”ืื•ืช SIGHUP.
ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœ-False.

ยท ืื•ืช_ืขืฆื™ืจื”: ื”ืื•ืช ืฉื™ืฉ ืœืฉืœื•ื— ื‘ืขืช ืขืฆื™ืจืช ื”ืชื”ืœื™ืš. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื SIGTERM.

ยท ืขืฆื•ืจ_ื™ืœื“ื™ื: ืฉืœื— ืืช ื” ืื•ืช_ืขืฆื™ืจื” ื’ื ืœื™ืœื“ื™ื. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœ-False.

ยท env: ืžื™ืคื•ื™ ื”ืžื›ื™ืœ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืื™ืชื ืชืคืขืœ ื”ืคืงื•ื“ื”.
ืื•ืคืฆื™ื•ื ืœื™

ยท rlimits: ืžื™ืคื•ื™ ื”ืžื›ื™ืœ ืฉืžื•ืช ื•ืขืจื›ื™ื ืฉืœ rlimit ืฉื™ื•ื’ื“ืจื• ืœืคื ื™ ื”-
ื”ืคืงื•ื“ื” ืคื•ืขืœืช.

ยท stdout_stream: ืžื™ืคื•ื™ ืฉืžื’ื“ื™ืจ ืืช ื”ื–ืจื ืขื‘ื•ืจ ื”-proces stdout. ื‘ืจื™ืจื•ืช ืžื—ื“ืœ
ืœ-None.

ืื•ืคืฆื™ื•ื ืืœื™. ื›ืืฉืจ ืžืกื•ืคืง, stdout_stream ื”ื•ื ืžื™ืคื•ื™ ื”ืžื›ื™ืœ ืขื“ ืฉืœื•ืฉื” ืžืคืชื—ื•ืช:

ยท ื‘ื›ื™ืชื”: ื›ื™ืชืช ื”ื ื—ืœ. ื‘ืจื™ืจืช ืžื—ื“ืœ ืœ circus.stream.FileStream

ยท ืฉื ื”ืงื•ื‘ืฅ: ืฉื ื”ืงื•ื‘ืฅ, ืื ืžืฉืชืžืฉื™ื ื‘-FileStream

ยท max_bytes: ื’ื•ื“ืœ ืงื•ื‘ืฅ ืžืงืกื™ืžืœื™, ืฉืœืื—ืจื™ื• ื ืคืชื— ืงื•ื‘ืฅ ืคืœื˜ ื—ื“ืฉ. ื‘ืจื™ืจื•ืช ืžื—ื“ืœ
ืœ-0 ื›ืœื•ืžืจ ืื™ืŸ ื’ื•ื“ืœ ืžืงืกื™ืžืœื™ (ืžืชืื™ื ืจืง ืขื FileStream).

ยท ื’ื™ื‘ื•ื™_ืกืคื™ืจืช: ื›ืžื” ื’ื™ื‘ื•ื™ื™ื ืœืฉืžื•ืจ ื‘ืขืช ืกื™ื‘ื•ื‘ ืงื‘ืฆื™ื ืœืคื™ ื”
ืคืจืžื˜ืจ max_bytes. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 0 ืžื” ืฉืื•ืžืจ ืฉืœื ืžืชื‘ืฆืขื™ื ื’ื™ื‘ื•ื™ื™ื (ืจืง
ื™ืฉื™ื ืขื FileStream)

ืžื™ืคื•ื™ ื–ื” ื™ืฉืžืฉ ืœื™ืฆื™ืจืช ื–ืจื ื”ื ื™ืชืŸ ืœื”ืชืงืฉืจื•ืช ืฉืœ ื”ืžื—ืœืงื” ืฉืฆื•ื™ื ื”.
ื›ืœ ืขืจืš ืฉืžืชืงื‘ืœ ืขืœ ื™ื“ื™ ื”ื ื™ืชืŸ ืœื”ืชืงืฉืจื•ืช ื”ื•ื ืžื™ืคื•ื™ ื”ืžื›ื™ืœ:

ยท PID - ืชื”ืœื™ืš pid

ยท ืฉื - ืฉื ื”ื–ืจื (ืกื˜ื“ืจืจ or stdout)

ยท ื ืชื•ื ื™ื - ื”ื ืชื•ื ื™ื

ื–ื” ืœื ื ืชืžืš ื‘-Windows.

ยท stderr_stream: ืžื™ืคื•ื™ ืฉืžื’ื“ื™ืจ ืืช ื”ื–ืจื ืขื‘ื•ืจ ืชื”ืœื™ืš stderr. ื‘ืจื™ืจื•ืช ืžื—ื“ืœ
ืœ-None.

ืื•ืคืฆื™ื•ื ืืœื™. ื›ืืฉืจ ืžืกื•ืคืง, stderr_stream ื”ื•ื ืžื™ืคื•ื™ ื”ืžื›ื™ืœ ืขื“ ืฉืœื•ืฉื” ืžืคืชื—ื•ืช:
- ื‘ื›ื™ืชื”: ื›ื™ืชืช ื”ื ื—ืœ. ื‘ืจื™ืจืช ืžื—ื“ืœ ืœ circus.stream.FileStream - ืฉื ื”ืงื•ื‘ืฅ: ื”
ืฉื ืงื•ื‘ืฅ, ืื ืžืฉืชืžืฉื™ื ื‘- FileStream - max_bytes: ื’ื•ื“ืœ ืงื•ื‘ืฅ ืžืงืกื™ืžืœื™, ื•ืœืื—ืจ ืžื›ืŸ ื—ื“ืฉ
ืงื•ื‘ืฅ ื”ืคืœื˜ ื”ื•ื
ื ืคืชื—. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 0, ื›ืœื•ืžืจ ืื™ืŸ ื’ื•ื“ืœ ืžืงืกื™ืžืœื™ (ืžืชืื™ื ืจืง ืขื
FileStream)

ยท ื’ื™ื‘ื•ื™_ืกืคื™ืจืช: ื›ืžื” ื’ื™ื‘ื•ื™ื™ื ืœืฉืžื•ืจ ื‘ืขืช ืกื™ื‘ื•ื‘ ืงื‘ืฆื™ื ืœืคื™ ื”
ืคืจืžื˜ืจ max_bytes. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 0 ืžื” ืฉืื•ืžืจ ืฉืœื ืžืชื‘ืฆืขื™ื ื’ื™ื‘ื•ื™ื™ื (ืจืง
ื™ืฉื™ื ืขื FileStream).

ืžื™ืคื•ื™ ื–ื” ื™ืฉืžืฉ ืœื™ืฆื™ืจืช ื–ืจื ื”ื ื™ืชืŸ ืœื”ืชืงืฉืจื•ืช ืฉืœ ื”ืžื—ืœืงื” ืฉืฆื•ื™ื ื”.

ื›ืœ ืขืจืš ืฉืžืชืงื‘ืœ ืขืœ ื™ื“ื™ ื”ื ื™ืชืŸ ืœื”ืชืงืฉืจื•ืช ื”ื•ื ืžื™ืคื•ื™ ื”ืžื›ื™ืœ:

ยท PID - ืชื”ืœื™ืš pid

ยท ืฉื - ืฉื ื”ื–ืจื (ืกื˜ื“ืจืจ or stdout)

ยท ื ืชื•ื ื™ื - ื”ื ืชื•ื ื™ื

ื–ื” ืœื ื ืชืžืš ื‘-Windows.

ยท ืขื“ื™ืคื•ืช -- ืžืกืคืจ ืฉืœื ื”ืžื’ื“ื™ืจ ืขื“ื™ืคื•ืช ืขื‘ื•ืจ ื”ืฆื•ืคื”. ื›ืฉื”ื‘ื•ืจืจ ื™ืขืฉื” ื–ืืช
ื›ืžื” ืคืขื•ืœื•ืช ืขืœ ื›ืœ ื”ืฆื•ืคื™ื, ื–ื” ื™ืžื™ื™ืŸ ืื•ืชื ืขื ื”ืฉื“ื” ื”ื–ื”, ืžื”
ืžืกืคืจ ื’ื“ื•ืœ ื™ื•ืชืจ ืœืงื˜ืŸ ื‘ื™ื•ืชืจ. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 0)

ยท ืงึฐืœึธืฃ ื‘ึผื•ึนื“ึตื“ -- ืื ื ื›ื•ืŸ, ืœืฆื•ืคื” ื”ื–ื” ื™ืฉ ืชื”ืœื™ืš ื™ื—ื™ื“. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท use_sockets -- ืื ื ื›ื•ืŸ, ื”ืชื”ืœื™ื›ื™ื ื™ื™ืจืฉื• ืืช ืžืชืืจื™ ื”ืงื‘ืฆื™ื, ื•ื‘ื›ืš ื™ื›ื•ืœื™ื
ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืฉืงืขื™ื ืฉื ืคืชื—ื• ืขืœ ื™ื“ื™ circusd. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท ืœืคื™ ื“ืจื™ืฉื” -- ืื ื ื›ื•ืŸ, ื”ืชื”ืœื™ื›ื™ื ื™ื•ืคืขืœื• ืจืง ื‘ื—ื™ื‘ื•ืจ ื”ืจืืฉื•ืŸ
ืœืฉืงืข (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท copy_env -- ืื ื ื›ื•ืŸ, ื”ืกื‘ื™ื‘ื” ืฉื‘ื” ืžืชื ื”ืœ ื”ืงืจืงืก ืชื”ื™ื”
ืžืฉื•ื›ืคืœ ืขื‘ื•ืจ ื”ืขื•ื‘ื“ื™ื. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื True ื‘-Windows ืžื›ื™ื•ื•ืŸ ืฉืื™ื ืš ื™ื›ื•ืœ ืœื”ืคืขื™ืœ
ื›ืœ ืงื•ื‘ืฅ ื”ืคืขืœื” ืœืœื SYSTEMROOT ืžึดืฉืึฐืชึทื ึถื”. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท copy_path - ืื ื–ื” ื ื›ื•ืŸ, ืงืจืงืก sys.path ื ืฉืœื— ืœืชื”ืœื™ืš ื“ืจืš PYTHONPATH.
ืขืœื™ืš ืœื”ืคืขื™ืœ copy_env ืœ copy_path ืœืขื‘ื•ื“. (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท max_age: ืื ืžื•ื’ื“ืจ ืœืื—ืจ ื‘ืกื‘ื™ื‘ื•ืช max_age seconds, ื”ืชื”ืœื™ืš ืžื•ื—ืœืฃ ื‘ื—ื“ืฉ
ืื—ื“. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 0, ืžื•ืฉื‘ืช)

ยท max_age_variance: ื”ืžืกืคืจ ื”ืžืจื‘ื™ ืฉืœ ืฉื ื™ื•ืช ืฉื ื™ืชืŸ ืœื”ื•ืกื™ืฃ ืœ-max_age.
ืขืจืš ื ื•ืกืฃ ื–ื” ื ื•ืขื“ ืœื”ื™ืžื ืข ืžื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ื•-ื–ืžื ื™ืช. ื
ื”ืชื”ืœื™ืš ื™ืชืงื™ื™ื ื‘ื™ืŸ max_age ืœื‘ื™ืŸ max_age + max_age_variance ืฉื ื™ื•ืช.

ยท ื•ื•ื™ื: ืคื•ื ืงืฆื™ื•ืช ื”ืชืงืฉืจื•ืช ื—ื•ื–ืจืช ืœื—ื™ื‘ื•ืจ ืœื”ืคืขืœื” ื•ื›ื™ื‘ื•ื™ ืฉืœ ื”ืฆื•ืคื”
ื”ืชื”ืœื™ืš. ื•ื•ื™ื ื”ื•ื dict ืฉื‘ื• ื›ืœ ืžืคืชื— ื”ื•ื ืฉื ื”ื•ื• ื•ื›ืœ ืขืจืš ื”ื•ื a
2-tuple ืขื ื”ืฉื ืฉืœ ื”ื ื™ืชืŸ ืœื”ืชืงืฉืจื•ืช ืื• ื”ื ืงืจื ืขืฆืžื• ื•ื“ื’ืœ ื‘ื•ืœื™ืื ื™
ื”ืžืฆื™ื™ืŸ ืื ืื™ืŸ ืœื”ืชืขืœื ืžื—ืจื™ื’ ื”ืžืชืจื—ืฉ ื‘-hook. ืืคืฉืจื™
ืขืจื›ื™ื ืขื‘ื•ืจ ืฉื ื”ื•ื•: ืœืคื ื™_ื”ืชื—ืœ, after_start, before_spawn, after_spawn,
ืœืคื ื™_ืขืฆื•ืจ, after_stop., ืœืคื ื™_ืื•ืช, ืื—ืจื™_ืื•ืช or ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช_ืžื•ืจื—ื‘ื•ืช.

ยท ืืคืฉืจื•ื™ื•ืช -- ืืคืฉืจื•ื™ื•ืช ื ื•ืกืคื•ืช ืขื‘ื•ืจ ื”ืขื•ื‘ื“. ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื ืžืฆืื•ืช ื‘ืชืฆื•ืจื”
ืœืžืฉืœ, ืžื•ืขื‘ืจื™ื ื‘ืžื™ืคื•ื™ ื–ื” -- ื–ื” ื™ื›ื•ืœ ืœืฉืžืฉ ืชื•ืกืคื™ื ืขื‘ื•ืจ
ืืคืฉืจื•ื™ื•ืช ืกืคืฆื™ืคื™ื•ืช ืœืฆื•ืคื”.

ยท respawn -- ืื ืžื•ื’ื“ืจ ื›-false, ื”ืชื”ืœื™ื›ื™ื ื”ืžื˜ื•ืคืœื™ื ืขืœ ื™ื“ื™ ืฆื•ืคื” ืœื ื™ื”ื™ื•
ื”ื•ืคืฅ ืžื—ื“ืฉ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ื ื›ื•ืŸ)

ยท ื•ื™ืจื˜ื•ืืœื™ -- ืกืคืจื™ื™ืช ื”ืฉื•ืจืฉ ืฉืœ virtualenv. ืื ื™ืกื•ืคืง, ื”ืฆื•ืคื” ื™ืขืฉื” ื–ืืช
ืœื”ืขืžื™ืก ืืช ื”ืกื‘ื™ื‘ื” ืœื‘ื™ืฆื•ืขื”. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

ยท close_child_stdout: ืื ื ื›ื•ืŸ, ืกื•ื’ืจ ืืช ื”-stdout ืื—ืจื™ ื”ืžื–ืœื’. ื‘ืจื™ืจืช ืžื—ื“ืœ: False.

ยท close_child_stderr: ืื ื ื›ื•ืŸ, ืกื•ื’ืจ ืืช ื”ืกื˜ื“ืจืจ ืื—ืจื™ ื”ืžื–ืœื’. ื‘ืจื™ืจืช ืžื—ื“ืœ: False.

ยท use_papa: ืื ื ื›ื•ืŸ, ื”ืฉืชืžืฉ ื‘ืœื™ื‘ืช ืชื”ืœื™ืš papa ืขื‘ื•ืจ ืชื”ืœื™ืš ื–ื”. ื‘ืจื™ืจืช ืžื—ื“ืœ: False.

kill_process(*args, **ืงื•ื•ืืจื’ืก)
ืชื”ืœื™ืš ื”ืจื’ (stop_signal, graceful_timeout ื•ืื– SIGKILL)

kill_processes(*args, **ืงื•ื•ืืจื’ืก)
ื”ืจื•ื’ ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื (stop_signal, graceful_timeout ื•ืื– SIGKILL)

manage_processes(*args, **ืงื•ื•ืืจื’ืก)
ื ื™ื”ื•ืœ ืชื”ืœื™ื›ื™ื.

notify_event(ื ื•ืฉื, msg)
ืคืจืกื ื”ื•ื“ืขื” ื‘ืขืจื•ืฅ ืžืคืจืกื ื”ืื™ืจื•ืข

reap_and_manage_processes(*args, **ืงื•ื•ืืจื’ืก)
ืงืฆื•ืจ ื•ื ื”ืœ ืชื”ืœื™ื›ื™ื.

reap_processes(*args, ** ืงื™ืœื•ื•ืื˜)
ืงืฆื•ืจ ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืขื‘ื•ืจ ื”ืฆื•ืคื” ื”ื–ื”.

send_signal_child(*args, ** ืงื™ืœื•ื•ืื˜)
ืฉืœื— ืื•ืช ืœื™ืœื“.

spawn_process(recovery_wid=None)
ืชื”ืœื™ืš ื”ืฉืจืฆื™ื.

ื”ื—ื–ืจ True ืื ื‘ืกื“ืจ, False ืื ื™ืฉ ืœืขืฆื•ืจ ืืช ื”ืฆื•ืคื”

spawn_processes(*args, **ืงื•ื•ืืจื’ืก)
ืชื”ืœื™ื›ื™ ื”ืฉืจืฆื™ื.

ื‘ื›ื™ืชื” circus.arbiter.Arbiter(watchers, ื ืงื•ื“ืช ืงืฆื”, pubsub_endpoint, check_delay=1.0,
prereload_fn=ืื™ืŸ, context=ืื™ืŸ, ืœื•ืœืื”=ืื™ืŸ, statsd=ืฉืงืจ, stats_endpoint=ืื™ืŸ,
statsd_close_outputs=ืฉืงืจ, multicast_endpoint=ืœืœื, plugins=ืื™ืŸ, ืฉืงืขื™ื=ืื™ืŸ,
warmup_delay=0, httpd=ืฉืงืจ, httpd_host='localhost', httpd_port=8080,
httpd_close_outputs=ืฉืงืจ, debug=ืฉืงืจ, debug_gc=ืฉืงืจ, ssh_server=ืื™ืŸ,
proc_name='circusd', pidfile=ืื™ืŸ, loglevel=ืœืœื, logoutput=ืœืœื, loggerconfig=ืœืœื,
fqdn_prefix=ืื™ืŸ, umask=ืื™ืŸ, endpoint_owner=ืื™ืŸ, papa_endpoint=ืœืœื)
ื”ื›ื™ืชื” ืžืฉืžืฉืช ืœืฉืœื™ื˜ื” ื‘ืจืฉื™ืžืช ืฆื•ืคื™ื.

ืืคืฉืจื•ื™ื•ืช:

ยท ืฆื•ืคื™ื -- ืจืฉื™ืžื” ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœ Watcher

ยท ื ืงื•ื“ืช ืกื™ื•ื -- ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ื”ื‘ืงืจ ZMQ

ยท pubsub_endpoint -- ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ pubsub

ยท ืกื˜ื˜ื™ืกื˜ื™ืงื” -- ืื ื ื›ื•ืŸ, ืžื•ืคืขืœ ืชื”ืœื™ืš circusd-stats (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท stats_endpoint -- ื ืงื•ื“ืช ื”ืงืฆื” ื”ืกื˜ื˜ื™ืกื˜ื™ืช.

ยท statsd_close_outputs -- ืื True ืฉื•ืœื— ืืช circusd-stats stdout/stderr ืืœ
/dev/null (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท multicast_endpoint -- ื ืงื•ื“ืช ื”ืกื™ื•ื ืฉืœ ืจื™ื‘ื•ื™ ืฉื™ื“ื•ืจื™ื ืœื’ื™ืœื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืืฉื›ื•ืœ circusd
(ื‘ืจื™ืจืช ืžื—ื“ืœ: udp://237.219.251.97:12027) ื›ืชื•ื‘ืช ืจื™ื‘ื•ื™ ืฉื™ื“ื•ืจ ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื‘ื™ืŸ 224.0.0.0
ืœ-239.255.255.255 ื•ื–ื”ื” ืขื‘ื•ืจ ืืฉื›ื•ืœ ื”ื›ืœ.

ยท check_delay -- ื”ื”ืฉื”ื™ื” ื‘ื™ืŸ ืฉืชื™ ื ืงื•ื“ื•ืช ื‘ืงืจื” (ื‘ืจื™ืจืช ืžื—ื“ืœ: 1 ืฉื ื™ื•ืช)

ยท prereload_fn -- ื ื™ืชืŸ ืœื”ืชืงืฉืจื•ืช ืฉื™ื‘ื•ืฆืข ื‘ื›ืœ ื˜ืขื™ื ื” ืžื—ื“ืฉ (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

ยท ื”ืงืฉืจ -- ืื ืžืกื•ืคืง, ื”ื”ืงืฉืจ ืฉืœ zmq ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

ยท

ืœื•ืœืื”: if ื‘ืชื ืื™, a zmq.eventloop.ioloop.IOLoop ืœืžืฉืœ
ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ืžื—ื•ื“ืฉ. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

ยท ืชื•ืกืคื™ื -- ืจืฉื™ืžื” ืฉืœ ืชื•ืกืคื™ื. ื›ืœ ืคืจื™ื˜ ื”ื•ื ืžื™ืคื•ื™ ืขื:

ยท ืœื”ืฉืชืžืฉ -- ืฉื ืžืœื ื”ืžืฆื‘ื™ืข ืขืœ ืžื—ืœืงืช ื”ืคืœืื’ื™ืŸ

ยท ื›ืœ ืขืจืš ืื—ืจ ืžื•ืขื‘ืจ ืœืคืœืื’ื™ืŸ ื‘- config ืื•ึนืคึผึฐืฆึดื™ึธื”

ยท ืืจื•ื‘ื•ืช -- ืžื™ืคื•ื™ ืฉืœ ืฉืงืขื™ื. ื›ืœ ืžืคืชื— ื”ื•ื ืฉื ื”ืฉืงืข, ื•ื›ืœ ืขืจืš a
CircusSocket ืžืขืžื“. (ื‘ืจื™ืจืช ืžื—ื“ืœ: ืื™ืŸ)

ยท ืขื™ื›ื•ื‘_ื—ื™ืžื•ื - ืขื™ื›ื•ื‘ ื‘ืฉื ื™ื•ืช ื‘ื™ืŸ ื”ืคืขืœื” ืฉืœ ืฉื ื™ ืฆื•ืคื™ื. (ื‘ืจื™ืจืช ืžื—ื“ืœ: 0)

ยท httpd -- ืื ื ื›ื•ืŸ, ืžื•ืคืขืœ ืชื”ืœื™ืš circushttpd (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท httpd_host -- ื”ืžืืจื— circushttpd (ื‘ืจื™ืจืช ืžื—ื“ืœ: localhost)

ยท httpd_port -- ื ืžืœ circushttpd (ื‘ืจื™ืจืช ืžื—ื“ืœ: 8080)

ยท httpd_close_outputs -- ืื ื ื›ื•ืŸ, ืฉื•ืœื— ืืช circushttpd stdout/stderr ืืœ /dev/null.
(ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท ื‘ืื’ื™ื -- ืื ื ื›ื•ืŸ, ืžื•ืกื™ืฃ ืžื™ื“ืข ืจื‘ ืขืœ ื ื™ืคื•ื™ ื‘ืื’ื™ื ื‘-stdout (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท debug_gc -- ืื ื ื›ื•ืŸ, ื”ืื gc.set_debug(gc.DEBUG_LEAK) (ื‘ืจื™ืจืช ืžื—ื“ืœ: False) ืœ-circusd
ืœื ืชื— ื‘ืขื™ื•ืช (ื‘ืจื™ืจืช ืžื—ื“ืœ: False)

ยท proc_name -- ืฉื ืชื”ืœื™ืš ื”ื‘ื•ืจืจ

ยท

fqdn_prefix -- a ืงื™ื“ื•ืžืช ืœ ืžื” ื”ื™ื ื™ื™ื—ื•ื“ื™ ืžื–ื”ื” of ืžื” ื”ื™ื ืงืจืงืก
ืžื•ืคืข ืขืœ ื”ืืฉื›ื•ืœ.

ยท endpoint_owner - ืžืฉืชืžืฉ ื™ื•ื ื™ืงืก ืœื‘ื—ื™ืจืช ื ืงื•ื“ืช ื”ืงืฆื” ืื ืžืฉืชืžืฉื™ื ื‘-ipc.

ยท papa_endpoint -- ื ืงื•ื“ืช ื”ืกื™ื•ื ืฉืœ ืœื™ื‘ืช ืชื”ืœื™ืš Papa

add_watcher(*args, **ืงื•ื•ืืจื’ืก)
ืžื•ืกื™ืฃ ืฆื•ืคื”.

ืืคืฉืจื•ื™ื•ืช:

ยท ืฉื: ืฉื ื”ืฆื•ืคื” ืœื”ื•ืกืคื”

ยท cmd: ื”ืคืงื•ื“ื” ืœื”ืคืขืœื”.

ยท ื›ืœ ืฉืืจ ื”ืืคืฉืจื•ื™ื•ืช ื”ืžื•ื’ื“ืจื•ืช ื‘ื‘ื ืื™ Watcher.

get_watcher(ืฉื)
ื”ื—ื–ืจ ืืช ื”ืฆื•ืคื” ืฉื.

numprocesses()
ื”ื—ื–ืจ ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื”ืคื•ืขืœื™ื ื‘ื›ืœ ื”ืฆื•ืคื™ื.

numwatchers()
ื”ื—ื–ืจ ืืช ืžืกืคืจ ื”ืฆื•ืคื™ื.

ื˜ืขืŸ ืžื—ื“ืฉ(*args, **ืงื•ื•ืืจื’ืก)
ื˜ื•ืขืŸ ื”ื›ืœ ืžื—ื“ืฉ.

ื”ืคืขืœ ืืช prereload_fn() ื ื™ืชืŸ ืœื”ืชืงืฉืจ ืื ื™ืฉ, ืื– ื‘ื—ืŸ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืฆื•ืคื™ื.

start(*args, **ืงื•ื•ืืจื’ืก)
ืžืชื—ื™ืœ ืืช ื›ืœ ื”ืฆื•ืคื™ื.

ืื ื”-ioloop ืกื•ืคืง ื‘ืžื”ืœืš ื”ืงืจื™ืื” __init__(), ืžืคืขื™ืœ ืืช ื›ืœ ื”ืฆื•ืคื™ื
ื›ืงื•ืจื•ื˜ื™ื ื” ืกื˜ื ื“ืจื˜ื™ืช

ืื ื”-ioloop ืœื ืกื•ืคืง ื‘ืžื”ืœืš ื”ืงืจื™ืื” __init__() (ื‘ืจื™ืจืช ืžื—ื“ืœ), ืžืชื—ื™ืœ
ื›ืœ ื”ืฆื•ืคื™ื ื•ื”-eventloop (ื•ื’ื ื—ืกื™ืžื•ืช ื›ืืŸ). ื‘ืžืฆื‘ ื–ื” ื”ืฉื™ื˜ื”
ืืกื•ืจ ืœื”ื ื™ื‘ ืฉื•ื ื“ื‘ืจ ื›ื™ ื–ื” ื ืงืจื ื›ืฉื™ื˜ื” ืกื˜ื ื“ืจื˜ื™ืช.

ืคืจืžื˜ืจื™ื
cb -- ื”ืชืงืฉืจื•ืช ื—ื•ื–ืจืช ื”ืชืงืฉืจื” ืœืื—ืจ ืฉื›ืœ ื”ืฆื•ืคื™ื ื”ื•ืคืขืœื•, ืžืชื™
ื”ืœื•ืœืื” ืœื ืกื•ืคืงื”.

ื›ืชื™ื‘ื” ืชื•ืกืคื™ื
Circus ืžื’ื™ืข ืขื ืžืขืจื›ืช ืชื•ืกืคื™ื ื”ืžืืคืฉืจืช ืœืš ืœืชืงืฉืจ ืื™ืชื” ืงืจืงืก.

ื”ืขืจื”:
ืื ื• ืขืฉื•ื™ื™ื ืœื”ื•ืกื™ืฃ ืชืžื™ื›ืช circusd-stats ืœืชื•ืกืคื™ื ื‘ื”ืžืฉืš.

ืชื•ืกืฃ ืžื•ืจื›ื‘ ืžืฉื ื™ ื—ืœืงื™ื:

ยท ืžื ื•ื™ ZMQ ืœื›ืœ ื”ืื™ืจื•ืขื™ื ืฉืคื•ืจืกืžื• ืขืœ ื™ื“ื™ ืงืจืงืก

ยท ืœืงื•ื— ZMQ ืœืฉืœื•ื— ืืœื™ื• ืคืงื•ื“ื•ืช ืงืจืงืก

ื›ืœ ืชื•ืกืฃ ืžื•ืคืขืœ ื›ืชื”ืœื™ืš ื ืคืจื“ ืชื—ืช ืฆื•ืคื” ืžื•ืชืื ืื™ืฉื™ืช.

ื›ืžื” ื“ื•ื’ืžืื•ืช ืœื›ืžื” ืชื•ืกืคื™ื ืฉืชื•ื›ืœ ืœื™ืฆื•ืจ ืขื ืžืขืจื›ืช ื–ื•:

ยท ืžืขืจื›ืช ื”ืชืจืื•ืช ื”ืฉื•ืœื—ืช ื”ืชืจืื•ืช ื‘ื“ื•ืืจ ืืœืงื˜ืจื•ื ื™ ื›ืืฉืจ ืฆื•ืคื” ืžื ืคื ืฃ

ยท ื›ื•ืจืช ืขืฆื™ื

ยท ื›ืœื™ ื”ืžื•ืกื™ืฃ ืื• ืžืกื™ืจ ืชื”ืœื™ื›ื™ื ื‘ื”ืชืื ืœืขื•ืžืก

ยท ื•ื›ื•.

Circus ืขืฆืžื• ืžื’ื™ืข ืขื ื›ืžื” ืชื•ืกืคื™ื ืžื•ื‘ื ื™ื.

ื”ืฉืžื™ื™ื CircusPlugin ื‘ื›ื™ืชื”
Circus ืžืกืคืงืช ืฉื™ืขื•ืจ ื‘ืกื™ืก ืฉื™ืขื–ื•ืจ ืœืš ืœื™ื™ืฉื ืชื•ืกืคื™ื: circus.plugins.CircusPlugin

ื‘ื›ื™ืชื” circus.plugins.CircusPlugin(ื ืงื•ื“ืช ืงืฆื”, pubsub_endpoint, check_delay, ssh_server=ืื™ืŸ,
**ืชืฆื•ืจื”)
ืžื—ืœืงื” ื‘ืกื™ืก ืœื›ืชื™ื‘ืช ืชื•ืกืคื™ื.

ืืคืฉืจื•ื™ื•ืช:

ยท ื”ืงืฉืจ -- ื”ื”ืงืฉืจ ืฉืœ ZMQ ืœืฉื™ืžื•ืฉ

ยท ื ืงื•ื“ืช ืกื™ื•ื -- ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ circusd ZMQ

ยท pubsub_endpoint -- ื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ืคืื‘/ืžืฉื ื” circusd ZMQ

ยท check_delay -- ืขื™ื›ื•ื‘ ื”ื‘ื“ื™ืงื” ื”ืžื•ื’ื“ืจ

ยท config -- ืžื™ืคื•ื™ ืชืฆื•ืจื” ื‘ื—ื™ื ื

call(command, **ืื‘ื™ื–ืจื™ื)
ืฉื•ืœื— ืืช ื”ืคืงื•ื“ื” ืืœ ืงืจืงืก

ืืคืฉืจื•ื™ื•ืช:

ยท ื”ืคืงื•ื“ื” -- ื”ืคืงื•ื“ื” ืœื”ืชืงืฉืจ

ยท ืื‘ื–ืจื™ื -- ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžื™ืœืช ืžืคืชื— ืœื”ื•ืกืคื” ืœืฉื™ื—ื”

ืžื—ื–ื™ืจื” ืืช ืžื™ืคื•ื™ ื”-JSON ืฉื ืฉืœื— ื‘ื—ื–ืจื” ืขืœ ื™ื“ื™ ืงืจืงืก

cast(ืคืงื•ื“ื”, **ืื‘ื™ื–ืจื™ื)
ืืฉ ื•ืฉื›ื— ืคืงื•ื“ื” ืœ ืงืจืงืก

ืืคืฉืจื•ื™ื•ืช:

ยท ื”ืคืงื•ื“ื” -- ื”ืคืงื•ื“ื” ืœื”ืชืงืฉืจ

ยท ืื‘ื–ืจื™ื -- ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžื™ืœืช ืžืคืชื— ืœื”ื•ืกืคื” ืœืฉื™ื—ื”

handle_init()
ื ืงืจื ืžืžืฉ ืœืคื ื™ ื”ืคืขืœืช ืชื•ืกืฃ - ื‘ื”ืงืฉืจ ื”ืฉืจืฉื•ืจ.

handle_recv(data)
ืžืงื‘ืœ ื›ืœ ืื™ืจื•ืข ืฉืคื•ืจืกื ืขืœ ื™ื“ื™ ืงืจืงืก

ืืคืฉืจื•ื™ื•ืช:

ยท ื ืชื•ื ื™ื -- ื˜ืคื•ืœ ื”ืžื›ื™ืœ ืืช ื”ื ื•ืฉื ื•ื”ืžืกืจ.

handle_stop()
ื”ืชืงืฉืจ ืžืžืฉ ืœืคื ื™ ืฉื”ืคืœืื’ื™ืŸ ื ืขืฆืจ ืขืœ ื™ื“ื™ Circus.

ื›ืืฉืจ ืžืืชื—ืœ ืขืœ ื™ื“ื™ Circus, ืžื—ืœืงื” ื–ื• ื™ื•ืฆืจืช ืœื•ืœืืช ืื™ืจื•ืขื™ื ืžืฉืœื” ืฉืžืงื‘ืœืช ื”ื›ืœ
ืงืจืงืก ืื™ืจื•ืขื™ื ื•ืœื”ืขื‘ื™ืจ ืื•ืชื ืืœื™ื”ื handle_recv(). ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ื”ื ื˜ื•ืคืœ ื”ืžื›ื™ืœ ืืช
ื”ื ื•ืฉื ื•ื”ื ืชื•ื ื™ื ืขืฆืžื.

handle_recv() ืฆืจื™ืš ืœื”ื™ื•ืช ืžื™ื•ืฉื ืขืœ ื™ื“ื™ ื”ืคืœืื’ื™ืŸ.

ื”ืฉืžื™ื™ื ืฉื‚ึดื™ื—ึธื”() ื• ืœืœื”ืง() ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ืœื™ืฆื™ืจืช ืื™ื ื˜ืจืืงืฆื™ื” ืงืจืงืก ืื ืืชื” ื‘ื•ื ื” ื
ืชื•ืกืฃ ืฉืžืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืคืขื™ืœื” ืขื ื”ื“ืžื•ืŸ.

handle_init() ื• handle_stop() ื”ืŸ ืจืง ืฉื™ื˜ื•ืช ื ื•ื—ื•ืช ืฉื‘ื”ืŸ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœืืชื—ืœ ื•
ืœื ืงื•ืช ืืช ื”ืงื•ื“ ืฉืœืš. handle_init() ื ืงืจื ื‘ืชื•ืš ื”ืฉืจืฉื•ืจ ืฉื–ื” ืขืชื” ื”ืชื—ื™ืœ.
handle_stop() ื ืงืจื ื‘ืฉืจืฉื•ืจ ื”ืจืืฉื™ ืžืžืฉ ืœืคื ื™ ื”ืคืกืงืช ื”ื—ื•ื˜ ื•ื—ื™ื‘ื•ืจื•.

ื›ืชื™ื‘ื” a ื—ื™ื‘ื•ืจ
ื‘ื•ืื• ื ื›ืชื•ื‘ ืชื•ืกืฃ ืฉืžืชื—ื‘ืจ ืœืงื•ื‘ืฅ ื›ืœ ืื™ืจื•ืข ืฉืงื•ืจื” ื‘ื• ืงืจืงืก. ื–ื” ืœื•ืงื— ืื—ื“
ืืจื’ื•ืžื ื˜ ืฉื”ื•ื ืฉื ื”ืงื•ื‘ืฅ.

ื”ืชื•ืกืฃ ืขืฉื•ื™ ืœื”ื™ืจืื•ืช ื›ืš:

ืž-circus.plugins ื™ื™ื‘ื•ื โ€‹โ€‹CircusPlugin

class Logger(CircusPlugin):

ืฉื = 'ืœื•ื’ืจ'

def __init__(self, *args, **config):
super(Logger, self).__init__(*args, **config)
self.filename = config.get('filename')
self.file = ืื™ืŸ

def handle_init(self):
self.file = open(self.filename, 'a+', buffering=1)

def handle_stop(self):
self.file.close()

def handle_recv(self, data):
watcher_name, action, msg = self.split_data(data)
msg_dict = self.load_message(ืžืกื’)
self.file.write('%s %s::%r\n' % (action, watcher_name, msg_dict))

ื–ื”ื• ื–ื” ! ื ื™ืชืŸ ืœืฉืžื•ืจ ืืช ื”ืžื—ืœืงื” ื”ื–ื• ื‘ื›ืœ ื—ื‘ื™ืœื”/ืžื•ื“ื•ืœ, ื›ืœ ืขื•ื“ ื ื™ืชืŸ ืœืจืื•ืช ืื•ืชื” ืขืœ ื™ื“ื™
ืคื™ื™ืชื•ืŸ

ืœื“ื•ื’ืžื”, ืœื•ื’ืจ ื ื™ืชืŸ ืœืžืฆื•ื ื‘ ื ืชื•ืกืคื™ื ืžื•ื“ื•ืœ ื‘ืชื•ืš a ื”ืคืจื•ื™ืงื˜ ืฉืœื™ ื—ึฒื‘ึดื™ืœึธื”.

ืืกื™ื ืง ื‘ืงืฉื•ืช
ืœืžืงืจื” ืฉืชืจืฆื” ืœื‘ืฆืข ืคืขื•ืœื•ืช ืืกื™ื ื›ืจื•ื ื™ื•ืช ื›ืœืฉื”ืŸ (ื›ืžื• ืฉื™ื—ืช ื˜ื•ืจื ื“ื• ืื• ืฉื™ืžื•ืฉ
periodicCall) ื•ื“ื ืฉืืชื” ืžืฉืชืžืฉ ื‘ืœื•ืœืื” ื”ื ื›ื•ื ื”. ื”ืœื•ืœืื” ืฉื‘ื” ืืชื” ืชืžื™ื“ ืจื•ืฆื” ืœื”ืฉืชืžืฉ
ื”ื•ื self.loop ื›ืคื™ ืฉื”ื•ื ืžื•ื’ื“ืจ ืขืœ ื™ื“ื™ ืžื—ืœืงืช ื”ื‘ืกื™ืก. ืœืจื•ื‘ ืœื•ืœืืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืื™ื ื” ื–ื”ื”
ื•ืœื›ืŸ ื™ื™ืชื›ืŸ ืฉื”ืงื•ื“ ืœื ื™ื‘ื•ืฆืข ื›ืฆืคื•ื™.

ืžื ืกื” a ื—ื™ื‘ื•ืจ
ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืชื•ืกืฃ ื“ืจืš ืฉื•ืจืช ื”ืคืงื•ื“ื” ืขื ื” ืงืจืงืก-ืคืœืื’ื™ืŸ ืคืงื•ื“ื”, ืขืœ ื™ื“ื™
ืฆื™ื•ืŸ ืฉื ื”ืชื•ืกืฃ ื”ืžืœื:

$ circus-plugin --endpoint tcp://127.0.0.1:5555 --pubsub tcp://127.0.0.1:5556 --config filename:circus-events.log myproject.plugins.Logger
[INFO] ื˜ื•ืขืŸ ืืช ื”ืคืœืื’ื™ืŸ...
[INFO] ื ืงื•ื“ืช ืงืฆื”: 'tcp://127.0.0.1:5555'
[INFO] Pub/sub: 'tcp://127.0.0.1:5556'
[INFO] ืžืชื—ื™ืœ

ื“ืจืš ื ื•ืกืคืช ืœื”ืคืขื™ืœ ืชื•ืกืฃ ื”ื™ื ืœืชืช ืœืกื™ืจืงื•ืก ืœื˜ืคืœ ื‘ืืชื—ื•ืœ ืฉืœื•. ื–ื” ื ืขืฉื” ืขืœ ื™ื“ื™
ื”ื•ืกืคืช ื [ืคืœืื’ื™ืŸ:ืฉื] ืกืขื™ืฃ ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”, ืื™ืคื” ืฉืึตื ื”ื•ื ืฉื ื™ื™ื—ื•ื“ื™ ืขื‘ื•ืจ
ื”ืชื•ืกืฃ ืฉืœืš:

[plugin:logger]
use = myproject.plugins.Logger
ืฉื ื”ืงื•ื‘ืฅ = /var/myproject/circus.log

ืœื”ืฉืชืžืฉ ื”ื•ื ื—ื•ื‘ื” ื•ืžืฆื‘ื™ืข ืขืœ ื”ืฉื ื”ืžืœื ืฉืœ ื”ืชื•ืกืฃ.

ื›ืืฉืจ ืงืจืงืก ืžืชื—ื™ืœ, ื”ื•ื ื™ื•ืฆืจ ืฆื•ืคื” ืขื ืชื”ืœื™ืš ืื—ื“ ืฉืžืคืขื™ืœ ืืช ื”ืฉื™ืขื•ืจ ื”ืžื—ื•ื“ื“, ื•
ืœื”ืขื‘ื™ืจ ื›ืœ ืžืฉืชื ื” ืื—ืจ ื”ื›ืœื•ืœ ื‘ืงื˜ืข ืœื‘ื ืื™ ื”ืคืœืื’ื™ืŸ ื“ืจืš ื”- config
ืžื™ืคื•ื™.

ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ื•ืกื™ืฃ ืคืœืื’ื™ืŸ ื‘ืื•ืคืŸ ืชื›ื ื•ืชื™ ื‘ืขืช ื™ืฆื™ืจืช ื ืงืจืงืก.ื‘ื•ืจืจ.ื‘ื•ืจืจ ื‘ื›ื™ืชื”
ืื• ืฉื™ืžื•ืฉ circus.get_arbiter(), ืจืื” ืกืคืจื™ื”.

ื”ื•ืคืขื•ืช
ืžื›ื™ื•ื•ืŸ ืฉื›ืœ ืชื•ืกืฃ ื ื˜ืขืŸ ื‘ืชื”ืœื™ืš ืžืฉืœื•, ื–ื” ืœื ืืžื•ืจ ืœื”ืฉืคื™ืข ืขืœ ื”ื›ืœืœ
ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืžืขืจื›ืช ื›ืœ ืขื•ื“ ื”ืขื‘ื•ื“ื” ืฉื ืขืฉืชื” ืขืœ ื™ื“ื™ ื”ืชื•ืกืฃ ืœื ืขื•ืฉื” ื™ื•ืชืจ ืžื“ื™
ืฉื™ื—ื•ืช ืœ ืงืจืงืก ื”ืชื”ืœื™ืš.

ื”ื•ืงืก
ืงืจืงืก ืžืกืคืง ื•ื•ื™ื ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื›ื“ื™ ืœื”ืคืขื™ืœ ืคืขื•ืœื•ืช ื‘ืื™ืจื•ืขื™ ืฆื•ืคื”. ื–ืžื™ืŸ
ื•ื•ื™ื ื”ื:

ยท ืœืคื ื™_ื”ืชื—ืœ: ื ืงืจื ืœืคื ื™ ื”ืคืขืœืช ื”ืฆื•ืคื”. ืื ื”ืงืจืก ื—ื•ื–ืจ ืœื ื ื›ื•ืŸ ืžื” ื”ื™ื
ื”ื”ืคืขืœื” ื”ื•ืคืกืงื”.

ยท after_start: ื ืงืจื ืœืื—ืจ ื”ืคืขืœืช ื”ืฆื•ืคื”. ืื ื”ืงืจืก ื—ื•ื–ืจ ืœื ื ื›ื•ืŸ ื”ืฆื•ืคื”
ืžื•ืคืกืง ืžื™ื“ ื•ื”ื”ืคืขืœื” ืžื‘ื•ื˜ืœืช.

ยท before_spawn: ื ืงืจื ืœืคื ื™ ืฉื”ืฆื•ืคื” ืžื•ื‘ื™ืœ ืชื”ืœื™ืš ื—ื“ืฉ. ืื ื”ืงืจืก ื—ื•ื–ืจ ืœื ื ื›ื•ืŸ
ื”ืฆื•ืคื” ืžื•ืคืกืง ืžื™ื“ ื•ื”ื”ืคืขืœื” ืžื•ืคืกืงืช.

ยท after_spawn: ื ืงืจื ืœืื—ืจ ืฉื”ืฆื•ืคื” ื”ื•ืœื™ื“ ืชื”ืœื™ืš ื—ื“ืฉ. ืื ื”ืงืจืก ื—ื•ื–ืจ ืœื ื ื›ื•ืŸ
ื”ืฆื•ืคื” ืžื•ืคืกืง ืžื™ื“ ื•ื”ื”ืคืขืœื” ืžื•ืคืกืงืช.

ยท ืœืคื ื™_ืขืฆื•ืจ: ื ืงืจื ืœืคื ื™ ืฉื”ืฆื•ืคื” ื ืขืฆืจ. ืžืชืขืœืžื™ื ืžืชื•ืฆืืช ื”-hook.

ยท after_stop: ื ืงืจื ืœืื—ืจ ื”ืคืกืงืช ื”ืฆื•ืคื”. ืžืชืขืœืžื™ื ืžืชื•ืฆืืช ื”-hook.

ยท ืœืคื ื™_ืื•ืช: ื ืงืจื ืœืคื ื™ ืฉืœื™ื—ืช ืื•ืช ืœืชื”ืœื™ืš ืฉืœ ืฆื•ืคื”. ืื ื”ืงืจืก
ื”ื—ื–ืจื•ืช ืœื ื ื›ื•ืŸ ื”ืื•ืช ืœื ื ืฉืœื— (ืœืžืขื˜ SIGKILL ืฉื ืฉืœื— ืชืžื™ื“)

ยท ืื—ืจื™_ืื•ืช: ื ืงืจื ืœืื—ืจ ืฉืœื™ื—ืช ืื•ืช ืœืชื”ืœื™ืš ืฉืœ ืฆื•ืคื”.

ยท ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช_ืžื•ืจื—ื‘ื•ืช: ื ืงืจื ื›ืืฉืจ ืžืชื‘ืงืฉื™ื ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขื extended=True. ืžืฉืžืฉ ืœื”ื•ืกืคื”
ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืกืคืฆื™ืคื™ื™ื ืœืชื”ืœื™ืš ืœืคืœื˜ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืจื’ื™ืœื”.

ื“ื•ื’ืžื”
ืžืงืจื” ืฉื™ืžื•ืฉ ื˜ื™ืคื•ืกื™ ื”ื•ื ืœื‘ืงืจ ืฉื›ืœ ื”ืชื ืื™ื ืžืชืงื™ื™ืžื™ื ืœืชื—ื™ืœืช ืชื”ืœื™ืš.
ื ื ื™ื— ืฉื™ืฉ ืœืš ืฆื•ืคื” ืฉืคื•ืขืœ Redis ื•ืฆื•ืคื” ืฉืžืจื™ืฅ ืกืงืจื™ืคื˜ ืฉืœ Python ืฉ
ืขื•ื‘ื“ ืขื Redis. ืขื Circus ืืชื” ื™ื›ื•ืœ ืœื”ื–ืžื™ืŸ ืืช ื”ืกื˜ืืจื˜-ืืค ื‘ืืžืฆืขื•ืช ืขื“ื™ืคื•ืช ืืคืฉืจื•ืช:

[ืฆื•ืคื”:ืขื•ื‘ื“ ื‘ืชื•ืจ]
cmd = python -u worker.py
ืขื“ื™ืคื•ืช = 1

[watcher:redis]
cmd = redis-server
ืขื“ื™ืคื•ืช = 2

ืขื ื”ื”ื’ื“ืจื” ื”ื–ื•, Circus ื™ืชื—ื™ืœ Redis ืชื—ื™ืœื” ื•ืœืื—ืจ ืžื›ืŸ ื”ื•ื ื™ืชื—ื™ืœ ืืช ืขื•ื‘ื“ ื”ืชื•ืจ.
ืื‘ืœ ืงืจืงืก ืœื ื‘ืืžืช ืฉื•ืœื˜ ื‘ื–ื” Redis ืคื•ืขืœ. ื–ื” ืจืง ืžืชื—ื™ืœ ืืช
ืชื”ืœื™ืš ืฉื”ืชื‘ืงืฉ ืœื”ืชื—ื™ืœ. ืžื” ืฉืื ื—ื ื• ืžืชื’ืขื’ืขื™ื ื›ืืŸ ื”ื•ื ื“ืจืš ืœืฉืœื•ื˜ ื‘ื–ื” Redis is
ื”ืชื—ื™ืœ ื•ืžืชืคืงื“ ื‘ืžืœื•ืื•. ืคื•ื ืงืฆื™ื” ืฉืฉื•ืœื˜ืช ื‘ื–ื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช:

ื™ื™ื‘ื•ื โ€‹โ€‹redis
ื–ืžืŸ ื™ื‘ื•ื

def check_redis(*args, **kw):
time.sleep(.5) # ืชืŸ ืœื–ื” ื”ื–ื“ืžื ื•ืช ืœื”ืชื—ื™ืœ
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')โ€Ž
return r.get('foo') == 'bar'

ืคื•ื ืงืฆื™ื” ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžื—ื•ื‘ืจืช ืœืกื™ืจืงื•ืก ื‘ืชื•ืจ ืœืคื ื™_ื”ืชื—ืœ ื•ื•:

[ืฆื•ืคื”:ืขื•ื‘ื“ ื‘ืชื•ืจ]
cmd = python -u worker.py
hooks.before_start = mycoolapp.myplugins.check_redis
ืขื“ื™ืคื•ืช = 1

[watcher:redis]
cmd = redis-server
ืขื“ื™ืคื•ืช = 2

ื‘ืจื’ืข ืฉืงืจืงืก ื”ืชื—ื™ืœ ืืช ื—ื•ื–ืจ ืฆื•ืคื”, ื–ื” ื™ืชื—ื™ืœ ืืช ืขื•ื‘ื“ ืชื•ืจ ืฆื•ืคื”, ืžืื–
ื–ื” ืขื•ืงื‘ ืื—ืจ ื” ืขื“ื™ืคื•ืช ื”ื–ืžื ื”. ืจื’ืข ืœืคื ื™ ื”ืคืขืœืช ื”ืฆื•ืคื” ื”ืฉื ื™, ื”ื•ื ื™ืคืขืœ
ืžื” ื”ื™ื check_redis ืคื•ื ืงืฆื™ื”, ื•ื‘ืžืงืจื” ืฉื”ื™ื ื—ื•ื–ืจืช ืœื ื ื›ื•ืŸ ื™ื‘ื˜ืœ ืืช ื”ืคืขืœืช ื”ืฆื•ืคื”
ื”ืชื”ืœื™ืš.

ื•ื• ื—ึฒืชึดื™ืžึธื”
ื•ื• ื—ื™ื™ื‘ ืœืขืงื•ื‘ ืื—ืจ ื”ื—ืชื™ืžื” ื”ื–ื•:

def hook(watcher, arbiter, hook_name, **kwargs):
...
# ืื ืœื ืชื—ื–ื™ืจ True, ื”ืงืจืก ื™ื›ื•ืœ ืœื”ืฉืชื ื•ืช
# ื”ื”ืชื ื”ื’ื•ืช ืฉืœ ืงืจืงืก (ืชืœื•ื™ ื‘ื”ื•ืง)
ืœื”ื—ื–ื™ืจ ื ื›ื•ืŸ

ืื™ืคื” ืฆื•ึนืคึถื” ื”ืื ื” ืฆื•ืคื” ื“ื•ื’ืžื” ื‘ื›ื™ืชื”, ืคื•ืกืง ืžื” ื”ื™ื ืฉื•ื˜ืจ ืื—ื“, Hook_name ื”ื•ื•
ืฉื ื• ืงื•ื•ืืจื’ืก ื›ืžื” ืคืจืžื˜ืจื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื ื ื•ืกืคื™ื (ื‘ื”ืชืื ืœืกื•ื’ ื”ืงืจืก).

ื”ืฉืžื™ื™ื after_spawn hook ืžื•ืกื™ืฃ ืืช ืคืจืžื˜ืจื™ pid:

def after_spawn(watcher, arbiter, hook_name, pid, **kwargs):
...
# ืื ืœื ืชื—ื–ื™ืจ ืืช True, ื”ืงืจืงืก ื™ื”ืจื•ื’ ืืช ื”ืชื”ืœื™ืš
ืœื”ื—ื–ื™ืจ ื ื›ื•ืŸ

ืื™ืคื” PID ื”ื•ื ื”-PID ืฉืœ ื”ืชื”ืœื™ืš ื”ืžืชืื™ื.

ื›ืžื• ื›ืŸ, ืœืคื ื™_ืื•ืช ื• ืื—ืจื™_ืื•ืช ื•ื•ื™ื ืžื•ืกื™ืคื™ื pid ื•-signum:

def before_signal_hook(watcher, arbiter, hook_name, pid, signnum, **kwargs):
...
# ืื ืœื ืชื—ื–ื™ืจ True, ืงืจืงืก ืœื ื™ืฉืœื— ืืช ืื•ืช ื”ืกื™ืžืŸ
# (SIGKILL ื ืฉืœื— ืชืžื™ื“)
ืœื”ื—ื–ื™ืจ ื ื›ื•ืŸ

ืื™ืคื” PID ื”ื•ื ื”-PID ืฉืœ ื”ืชื”ืœื™ืš ื”ืžืชืื™ื ื• ื—ืชื™ืžื” ื”ื•ื ื”ืื•ืช ื”ืžืชืื™ื.

ืืชื” ื™ื›ื•ืœ ืœื”ืชืขืœื ืžืืœื” ืื‘ืœ ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘ื ืชื•ื ื™ื ื•ื‘ืฉื™ื˜ื•ืช ืฉืœ ื”ืฆื•ืคื” ื•/ืื• ื”ื‘ื•ืจืจ
ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ื‘ื›ืžื” ื•ื•ื™ื.

ืฉื™ืžื• ืœื‘ ืฉ-hooks ื ืงืจืื™ื ืขื ืืจื’ื•ืžื ื˜ื™ื ื‘ืขืœื™ ืฉื. ืื– ื”ืฉืชืžืฉ ื‘ื—ืชื™ืžืช ื”ื•ื• ื‘ืœื™
ืฉื™ื ื•ื™ ืฉืžื•ืช ืืจื’ื•ืžื ื˜ื™ื.

ื”ืฉืžื™ื™ื ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช_ืžื•ืจื—ื‘ื•ืช ืœื”ื•ืง ื™ืฉ ืคืจืžื˜ืจื™ื ื ื•ืกืคื™ื ืžืฉืœื• ื‘ ืงื•ื•ืืจื’ืก:

def extended_stats_hook(watcher, arbiter, hook_name, pid, stats, **kwargs):
...

ืื™ืคื” PID ื”ื•ื ื”-PID ืฉืœ ื”ืชื”ืœื™ืš ื”ืžืชืื™ื ื• ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืจื’ื™ืœื” ืœื”ื™ื•ืช
ื—ื–ืจ. ื”ื•ืกืฃ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืžืฉืœืš ืœืชื•ืš ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช. ื“ื•ื’ืžื” ื ืžืฆืืช ื‘
examples/uwsgi_lossless_reload.py.

ื›ื“ื•ื’ืžื” ืื—ืจื•ื ื”, ื”ื ื” ืกื•ืคืจ ื•ื• ืฉื™ื›ื•ืœ ืœื”ืชืžื•ื“ื“ ืขื ื›ืœ ืžื™ื ื™ ืื•ืชื•ืช:

def super_hook(watcher, arbiter, hook_name, **kwargs):
pid = ืื™ืŸ
ืกื™ืžืŸ = ืื™ืŸ
if hook_name in ('before_signal', 'after_signal'):
pid = kwargs['pid']
signum = kwargs['signum']
...
ืœื”ื—ื–ื™ืจ ื ื›ื•ืŸ

ื•ื• ืื™ืจื•ืขื™ื
ื‘ื›ืœ ืคืขื ืฉื”ื•ืง ืžื•ืคืขืœ, ื”ืชื•ืฆืื” ืฉืœื• ืžืงื‘ืœืช ื”ื•ื“ืขื” ื›ืื™ืจื•ืข ื‘ืงืจืงืก.

ื™ืฉื ื ืฉื ื™ ืื™ืจื•ืขื™ื ื”ืงืฉื•ืจื™ื ืœ-hooks:

ยท ื”ื•ืง_ื”ืฆืœื—ื”: ื”ื•ืง ื ืงืจื ื‘ื”ืฆืœื—ื”. ืžืคืชื—ื•ืช ื”ืื™ืจื•ืข ื”ื ืฉื ื”ืฉื ืื ื”
ืื™ืจื•ืข, ื•ื›ืŸ ื–ืžืŸ: ืชืืจื™ืš ื”ืื™ืจื•ืขื™ื.

ยท hook_failure: ื”ื•ืง ื ื›ืฉืœ. ืžืคืชื—ื•ืช ื”ืื™ืจื•ืข ื”ื ืฉื ื”ืฉื ืื ื”ืื™ืจื•ืข, ื–ืžืŸ:
ืชืืจื™ืš ื”ืื™ืจื•ืขื™ื ื• ืฉื’ื™ืื”: ื”ื—ืจื™ื’ ืฉื”ืชืจื—ืฉ ื‘ืื™ืจื•ืข, ืื ื‘ื›ืœืœ.

ืžื•ืกื™ืฃ ื—ื“ืฉ ืคืงื•ื“ื•ืช
ื ื™ืกื™ื ื• ืœื”ืคื•ืš ืืช ื”ื•ืกืคืช ืคืงื•ื“ื•ืช ื—ื“ืฉื•ืช ืœืคืฉื•ื˜ื” ื›ื›ืœ ื”ืืคืฉืจ.

ืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ืฉืœื•ืฉื” ื“ื‘ืจื™ื:

1. ืœื™ืฆื•ืจ ื your_command.py ืงื•ื‘ืฅ ืชื—ืช ืงืจืงืก/ืคืงื•ื“ื•ืช/.

2. ื”ื˜ืžื™ืข ืฉื ืžื—ืœืงื” ืื—ืช, ืขื ืฉื™ื˜ื•ืช ืžื•ื’ื“ืจื•ืช ืžืจืืฉ

3. ื”ื•ืกืฃ ืืช ื”ืคืงื•ื“ื” ื”ื—ื“ืฉื” circus/commands/__init__.py.

ื ื ื™ื— ืฉืื ื• ืจื•ืฆื™ื ืœื”ื•ืกื™ืฃ ืคืงื•ื“ื” ืฉืžื—ื–ื™ืจื” ืืช ืžืกืคืจ ื”ืฆื•ืคื™ื ืฉื ืžืฆืื™ื ื›ืขืช ื‘ืฉื™ืžื•ืฉ,
ื”ื™ื™ื ื• ืขื•ืฉื™ื ืžืฉื”ื• ื›ื–ื” (ื”ื’ื™ื‘ื• ื‘ื”ืจื—ื‘ื” ื›ื“ื™ ืœืืคืฉืจ ืœืš ืœืขืงื•ื‘ ืื—ืจ
ื‘ึผึฐืงึทืœื•ึผืช):

ืž-circus.commands.base ื™ื™ื‘ื•ื โ€‹โ€‹Command
ืž-circus.exc ื™ื™ื‘ื•ื โ€‹โ€‹ArgumentError, MessageError
class NumWatchers (ืคืงื•ื“ื”):
"""ื–ื” ืชืจื’ื•ืœ ื˜ื•ื‘ ืœืชืืจ ืžื” ื”ื›ื™ืชื” ืขื•ืฉื” ื›ืืŸ.

ืขื™ื™ืŸ ื‘ืคืงื•ื“ื•ืช ืื—ืจื•ืช ื›ื“ื™ ืœืจืื•ืช ื›ื™ืฆื“ ืื ื• ืจื’ื™ืœื™ื ืœืขืฆื‘
ื”ื˜ืงืกื˜ ื”ื–ื”. ื–ื” ื™ื™ื›ืœืœ ืื•ื˜ื•ืžื˜ื™ืช ื‘ืชื™ืขื•ื“,
ืื– ืืœ ืชืคื—ื“ ืœื”ื™ื•ืช ืžืžืฆื”, ื–ื” ืžื” ืฉื–ื” ื ืขืฉื”
ืœ.
"" "
# ื›ืœ ื”ืคืงื•ื“ื•ืช ื™ื•ืจืฉื•ืช ืž`circus.commands.base.Command`

# ืืชื” ืฆืจื™ืš ืœืฆื™ื™ืŸ ืฉื ื›ื“ื™ ืœืžืฆื•ื ืืช ื”ืคืงื•ื“ื” ืื™ื›ืฉื”ื•
ืฉื = "numwatchers"

# ื”ื’ื“ืจ ืืช ื”ื”ืžืชื ื” ืœ-True ืื• False ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœืš
# - ืื ื”ื”ืžืชื ื” ื”ื™ื True, ื”ืคืงื•ื“ื” ืžื•ืคืขืœืช ื‘ืื•ืคืŸ ืกื™ื ื›ืจื•ื ื™, ื•ื”ืœืงื•ื— ืขืฉื•ื™ ืœืงื‘ืœ
# ืชื•ืฆืื•ืช ื—ื–ืจื”.
# - ืื ื”ืžืชื ื” ื”ื™ื False, ื”ืคืงื•ื“ื” ืžื•ืคืขืœืช ื‘ืื•ืคืŸ ืืกื™ื ื›ืจื•ื ื™ ื‘ืฉืจืช ื•ื‘ืœืงื•ื— ื‘ืื•ืคืŸ ืžื™ื™ื“ื™
# ืžืงื‘ืœ ื‘ื—ื–ืจื” ืชื’ื•ื‘ื” 'ื‘ืกื“ืจ'
#
# ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื”ืคืงื•ื“ื•ืช ืžื•ื’ื“ืจื•ืช ืœ- waiting = False
ืžื—ื›ื” = ื ื›ื•ืŸ

# ืืคืฉืจื•ื™ื•ืช
options = [('', 'optname', default_value, 'description')]

ืžืืคื™ื™ื ื™ื = ['foo', 'ื‘ืจ']
# ืžืืคื™ื™ื ื™ื ืžืฆื™ื’ื™ื ืืช ืืจื’ื•ืžื ื˜ื™ ื”ืคืงื•ื“ื” ืฉื”ื ื—ื•ื‘ื”. ืื ื”ื
# ืœื ืžืกื•ืคืง, ืื– ืชื™ื’ืจื ืฉื’ื™ืื”

def execute (ืขืฆืžื™, ื‘ื•ืจืจ, ืื‘ื™ื–ืจื™ื):
# ืฉื™ื˜ืช ื”ื‘ื™ืฆื•ืข ื”ื™ื ื”ืœื™ื‘ื” ืฉืœ ื”ืคืงื•ื“ื”: ืฉื™ื ื›ืืŸ ืืช ื›ืœ
# ืœื•ื’ื™ืงื” ืฉืœ ื”ืคืงื•ื“ื” ื•ื”ื—ื–ืจืช dict ื”ืžื›ื™ืœ ืืช ื”ืขืจื›ื™ื ืฉืืชื”
# ืจื•ืฆื” ืœื—ื–ื•ืจ, ืื ื™ืฉ
ื”ื—ื–ืจ {"numwatchers": arbiter.numwatchers()}

def console_msg(self, msg):
# msg ื”ื•ื ืžื” ืฉืžื•ื—ื–ืจ ืขืœ ื™ื“ื™ ืฉื™ื˜ืช ื”ื‘ื™ืฆื•ืข.
# ืฉื™ื˜ื” ื–ื• ืžืฉืžืฉืช ืœืขื™ืฆื•ื‘ ื”ืชื’ื•ื‘ื” ืขื‘ื•ืจ ืงื•ื ืกื•ืœื” (ื–ื”
# ืžืฉืžืฉ ืœืžืฉืœ ืขืœ ื™ื“ื™ circusctl ื›ื“ื™ ืœื”ื“ืคื™ืก ืืช ื”ื”ื•ื“ืขื•ืช ืฉืœื•)
ื”ื—ื–ืจ "ืžื—ืจื•ื–ืช ืฉืชื•ืฆื’"

def message(self, *args, **opts):
# ื”ื•ื“ืขื” ืžื˜ืคืœืช ื‘ืงืœื˜ ื”ืžืกื•ืฃ.
# ืฉื™ื˜ื” ื–ื• ืžืฉืžืฉืช ืœืžื™ืคื•ื™ ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžืกื•ืฃ ืœืคืงื•ื“ื”
# ืืคืฉืจื•ื™ื•ืช. (ื”ื•ื ืžืฉืžืฉ ืœืžืฉืœ ื›ืืฉืจ ืงื•ืจืื™ื ืœืคืงื•ื“ื” via
# circusctl)
# NotImplementedError ืชื•ืฉืง ืื ื”ืคื•ื ืงืฆื™ื” ื—ืกืจื”
numArgs = 1
ืื ืœื len(args) == numArgs:
raise ArgumentError('ืžืกืคืจ ืœื ื—ื•ืงื™ ืฉืœ ืืจื’ื•ืžื ื˜ื™ื.')
else
opts['optname'] = args[0]
ื”ื—ื–ืจ self.make_message(**opts)

def validate (ืขืฆืžื™, ืื‘ื™ื–ืจื™ื):
# ืฉื™ื˜ื” ื–ื• ืžืฉืžืฉืช ื›ื“ื™ ืœืืžืช ืฉื”ืืจื’ื•ืžื ื˜ื™ื ื”ื•ืขื‘ืจื• ืœ-
ืคืงื•ื“ื” # ื ื›ื•ื ื”. ื™ืฉ ืœื–ืจื•ืง ArgumentError ืœืžืงืจื”
# ื™ืฉ ืฉื’ื™ืื” ื‘ืืจื’ื•ืžื ื˜ื™ื ืฉืขื‘ืจื• (ืœืžืฉืœ ืื ื”ื
# ืœื ืžืชืื™ืžื™ื ื–ื” ืœื–ื”.
# ื‘ืžืงืจื” ืฉื™ืฉ ื‘ืขื™ื” ื‘ืชื•ื›ืŸ ืฉืœื”ื, ื”ื•ื“ืขืช MessageError
ื™ืฉ ืœื–ืจื•ืง #. ืฉื™ื˜ื” ื–ื• ื™ื›ื•ืœื” ืœืฉื ื•ืช ืืช ื”ืชื•ื›ืŸ ืฉืœ ื”ืื‘ื™ื–ืจื™ื
# dict, ื”ื•ื ื™ื•ืขื‘ืจ ืœื‘ื™ืฆื•ืข ืœืื—ืจ ืžื›ืŸ.

ื”ืฉืชืžืฉ ืžืงืจื™ื ื“ื•ื’ืžืื•ืช
ืคืจืง ื–ื” ืžืฆื™ื’ ื›ืžื” ืžืงืจื™ ืฉื™ืžื•ืฉ, ื›ื“ื™ ืœืชืช ืœืš ืžื•ืฉื’ ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-Circus ื‘-Circus ืฉืœืš
ืกื‘ื™ื‘ื”.

ืจื™ืฆื” a WSGI ื™ื™ืฉื•ื
ื”ืคืขืœืช ืืคืœื™ืงืฆื™ื™ืช WSGI ืขื Circus ื”ื™ื ื“ื™ ืžืขื ื™ื™ื ืช ืžื›ื™ื•ื•ืŸ ืฉืืชื” ื™ื›ื•ืœ ืœืฆืคื•ืช ื•ืœื ื”ืœ
ืฉืึถืœึฐืšึธ ืื™ื ื˜ืจื ื˜ ืขื•ื‘ื“ื™ื ื‘ืืžืฆืขื•ืช ื˜ื•ืค ืงืจืงืก, circusctl ืื• ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜.

ื–ื” ืžืชืืคืฉืจ ื‘ืืžืฆืขื•ืช ืฉืงืขื™ ืงืจืงืก. ืจืื” ืœืžื” ืฉืงืขื™ื.

ื ื™ืงื— ื“ื•ื’ืžื” ืขื ืžื™ื ื™ืžื•ื ืคื™ืจืžื™ื“ื” ื™ื™ืฉื•ื:

ืž-pyramid.config ื™ื™ื‘ื•ื โ€‹โ€‹Configurator
ืž-pyramid.response import Response

def hello_world (ื‘ืงืฉื”):
return Response('ืฉืœื•ื %(name)s!' % request.matchdict)

config = Configurator()
config.add_route('hello', '/hello/{name}')
config.add_view(hello_world, route_name='hello')
application = config.make_wsgi_app()

ืฉืžื•ืจ ืืช ื”ืกืงืจื™ืคื˜ ื”ื–ื” ื‘-an app.py ืงื•ื‘ืฅ, ื•ืื– ื”ืชืงืŸ ืืช ื”ืคืจื•ื™ืงื˜ื™ื ื”ืืœื”:

$ pip ืœื”ืชืงื™ืŸ ืคื™ืจืžื™ื“ื”
$ pip ืœื”ืชืงื™ืŸ chausset

ืœืื—ืจ ืžื›ืŸ, ื•ื“ื ืฉืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืืช ื™ื™ืฉื•ื ื”ืคื™ืจืžื™ื“ื” ืฉืœืš ื‘ืืžืฆืขื•ืช ื” ื’ึถืจึถื‘ ืกืงืจื™ืคื˜ ืžืกื•ืฃ:

$ chausset app.application
ื™ื™ืฉื•ื ื”ื•ื
ื”ื’ืฉื” ื‘-localhost:8080
ื‘ืืžืฆืขื•ืช ื‘ืชื•ืจ ืงืฆื” ืื—ื•ืจื™

ื•ื‘ื“ืงื• ืฉืืชื ื™ื›ื•ืœื™ื ืœื”ื’ื™ืข ืืœื™ื• ื‘ื‘ื™ืงื•ืจ http://localhost:8080/hello/tarek

ื›ืขืช ื›ืฉื”ืืคืœื™ืงืฆื™ื” ืฉืœืš ืคื•ืขืœืช, ื‘ื•ืื• ื ื™ืฆื•ืจ ืงื•ื‘ืฅ ืชืฆื•ืจื” ืฉืœ Circus:

[ืงืจืงืก]
check_delay = 5
ื ืงื•ื“ืช ืงืฆื” = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[watcher:webworker]
cmd = chaussette --fd $(circus.sockets.webapp) app.application
use_sockets = ื ื›ื•ืŸ
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 3

[socket:webapp]
ืžืืจื— = 127.0.0.1
ื™ืฆื™ืื” = 8080

ื”ืงื•ื‘ืฅ ื”ื–ื” ืื•ืžืจ ืœืกื™ืจืงื•ืก ืœืื’ื“ ืฉืงืข ื‘ื™ืฆื™ืื” 8080 ื•ืจื•ืฅ ื’ึถืจึถื‘ ืขื•ื‘ื“ื™ื ืขืœ ื–ื”
ืฉืงืข - ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช ื”-fd ืฉืœื•.

ืฉืžื•ืจ ืื•ืชื• ืœ server.ini ื•ื ืกื” ืœื”ืจื™ืฅ ืื•ืชื• ื‘ืืžืฆืขื•ืช ืงืจืงืก

$ circusd server.ini
[INFO] ื”ืชื—ืœืช ืžืืกื˜ืจ ื‘-pid 8971
ื”ื•ืคืขืœื• ืฉืงืขื™ [INFO]
[INFO] circusd-stats ื”ืชื—ื™ืœื•
[INFO] ื”ืืคืœื™ืงืฆื™ื” ื”ื•ืคืขืœื”
[INFO] ืคื•ืกืง ืžื—ื›ื” ื›ืขืช ืœืคืงื•ื“ื•ืช

ื•ื“ื ืฉืืชื” ืขื“ื™ื™ืŸ ืžืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื” http://localhost:8080/hello/tarek.

ืžื–ืœ ื˜ื•ื‘ ! ื™ืฉ ืœืš ื™ื™ืฉื•ื WSGI ืฉืžืจื™ืฅ 3 ืขื•ื‘ื“ื™ื.

ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืืช circushttpd ืื• ืืช ื”-cli, ื•ืœื™ื”ื ื•ืช ืžื ื™ื”ื•ืœ ืงืจืงืก.

ืจื™ืฆื” a ื’'ื ื’ื• ื™ื™ืฉื•ื
ื”ืคืขืœืช ืืคืœื™ืงืฆื™ื™ืช Django ื ืขืฉื™ืช ื‘ื“ื™ื•ืง ื›ืžื• ื”ืคืขืœืช ืืคืœื™ืงืฆื™ื™ืช WSGI. ืœื”ืฉืชืžืฉ ื‘
PYTHONPATH ื›ื“ื™ ืœื™ื™ื‘ื ืืช ื”ืกืคืจื™ื™ื” ื‘ื” ื ืžืฆื ื”ืคืจื•ื™ื™ืงื˜, ื”ืกืคืจื™ื™ื” ื”ืžื›ื™ืœื” ืืช
ืกืคืจื™ื™ื” ืฉื™ืฉ ื‘ื” settings.py (ืขื Django 1.4+ ื™ืฉ ื‘ืกืคืจื™ื™ื” ื”ื–ื• manage.py)
:

[socket:dwebapp]
ืžืืจื— = 127.0.0.1
ื™ืฆื™ืื” = 8080

[watcher:dwebworker]
cmd = chaussette --fd $(circus.sockets.dwebapp) dproject.wsgi.application
use_sockets = ื ื›ื•ืŸ
ืžืกืคืจ ืชื”ืœื™ื›ื™ื = 2

[env:dwebworker]
PYTHONPATH = /path/to/parent-of-dproject

ืื ืืชื” ืฆืจื™ืš ืœืขื‘ื•ืจ ืืช DJANGO_SETTINGS_MODULE ืขื‘ื•ืจ ืขื•ื‘ื“ backend ืœืžืฉืœ, ืืชื” ื™ื›ื•ืœ
ืœื”ืขื‘ื™ืจ ืืช ื–ื” ื’ื ืœืžืจื•ืช ื” env ืืคืฉืจื•ืช ืชืฆื•ืจื”:

[watcher:dbackend]
cmd = /path/to/script.py
ืžืกืคืจ ืชื”ืœื™ื›ื™ื=3

[env:dbackend]
PYTHONPATH = /path/to/parent-of-dproject
DJANGO_SETTINGS_MODULE=dproject.settings

ืœึดืจึฐืื•ึนืช http://chaussette.readthedocs.org ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ chausset.

ืขื™ืฆื•ื‘ ื”ื—ืœื˜ื•ืช
ื‘ืื•ืคืŸ ื›ืœืœื™ ืืจื›ื™ื˜ืงื˜ื•ืจื”
[ืชืžื•ื ื”]

ืงืจืงืก ืžื•ืจื›ื‘ ืžืชื”ืœื™ืš ืขื™ืงืจื™ ื”ื ืงืจื ืงืจืงืก ืฉื“ื•ืื’ืช ืœื”ืคืขื™ืœ ืืช ื›ืœ
ืชื”ืœื™ื›ื™ื. ื›ืœ ืชื”ืœื™ืš ื”ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ ืงืจืงืก ื”ื•ื ืชื”ืœื™ืš ื™ืœื“ ืฉืœ ืงืจืงืก.

ืชื”ืœื™ื›ื™ื ืžืื•ืจื’ื ื™ื ื‘ืงื‘ื•ืฆื•ืช ื”ื ืงืจืื•ืช ืฆื•ืคื™ื. ืฆื•ึนืคึถื” ื–ื” ื‘ืขืฆื ืคืงื•ื“ื”
ืงืจืงืก ืคื•ืขืœ ืขืœ ื”ืžืขืจื›ืช ืฉืœืš, ื•ืœื›ืœ ืคืงื•ื“ื” ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ื›ืžื” ืชื”ืœื™ื›ื™ื ืืชื”
ืจื•ืฆื” ืœืจื•ืฅ.

ื”ืจืขื™ื•ืŸ ืฉืœ ืฆื•ึนืคึถื” ืฉื™ืžื•ืฉื™ ื›ืืฉืจ ืืชื” ืจื•ืฆื” ืœื ื”ืœ ืืช ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื”ืžืจื™ืฆื™ื ืืช
ืื•ืชื” ืคืงื•ื“ื” -- ื›ืžื• ื”ืคืขืœ ืื•ืชื ืžื—ื“ืฉ ื•ื›ื•'.

ืงืจืงืก ืžื—ื‘ืจ ืฉื ื™ ืฉืงืขื™ ZeroMQ:

ยท REQ/REP -- ืฉืงืข ื”ืžืฉืžืฉ ืœืฉืœื™ื˜ื” ืงืจืงืก ื‘ืืžืฆืขื•ืช ืžื‘ื•ืกืก json ืคืงื•ื“ื•ืช.

ยท PUB/SUB -- ืฉืงืข ืฉื‘ื• ืงืจืงืก ืžืคืจืกื ืื™ืจื•ืขื™ื, ื›ืžื• ืžืชื™ ืžืชื—ื™ืœ ืชื”ืœื™ืš ืื•
ืขืฆืจ.

ื”ืขืจื”:
ืœืžืจื•ืช ืฉืžื”, ZeroMQ ืื™ื ื” ืžืขืจื›ืช ืœื ื™ื”ื•ืœ ืชื•ืจื™ื. ืชื—ืฉื•ื‘ ืขืœ ื–ื” ื›ืขืœ
ืกืคืจื™ื™ืช ืชืงืฉื•ืจืช ื‘ื™ืŸ ืชื”ืœื™ื›ื™ื (IPC).

ืชื”ืœื™ืš ืื—ืจ ื ืงืจื ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ ืงืจืงืก ื›ืืฉืจ ื”ืืคืฉืจื•ืช ืžื•ืคืขืœืช.
ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืกืชืคืงื™ื“ื• ื”ื•ื ืœืคืจืกื ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืฉืœ ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“/ื–ื™ื›ืจื•ืŸ ื‘ืงื•ื‘ืฅ ื™ื™ืขื•ื“ื™ PUB/SUB
ืขืจื•ืฅ.

ืขืจื•ืฅ ืžื™ื•ื—ื“ ื–ื” ืžืฉืžืฉ ืืช ื˜ื•ืค ืงืจืงืก ื• ืงืจืงืก-httpd ื›ื“ื™ ืœื”ืฆื™ื’ ื–ืจื ื—ื™
ืฉืœ ื”ืคืขื™ืœื•ืช.

ื˜ื•ืค ืงืจืงืก ื”ื•ื ืกืงืจื™ืคื˜ ืงื•ื ืกื•ืœื” ื”ืžื—ืงื” ื—ืœืง ืขืœื™ื•ืŸ ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื›ืœ ื”ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ ื•ื‘ื–ื™ื›ืจื•ืŸ ืฉืœ
ื”ืชื”ืœื™ื›ื™ื ื‘ื ื™ื”ื•ืœ ืงืจืงืก.

ืงืจืงืก-httpd ื”ื•ื ืžืžืฉืง ื ื™ื”ื•ืœ ื”ืื™ื ื˜ืจื ื˜ ืฉื™ืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื Circus. ื–ื”
ืžืฆื™ื’ ื–ืจื ื—ื™ ื‘ืืžืฆืขื•ืช ืฉืงืขื™ ืื™ื ื˜ืจื ื˜ ื•- ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก ืขืจื•ืฅ, ืื‘ืœ ื’ื ืœืืคืฉืจ ืœืš
ืœื”ืชืขืจื‘ื‘ ืขื ืงืจืงืก ื“ืจืš ืฉืœื” REQ/REP ืขืจื•ืฅ.

ื”ืื—ืจื•ืŸ ื—ื‘ื™ื‘, circusctl ื”ื•ื ื›ืœื™ ืฉื•ืจืช ืคืงื•ื“ื” ื”ืžืืคืฉืจ ืœืš ืœื ื”ื•ื’ ืงืจืงืก ื“ืจืš ืฉืœื”
REQ/REP ืขืจื•ืฅ.

ืืชื” ื™ื›ื•ืœ ื’ื ืœืงื‘ืœ ืชื•ืกืคื™ื ืฉื ืจืฉืžื™ื ืืœื™ื”ื ืงืจืงืก's PUB/SUB ืขืจื•ืฅ ื•ืœืชืช ืœืš ืœืฉืœื•ื—
ืคืงื•ื“ื•ืช ืœ- REQ/REP ื›ืžื• ืขืจื•ืฅ circusctl ื”ื™ื”.

ืื‘ื˜ื—ื”
Circus ื‘ื ื•ื™ ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ืกืคืจื™ื™ืช ZeroMQ ื•ืžื’ื™ืข ืœืœื ืื‘ื˜ื—ื” ื›ืœืœ
ืคืจื•ื˜ื•ืงื•ืœื™ื. ืขื ื–ืืช, ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืžืขืจื›ืช Circus ืขืœ ืฉืจืช ื•ืœื”ื’ื“ื™ืจ ืžื ื”ืจืช SSH ื›ื“ื™
ืœื’ืฉืช ืืœื™ื• ืžืžื›ื•ื ื” ืื—ืจืช.

ื—ืœืง ื–ื” ืžืกื‘ื™ืจ ืžื” Circus ืขื•ืฉื” ื‘ืžืขืจื›ืช ืฉืœืš ื›ืฉืืชื” ืžืคืขื™ืœ ืื•ืชื”, ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ
ืžืชืืจ ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ืžื ื”ืจืช SSH.

ืืชื” ื™ื›ื•ืœ ื’ื ืœืงืจื•ื http://www.zeromq.org/area:faq#toc5

TCP ื™ืฆื™ืื•ืช
ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, Circus ืคื•ืชื— ืืช ื™ืฆื™ืื•ืช ื”-TCP ื”ื‘ืื•ืช ื‘ืžืืจื— ื”ืžืงื•ืžื™:

ยท 5555 - ื”ื ืžืœ ื”ืžืฉืžืฉ ืœืฉืœื™ื˜ื” ื‘ืงืจืงืก ื‘ืืžืฆืขื•ืช circusctl

ยท 5556 -- ื”ื™ืฆื™ืื” ื”ืžืฉืžืฉืช ืœืขืจื•ืฅ ื”ืžืคืจืกื/ืžื ื•ื™ื™ื.

ยท 5557 -- ื”ื™ืฆื™ืื” ื”ืžืฉืžืฉืช ืœืขืจื•ืฅ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” -- ืื ืžื•ืคืขืœืช.

ยท 8080 -- ื”ื™ืฆื™ืื” ื”ืžืฉืžืฉืช ืืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ื”ืื™ื ื˜ืจื ื˜ -- ืื ืžื•ืคืขืœืช.

ื™ืฆื™ืื•ืช ืืœื• ืžืืคืฉืจื•ืช ืœืืคืœื™ืงืฆื™ื•ืช ืœืงื•ื— ืœืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžืขืจื›ืช Circus ืฉืœืš, ื•ื‘ื”ืชืื ืœืื•ืคืŸ ืฉื‘ื•
ื”ืชืฉืชื™ืช ืฉืœืš ืžืื•ืจื’ื ืช, ื™ื™ืชื›ืŸ ืฉืชืจืฆื” ืœื”ื’ืŸ ืขืœ ื”ื™ืฆื™ืื•ืช ื”ืœืœื• ื‘ืืžืฆืขื•ืช ื—ื•ืžื•ืช ืืฉ or
ืœื”ื’ื“ื™ืจ ืืช Circus ืœืจื•ืฅ ื‘ืืžืฆืขื•ืช IPC ื™ืฆื™ืื•ืช.

ื”ื ื” ื“ื•ื’ืžื” ืœื”ืคืขืœืช Circus ื‘ืืžืฆืขื•ืช ื ืงื•ื“ื•ืช ื›ื ื™ืกื” ืœ-IPC ื‘ืœื‘ื“:

[ืงืจืงืก]
check_delay = 5
ื ืงื•ื“ืช ืงืฆื” = ipc:///var/circus/endpoint
pubsub_endpoint = ipc:///var/circus/pubsub
stats_endpoint = ipc:///var/circus/stats

ื›ืืฉืจ ืžื•ื’ื“ืจื™ื ื‘ืืžืฆืขื•ืช IPC, ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื•ืช ืžืื•ืชื” ืชื™ื‘ื”, ืืš ืืฃ ืื—ื“ ืœื ื™ื›ื•ืœ
ืœื’ืฉืช ืืœื™ื”ื ืžื‘ื—ื•ืฅ, ื‘ื ื™ื’ื•ื“ ืœืฉื™ืžื•ืฉ ื‘-TCP. ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื•ืช ื’ื ื›ืžืฉืชืžืฉ ืฉ
ื™ืฉ ื’ื™ืฉืช ื›ืชื™ื‘ื” ืœื ืชื™ื‘ื™ ืฉืงืข ื”-ipc. ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืืช ื”ื‘ืขืœื™ื ืฉืœ ื ืงื•ื“ืช ืกื™ื•ื ื‘ืืžืฆืขื•ืช
ืžื” ื”ื™ื endpoint_owner ืืคืฉืจื•ืช ืชืฆื•ืจื”. ื–ื” ืžืืคืฉืจ ืœืš ืœื”ืคืขื™ืœ ืืช circusd ื›ืžืฉืชืžืฉ ื”ืฉื•ืจืฉ, ืื‘ืœ
ืœืืคืฉืจ ืœืชื”ืœื™ื›ื™ื ืฉืื™ื ื ืฉื•ืจืฉ ืœืฉืœื•ื— ืืœื™ื”ื ืคืงื•ื“ื•ืช ืงืจืงืก. ืฉื™ืžื• ืœื‘ ื›ื™ ื‘ืขืช ื”ืฉื™ืžื•ืฉ endpoint_owner,
ืขืœ ืžื ืช ืœืžื ื•ืข ืžืชื”ืœื™ื›ื™ื ืฉืื™ื ื ืฉื•ืจืฉ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืชื—ื™ืœ ืชื”ืœื™ื›ื™ื ืฉืจื™ืจื•ืชื™ื™ื ื›ื™
ืœืจื•ืฅ ืขื ื”ืจืฉืื•ืช ื’ื“ื•ืœื•ืช ื™ื•ืชืจ, ืคืงื•ื“ืช ื”ื”ื•ืกืคื” ืชืื›ื•ืฃ ืฉ-Watchers ื—ื“ืฉื™ื ื—ื™ื™ื‘ื™ื ืœืคืขื•ืœ ื‘ืชื•ืจ
ืžื” ื”ื™ื endpoint_owner ืžึดืฉืืชึทืžึตืฉื. ื”ื’ื“ืจื•ืช Watcher ื‘ืงื‘ืฆื™ ื”ืชืฆื•ืจื” ื”ืžืงื•ืžื™ื™ื ืœื ื™ื”ื™ื•
ืžื•ื’ื‘ืœ ื‘ื“ืจืš ื–ื•.

ื›ืžื•ื‘ืŸ, ืื ืชืคืขื™ืœ ืืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ื”ืื™ื ื˜ืจื ื˜ื™, ื” 8080 ื”ื ืžืœ ืขื“ื™ื™ืŸ ื™ื”ื™ื” ืคืชื•ื—.

circushttpd
ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ circushttpd ื‘ืื•ืคืŸ ื™ื“ื ื™, ืื• ื›ืืฉืจ ืืชื” ืžืฉืชืžืฉ ื‘- httpd ืืคืฉืจื•ืช ื‘ืงื•ื‘ืฅ ini ื›ืžื•
ื–ึถื”:

[ืงืจืงืก]
check_delay = 5
ื ืงื•ื“ืช ืงืฆื” = ipc:///var/circus/endpoint
pubsub_endpoint = ipc:///var/circus/pubsub
stats_endpoint = ipc:///var/circus/stats
httpd = 1

ืืคืœื™ืงืฆื™ื™ืช ื”ืื™ื ื˜ืจื ื˜ ืชืคืขืœ ื‘ื™ืฆื™ืื” 8080 ื•ื™ืืคืฉืจ ืœื›ืœ ืื—ื“ ืœื’ืฉืช ืœื“ืฃ ื”ืื™ื ื˜ืจื ื˜
ืœื ื”ืœ ืืช ืงืจืงืก ื“ืžื•ืŸ.

ื–ื” ื›ื•ืœืœ ื™ืฆื™ืจืช ืฆื•ืคื™ื ื—ื“ืฉื™ื ืฉื™ื›ื•ืœื™ื ืœื”ืจื™ืฅ ื›ืœ ืคืงื•ื“ื” ื‘ืžืขืจื›ืช ืฉืœืš!

Do ืœึนื ืœืขืฉื•ืช it ื‘ืคื•ืžื‘ื™ ื–ืžื™ืŸ

ืื ืืชื” ืจื•ืฆื” ืœื”ื’ืŸ ืขืœ ื”ื’ื™ืฉื” ืœืคืื ืœ ื”ืื™ื ื˜ืจื ื˜, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื™ืฉ ืื•ืชื• ืžืื—ื•ืจื™ Nginx ืื•
Apache ืื• ื›ืœ ืฉืจืช ืื™ื ื˜ืจื ื˜ ื‘ืขืœ ื™ื›ื•ืœืช ืคืจื•ืงืกื™, ืฉื™ื›ื•ืœ ืœื“ืื•ื’ ืœืื‘ื˜ื—ื”.

ืžืฉืชืžืฉ ื• ืงึฐื‘ื•ึผืฆึธื” ื”ืจืฉืื•ืช
ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืฉื”ืชื—ื™ืœื• ืขื Circus ื™ืคืขืœื• ืขื ืื•ืชื• ืžืฉืชืžืฉ ื•ืงื‘ื•ืฆื”
as ืงืจืงืก. ื‘ื”ืชืื ืœื”ืจืฉืื•ืช ืฉื™ืฉ ืœืžืฉืชืžืฉ ื‘ืžืขืจื›ืช, ื™ื™ืชื›ืŸ ืฉืœื ื™ื”ื™ื• ืœืš
ื’ื™ืฉื” ืœื›ืœ ื”ืชื›ื•ื ื•ืช ืฉ-Circus ืžืกืคืง.

ืœื“ื•ื’ืžื”, ืชื›ื•ื ื•ืช ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžืกื•ื™ืžื•ืช ื‘ืชื”ืœื™ื›ื™ื ืคื•ืขืœื™ื ื“ื•ืจืฉื•ืช ื”ืจืฉืื•ืช ืžื•ืจื—ื‘ื•ืช.
ื‘ื“ืจืš ื›ืœืœ, ืื ืžืกืคืจื™ ื”ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ ืืชื” ืžืงื‘ืœ ื‘ืืžืฆืขื•ืช ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ื”ืคืงื•ื“ื” ื”ื N / A, ื–ื” ืื•ืžืจ ืฉืœืš
ื”ืžืฉืชืžืฉ ืœื ื™ื›ื•ืœ ืœื’ืฉืช ืœืงื‘ืฆื™ ื”ืคืจื•ืฆื“ื•ืจื”. ื–ื” ื™ื”ื™ื” ื”ืžืงืจื” ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืชื—ืช Mac OS X.

ืืชื” ื™ื›ื•ืœ ืœืจื•ืฅ ืงืจืงืก ื‘ืชื•ืจ root ื›ื“ื™ ืœืชืงืŸ ืืช ื–ื”, ื•ืœื”ื’ื“ื™ืจ ืืช uid ื• gid ืขืจื›ื™ื ืขื‘ื•ืจ ื›ืœ ืฆื•ืคื”
ื›ื“ื™ ืœืงื‘ืœ ืืช ื›ืœ ื”ืชื›ื•ื ื•ืช.

ืื‘ืœ ื”ื™ื–ื”ืจื• ื‘ืจื™ืฆื” ืงืจืงืก ื›ืžื• ืฉื•ืจืฉ ื—ื•ืฉืฃ ืื•ืชืš ืœื”ืกืœืžื” ืคื•ื˜ื ืฆื™ืืœื™ืช ืฉืœ ื”ืจืฉืื•ืช
ื‘ืื’ื™ื. ืืžื ื ืื ื—ื ื• ืขื•ืฉื™ื ื›ืžื™ื˜ื‘ ื™ื›ื•ืœืชื ื• ื›ื“ื™ ืœื”ื™ืžื ืข ืžื›ืœ ื‘ืื’, ืคื•ืขืœ ื›ืฉื•ืจืฉ ื•ืžืชืžื•ื“ื“ ืขื ื‘ืื’ ื–ื”
ืžื‘ืฆืข ืคืขื•ืœื•ืช ืœื ืจืฆื•ื™ื•ืช ื‘ืžืขืจื›ืช ืฉืœืš ืขืœื•ืœ ืœื”ื™ื•ืช ืžืกื•ื›ืŸ.

ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœืžื ื•ืข ื–ืืช ื”ื™ื ืœื•ื•ื“ื ืฉื”ืžืขืจื›ืช ืฉืžืคืขื™ืœื” ืืช Circus ื”ื™ื ืžืœืื”
ืžื‘ื•ื“ื“ (ื›ืžื• VM) or ืœื”ืคืขื™ืœ ืืช ื›ืœ ื”ืžืขืจื›ืช ืชื—ืช ืžืฉืชืžืฉ ืžื‘ื•ืงืจ.

SSH ืžื ื”ื•ืจ
ืœืงื•ื—ื•ืช ื™ื›ื•ืœื™ื ืœื”ืชื—ื‘ืจ ืœ- a ืงืจืงืก ืžื•ืคืข ืขืœ ื™ื“ื™ ื™ืฆื™ืจืช ืžื ื”ืจืช SSH. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื”ืขื‘ืจ ืืช
ืืคืฉืจื•ืช ืฉื•ืจืช ืคืงื•ื“ื” --ืฉืฉ ืื—ืจื™ื• user@address, ืฉื ื”ืžืฉืชืžืฉ ื”ื•ื ื”ืžืฉืชืžืฉ ื‘ืฉืœื˜
ืฉืจืช ื• ื›ืชื•ื‘ืช ื”ื™ื ื›ืชื•ื‘ืช ื”ืฉืจืช ื›ืคื™ ืฉื ืจืืชื” ืขืœ ื™ื“ื™ ื”ืœืงื•ื—. ืคืจื•ื˜ื•ืงื•ืœ SSH ื™ื”ื™ื”
ื“ื•ืจืฉื™ื ืื™ืฉื•ืจื™ื ื›ื“ื™ ืœื”ืฉืœื™ื ืืช ื”ื›ื ื™ืกื”.

If ืงืจืงืก ื›ืคื™ ืฉื ืจืื” ืขืœ ื™ื“ื™ ืฉืจืช SSH ืื™ื ื• ื‘ื›ืชื•ื‘ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื ืงื•ื“ืช ื”ืงืฆื” 5555
ืœืื—ืจ ืžื›ืŸ ืฆื™ื™ืŸ ืืช ืงืจืงืก ื›ืชื•ื‘ืช ื‘ืืžืฆืขื•ืช ื”ืืคืฉืจื•ืช --ื ืงื•ื“ืช ืงืฆื”

ืžึฐืื•ึผื‘ื˜ึธื— ื”ืชืงื ื” ื“ื•ื’ืžื”
ื”ื’ื“ืจืช ืฉืจืช Circus ืžืื•ื‘ื˜ื— ื™ื›ื•ืœื” ืœื”ืชื‘ืฆืข ืขืœ ื™ื“ื™:

ยท ื”ืคืขืœืช ืฉืจืช SSH

ยท ื”ืคืขืœืช Apache ืื• Nginx ืขืœ 80 ื™ืฆื™ืื”, ื•ืขื•ืฉื” ืคืจื•ืงืกื™ ื”ืคื•ืš ืขืœ 8080 ื ึธืžึธืœ.

ยท ื—ืกื™ืžืช ื” 8080 ื ืžืœ ืžื’ื™ืฉื” ืžื‘ื—ื•ืฅ.

ยท ื”ืคืขืœืช ื›ืœ ื™ืฆื™ืื•ืช ZMQ Circusd ื‘ืืžืฆืขื•ืช ืงื‘ืฆื™ IPC ื‘ืžืงื•ื ื™ืฆื™ืื•ืช TCP, ื•ืžื ื”ื•ืจ ืฉืœ ื›ืœ
ืฉื™ื—ื•ืช ื“ืจืš SSH.
[ืชืžื•ื ื”]

ืชืจื•ืžื” ืœ ืงืจืงืก
ืงืจืงืก ื”ื•ืงื ื‘ืžื•ื–ื™ืœื” ืื‘ืœ ื”ืžื˜ืจื” ืฉืœื• ื”ื™ื ืœื ืœื”ื™ืฉืืจ ืจืง ืฉื. ืื ื—ื ื• ืžื ืกื™ื
ืœื‘ื ื•ืช ื›ืœื™ ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจ ืื—ืจื™ื ื•ื ื™ืชืŸ ืœื”ืจื—ื‘ื” ื‘ืงืœื•ืช.

ืื ื—ื ื• ื‘ืืžืช ืคืชื•ื—ื™ื ืœื›ืœ ืชืจื•ืžื”, ื‘ืฆื•ืจื” ืฉืœ ืงื•ื“, ืชื™ืขื•ื“, ื“ื™ื•ื ื™ื,
ื”ืฆืขืช ืชื›ื•ื ื” ื•ื›ื•'.

ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ื ื•ืฉื ื‘ืจืฉื™ืžืช ื”ืชืคื•ืฆื” ืฉืœื ื•: http://tech.groups.yahoo.com/group/circus-dev/

ืื• ื”ื•ืกืฃ ื‘ืขื™ื” ืืฆืœื ื• ื‘ืื’ ื’ืฉืฉ

ืงื‘ื™ืขื” ืฉื’ื™ืื•ืช ื”ืงืœื“ื” ื• ืฉื™ืคื•ืจ ืžื” ื”ื™ื ืชื™ืขื•ื“
ื–ื” ื‘ื”ื—ืœื˜ ืืคืฉืจื™ ืฉื”ืขื™ื ื™ื™ื ืฉืœืš ืžื“ืžืžื•ืช ื‘ื–ืžืŸ ืงืจื™ืืช ื”ื—ืฆื™ ื”ืื ื’ืœื™ืช ื”ื–ื•
ืชื™ืขื•ื“ ื—ืฆื™ ืฆืจืคืชื™, ืืœ ืชื”ืกืก ืœืชืจื•ื ื›ืœ ื ื™ืกื•ื— ืžื—ื“ืฉ / ืฉื™ืคื•ืจ
ื”ื˜ื•ืคืก ื‘ืชื™ืขื•ื“. ื›ื ืจืื” ืฉืืชื” ืืคื™ืœื• ืœื ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืื™ืš ืงืจืงืก ืขื•ื‘ื“
ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช.

ืžื•ืกื™ืฃ ื—ื“ืฉ ืžืืคื™ื™ื ื™ื
ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืžื•ืขืจื›ื•ืช ื›ืžื•ื‘ืŸ ืžืื•ื“. ืื ื™ืฉ ืœืš ืืช ื”ืฆื•ืจืš ื•ื”ื–ืžืŸ ืœื›ืš
ืœืขื‘ื•ื“ ืขืœ ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช, ื”ื•ืกืคืชื ืœืกื™ืจืงื•ืก ืœื ืืžื•ืจื” ืœื”ื™ื•ืช ื›ืœ ื›ืš ืžืกื•ื‘ื›ืช. ื ื™ืกื™ื ื• ืžืื•ื“
ืงืฉื” ืœืงื‘ืœ API ื ืงื™ ื•ืžื•ื‘ืŸ, ืžืงื•ื•ื” ืฉื–ื” ืžืฉืจืช ืืช ื”ืžื˜ืจื”.

ืชืฆื˜ืจืš ืœื”ื•ืกื™ืฃ ืชื™ืขื•ื“ ื•ื‘ื“ื™ืงื•ืช ืœืฆื“ ื”ืงื•ื“ ืฉืœ ื”ืชื›ื•ื ื” ื”ื—ื“ืฉื”.
ืื—ืจืช ืœื ื ื•ื›ืœ ืœืงื‘ืœ ืืช ื”ืชื™ืงื•ืŸ.

ืื™ืš ืœ ืœื”ื’ื™ืฉ ืฉืึถืœึฐืšึธ ืฉื™ื ื•ื™ื™ื
ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘-git ื‘ืชื•ืจ DVCS. ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื”ืฆื™ืข ืฉื™ื ื•ื™ื™ื ื”ื™ื ืœื™ืฆื•ืจ ืกื ื™ืฃ ืฉืœืš
ืฆื“ (ื“ืจืš ืกื™ืœื•ืŸ ืœืชืฉืœื•ื -b ืฉื ื”ืกื ื™ืฃ) ื•ื‘ืฆืข ืืช ื”ืฉื™ื ื•ื™ื™ื ืฉืœืš ืฉื. ื‘ืจื’ืข ืฉื™ืฉ ืœืš
ืžืฉื”ื• ืžื•ื›ืŸ ืœืคืจื™ื™ื ื˜ื™ื™ื, ืชื•ืฆื™ื ื‘ืงืฉืช ืžืฉื™ื›ื” ื ื’ื“ ื”ืกื ื™ืฃ ื”ื–ื”.

ืื ื• ืขื•ืงื‘ื™ื ืื—ืจ ื”ืžื•ื“ืœ ื”ื–ื” ื›ื“ื™ ืœืืคืฉืจ ืฆื™ืžื•ื“ ื ืžื•ืš ื‘ื™ืŸ ื”ืชื›ื•ื ื•ืช ืฉืืชื”
ืžืฆื™ืข. ืœื“ื•ื’ืžื”, ืื ื• ื™ื›ื•ืœื™ื ืœืงื‘ืœ ื‘ืงืฉืช ืžืฉื™ื›ื” ืื—ืช ืชื•ืš ื›ื“ื™ ื“ื™ื•ืŸ
ืœืขื•ื“ ืื—ื“.

ืœืคื ื™ ืฉืืชื” ืžืฆื™ืข ืืช ื”ืฉื™ื ื•ื™ื™ื ืฉืœืš, ื‘ื“ื•ืง ืฉื•ื‘ ืฉื”ื ืœื ืฉื•ื‘ืจื™ื ืฉื•ื ื“ื‘ืจ! ืืชื” ื™ื›ื•ืœ
ืœื”ืฉืชืžืฉ ืจืขื‘ ื”ืคืงื•ื“ื” ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ื–ืืช, ื”ื™ื ืชืคืขื™ืœ ืืช testsuite ืชื—ืช ื”- different
ื’ืจืกืื•ืช ืคื™ืชื•ืŸ ื ืชืžื›ื•ืช.

ื‘ื‘ืงืฉื” ืชืฉืชืžืฉ : http://issue2pr.herokuapp.com/ ืœื”ืชื™ื™ื—ืก ืœื”ืชื—ื™ื™ื‘ื•ืช ืœืงืจืงืก ืงื™ื™ื
ื‘ืขื™ื”, ืื ื‘ื›ืœืœ.

ื”ื™ืžื ืขื•ืช ืœืžื–ื’ ืžืชื—ื™ื™ื‘
ื”ื™ืžื ืขื•ืช ืžื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ืžื™ื–ื•ื’ ืžืืคืฉืจืช ืœืงื‘ืœ ื”ื™ืกื˜ื•ืจื™ื” ื ืงื™ื™ื” ื•ืงืจื™ืื”. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื‘ืžืงื•ื
ืขื•ืฉื” "git pull" ื•ื ื•ืชืŸ ืœ-git ืœื˜ืคืœ ื‘ืžื™ื–ื•ื’ื™ื ืขื‘ื•ืจืš, ื‘ืืžืฆืขื•ืช git pull --rebase will
ืœืฉื™ื ืืช ื”ืฉื™ื ื•ื™ื™ื ืฉืœืš ืื—ืจื™ ื”ืฉื™ื ื•ื™ื™ื ืฉืžืชื—ื™ื™ื‘ื™ื ื‘ืกื ื™ืฃ, ืื• ื›ืืฉืจ ืขื•ื‘ื“ื™ื ืขืœื™ื”ื
ืื“ื•ืŸ.

ื›ืœื•ืžืจ, ืขื‘ื•ืจื ื• ืžืคืชื—ื™ ื”ืœื™ื‘ื”, ืœื ื ื™ืชืŸ ื™ื•ืชืจ ืœื”ืฉืชืžืฉ ื‘-github ื”ื™ืจื•ืง ื”ืฉื™ืžื•ืฉื™
ื›ืคืชื•ืจ ืขืœ ื‘ืงืฉื•ืช ืžืฉื™ื›ื” ืื ืžืคืชื—ื™ื ืœื ื‘ื™ืกืกื• ืžื—ื“ืฉ ืืช ื”ืขื‘ื•ื“ื” ืฉืœื”ื ื‘ืขืฆืžื ืื• ืื ื ื—ื›ื”
ื–ืžืŸ ืจื‘ ืžื“ื™ ื‘ื™ืŸ ื”ื‘ืงืฉื” ืœืžื™ื–ื•ื’ ื‘ืคื•ืขืœ. ื‘ืžืงื•ื ื–ืืช, ื”ื–ืจื™ืžื” ื ืจืื™ืช ื›ืš:

git remote ื”ื•ืกืฃ ืฉื ืžืื’ืจ ื›ืชื•ื‘ืช ืืชืจ
ืฉื ืื—ื–ื•ืจ git
git checkout feature-branch
git rebase master

# ื‘ื“ื•ืง ืฉื”ื›ืœ ืขื•ื‘ื“ ื›ืžื• ืฉืฆืจื™ืš ื•ืื– ื”ืชืžื–ื’ ื‘ืžืืกื˜ืจ
ืžืืกื˜ืจ ืœืงื•ืคื•ืช
git merge feature-branch

ื‘ื“ื™ื•ืŸ
ืื ืืชื” ืžื•ืฆื ืืช ืขืฆืžืš ื–ืงื•ืง ืœืขื–ืจื” ื›ืœืฉื”ื™ ื‘ื–ืžืŸ ืฉืืชื” ืžืกืชื›ืœ ืขืœ ื”ืงื•ื“ ืฉืœ ืงืจืงืก, ืืชื” ื™ื›ื•ืœ ืœืœื›ืช
ื•ืžืฆื ืื•ืชื ื• ื‘-irc ื‘ื›ืชื•ื‘ืช #ืื•ื”ืœ ืงืจืงืก on irc.freenode.org (ืื• ืื ืื™ืŸ ืœืš IRC
ืœืงื•ื—, ืœื”ืฉืชืžืฉ ืžื” ื”ื™ื ืื™ื ื˜ืจื ื˜ ืฆ'ืื˜)

ืืชื” ื™ื›ื•ืœ ื’ื ืœืคืชื•ื— ืฉืจืฉื•ืจ ื‘ืจืฉื™ืžืช ื”ืชืคื•ืฆื” ืฉืœื ื• -
http://tech.groups.yahoo.com/group/circus-dev

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืฉืืœ ืฉืืœื•ืช
ืœื”ืœืŸ ืจืฉื™ืžื” ืฉืœ ืฉืืœื•ืช ื ืคื•ืฆื•ืช ืขืœ ืงืจืงืก:

ืื™ืš ืขื•ืฉื” ืงืจืงืก ืœืขืจื•ื ืœึฐื”ึทืฉืึฐื•ื•ึนืช ืœ a ืงืœืืกื™ ืœึทืขึฒืจื•ึนื?
ื‘ืขืจื™ืžืช WSGI ืงืœืืกื™ืช, ื™ืฉ ืœืš ืฉืจืช ื›ืžื• Gunicorn ืฉืžืฉืจืช ืขืœ ืคื•ืจื˜ ืื• an
ืฉืงืข ื™ื•ื ื™ืงืก ื•ื ืคืจืก ื‘ื“ืจืš ื›ืœืœ ืžืื—ื•ืจื™ ืฉืจืช ืื™ื ื˜ืจื ื˜ ื›ืžื• Nginx: [ืชืžื•ื ื”]

ืœืงื•ื—ื•ืช ืžืชืงืฉืจื™ื ืœ-Nginx, ืืฉืจ ืžืคื ื” ืืช ื›ืœ ื”ืฉื™ื—ื•ืช ืœ-Gunicorn.

ืื ืืชื” ืจื•ืฆื” ืœื•ื•ื“ื ืฉืชื”ืœื™ืš Gunicorn ื™ื™ืฉืืจ ืคืขื™ืœ, ืขืœื™ืš ืœื”ืฉืชืžืฉ ื‘-a
ืชื•ื›ื ื™ืช ื›ืžื• Supervisord ืื• upstart.

ื’ื•ื ื™ืงื•ืจืŸ ื‘ืชื•ืจื• ืฆื•ืคื” ื‘ืชื”ืœื™ื›ื™ื ืฉืœื• ("ืขื•ื‘ื“ื™ื").

ื‘ืžื™ืœื™ื ืื—ืจื•ืช ืืชื” ืžืฉืชืžืฉ ื‘ืฉืชื™ ืจืžื•ืช ืฉืœ ื ื™ื”ื•ืœ ืชื”ืœื™ื›ื™ื. ื›ื–ื” ืฉืืชื” ืžื ื”ืœ ื•
control (ืกื•ืคืจvisord), ื•ืื—ื“ ืฉื ื™ ืฉืืชื” ืฆืจื™ืš ืœื ื”ืœ ื‘ืžืžืฉืง ืžืฉืชืžืฉ ืื—ืจ, ืขื ื
ืคื™ืœื•ืกื•ืคื™ื” ืฉื•ื ื” ื•ืคื—ื•ืช ืฉืœื™ื˜ื” ืขืœ ืžื” ืฉืงื•ืจื” (ื–ื• ืฉืœ ืฉืจืช wsgi)

ื–ื” ื ื›ื•ืŸ ืขื‘ื•ืจ Gunicorn ื•ืจื•ื‘ ืฉืจืชื™ WSGI ืžืจื•ื‘ื™ ืชื”ืœื™ื›ื™ื ื‘ื—ื•ืฅ ืฉืื ื™ ืžื›ื™ืจ.
uWsgi ืงืฆืช ืฉื•ื ื” ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžืฆื™ืข ืฉืคืข ืฉืœ ืืคืฉืจื•ื™ื•ืช.

ืื‘ืœ ืื ืืชื” ืจื•ืฆื” ืœื”ื•ืกื™ืฃ ืฉืจืช Redis ืœืขืจื™ืžื” ืฉืœืš, ืืชื” ื™ืฆื˜ืจืš ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื‘ื ื™ื”ื•ืœ ืฉืœืš
ืžื—ืกื ื™ืช ืชื”ืœื™ื›ื™ื ื‘ืฉื ื™ ืžืงื•ืžื•ืช ืฉื•ื ื™ื.

ื”ื’ื™ืฉื” ืฉืœ ืงืจืงืก ื‘ื ื•ืฉื ื–ื” ื”ื™ื ืœื ื”ืœ ืชื”ืœื™ื›ื™ื ื• ืฉืงืขื™ื.

ืขืจื™ืžืช ืงืจืงืก ื™ื›ื•ืœื” ืœื”ื™ืจืื•ืช ื›ืš: [ืชืžื•ื ื”]

ืื–, ื›ืžื• ื’ื•ื ื™ืงื•ืจืŸ, ืกื™ืจืงื•ืก ืžืกื•ื’ืœ ืœืื’ื“ ืฉืงืข ืฉื™ื™ืฉืœื— ืขืœ ื™ื“ื™ Nginx. ืงืจืงืก
ืืœ ืชืชืžื•ื“ื“ ืขื ื”ื‘ืงืฉื•ืช ืืœื ืคืฉื•ื˜ ืงื•ืฉืจ ืืช ื”ืฉืงืข. ืื– ื–ื” ืชืœื•ื™ ื‘ืขื•ื‘ื“ ืื™ื ื˜ืจื ื˜
ืชื”ืœื™ืš ืงื‘ืœืช ื—ื™ื‘ื•ืจื™ื ืขืœ ื”ืฉืงืข ื•ืœื‘ืฆืข ืืช ื”ืขื‘ื•ื“ื”.

ื”ื•ื ืžืกืคืง ืชื›ื•ื ื•ืช ืฉื•ื•ืช ืœ-Supervisord, ืืš ื’ื ื™ืืคืฉืจ ืœืš ืœื ื”ืœ ืืช ื›ื•ืœื
ืชื”ืœื™ื›ื™ื ื‘ืื•ืชื” ืจืžื”, ื‘ื™ืŸ ืื ื”ื ืขื•ื‘ื“ื™ ืื™ื ื˜ืจื ื˜ ืื• Redis ืื• ื›ืœ ื“ื‘ืจ ืื—ืจ. ื”ื•ืกืคืช ื
ืขื•ื‘ื“ ืื™ื ื˜ืจื ื˜ ื—ื“ืฉ ื ืขืฉื” ื‘ื“ื™ื•ืง ื›ืžื• ื”ื•ืกืคืช ืชื”ืœื™ืš Redis ื—ื“ืฉ.

ืกืคืกืœื™ื
ืขืฉื™ื ื• ื›ืžื” ืกืคืกืœื™ื ื›ื“ื™ ืœื”ืฉื•ื•ืช ืืช Circus & Chaussette ืขื Gunicorn. ืœืกื™ื›ื•ื, ืงืจืงืก ื”ื•ื
ืœื ืžื•ืกื™ืฃ ืชืงื•ืจื” ื›ืœืฉื”ื™ ื•ืืชื” ื™ื›ื•ืœ ืœืืกื•ืฃ ื”ืจื‘ื” ืงืฆื” ืงืฆื” ืขื‘ื•ืจ ืขื•ื‘ื“ื™ ื”ืื™ื ื˜ืจื ื˜ ืฉืœืš.

ืจืื”:

ยท http://blog.ziade.org/2012/06/28/wgsi-web-servers-bench

ยท http://blog.ziade.org/2012/07/03/wsgi-web-servers-bench-part-2

ืื™ืš ืœ ืœืคืชื•ืจ ืงืจืงืก?
ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืงืจืงืก ืฉื•ืžืจ ืขืœ ื”ืจื™ืฉื•ื ืฉืœื• stdout ื“ืœื™ืœื” ืœืžื“ื™. ื—ื•ืกืจ ืชืคื•ืงื” ื–ื” ื™ื›ื•ืœ
ืœื”ืงืฉื•ืช ืขืœ ืคืชืจื•ืŸ ื‘ืขื™ื•ืช ื›ืืฉืจ ื ืจืื” ืฉืชื”ืœื™ื›ื™ื ืžืชืงืฉื™ื ืœื”ืชื—ื™ืœ.

ื›ื“ื™ ืœื”ื’ื‘ื™ืจ ืืช ื”ืจื™ืฉื•ื ืงืจืงืก ืžืกืคืง, ื ืกื” ืœื”ื’ื“ื™ืœ ืืช ืจืžืช ื”ื™ื•ืžืŸ. ืœืจืื•ืช ืืช ื”
ืจืžื•ืช ื™ื•ืžืŸ ื–ืžื™ื ื•ืช ืคืฉื•ื˜ ื”ืฉืชืžืฉ ื‘- - ืขื–ืจื” ื“ื’ืœ.

$ circus --log-level debug test.ini

ืžื™ืœืช ืื–ื”ืจื” ืื—ืช. ืื ืชื”ืœื™ืš ืžืชื ื•ืคืฃ ื•ืจืžืช ื™ื•ืžืŸ ื ื™ืคื•ื™ ื”ื‘ืื’ื™ื ืžื•ืคืขืœืช, ืืชื”
ื™ืจืื” ื”ื•ื“ืขื•ืช ืขื‘ื•ืจ ื›ืœ ื ื™ืกื™ื•ืŸ ื”ืชื—ืœื”. ื–ื” ืขืฉื•ื™ ืœื”ื™ื•ืช ืžื•ืขื™ืœ ืœื”ื’ื“ื™ืจ ืืช ื”ืืคืœื™ืงืฆื™ื” ื›ืœื•ืžืจ
ืžืชื ื•ืคืคืช ืœื”ืฉืชืžืฉ ื ืขื™ื›ื•ื‘_ื—ื™ืžื•ื ืœื”ืื˜ ืืช ื”ื”ื•ื“ืขื•ืช ืœืงืฆื‘ ื ื™ืชืŸ ืœื ื™ื”ื•ืœ.

[watcher:webapp]
cmd = python -m myapp.wsgi
delay_warmup = 5

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, stdout ื• ืกื˜ื“ืจืจ ื ืœื›ื“ื™ื ืขืœ ื™ื“ื™ ื” ืงืจืงืก ืชื”ืœื™ืš. ืื ืืชื” ื‘ื•ื“ืง ืืช ืฉืœืš
config ื•ื‘ืจืฆื•ื ืš ืœืจืื•ืช ืืช ื”ืคืœื˜ ื‘ื”ืชืื ืœืคืœื˜ circusd, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืืช
ืฆื•ืคื” ืœื”ืฉืชืžืฉ ื‘ StdoutStream ืžืขืžื“.

[watcher:webapp]
cmd = python -m myapp.wsgi
stdout_stream.class = StdoutStream
stderr_stream.class = StdoutStream

ืื ื”ื™ื™ืฉื•ื ืฉืœืš ืžื™ื™ืฆืจ ืขืงื‘ื•ืช ืื• ืฉื’ื™ืื” ื›ืืฉืจ ื”ื•ื ืžื ืกื” ืœื”ืคืขื™ืœ ืื•ืชืš
ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืจืื•ืช ืืช ื–ื” ื‘ืคืœื˜.

changelog ื”ื™ืกื˜ื•ืจื™ื”
0.12.1 - 2015-08-05
ยท ืชืงืŸ ืฉื’ื™ืื” ื‘ืขืช ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ืฆื•ืคื” ืขื ื–ืจื ืคืœื˜ - #913

ยท ืฉื™ื ื•ื™ื™ื ืงืœื™ื ื‘ืžืกืžืš

0.12 - 2015-06-02
ืžื”ื“ื•ืจื” ื–ื• ืžื‘ื™ืื” ืืช ื”ืชืžื™ื›ื” ืฉืœ Python 3.4, Tornado 4 ื•-Windows, ื‘ื™ืŸ ื›ืžื” ืžืจืชืงื™ื
ืชื›ื•ื ื•ืช ื•ืชื™ืงื•ื ื™ื.

ื”ืชืžื™ื›ื” ืฉืœ Windows ืขื“ื™ื™ืŸ ื ื™ืกื™ื•ื ื™ืช ื•ืื™ื ื” ืžื˜ืคืœืช ื‘ื–ืจืžื™ื.

ืฉื™ื ื•ื™ื™ื ืขื™ืงืจื™ื™ื:

ยท ืชืื™ืžื•ืช ืขื Python 3.4 - #768

ยท ืชืžื™ื›ื” ื ืกื™ื•ื ื™ืช ื‘-Windows - #788

ยท ืชืื™ืžื•ืช ืขื Tornado 4 - #872

ยท ืืจื™ื–ืช ื“ื‘ื™ืืŸ ืžื—ื•ื“ืฉืช - #896 - #903

ยท ื”ื•ืกืฃ ืชืžื™ื›ื” ื‘ืœื™ื‘ืช ืชื”ืœื™ืš Papa - #850

ยท ื”ื•ืกืฃ ื”ืชืืžืช ื’ืœื•ื‘ ื•ื’ืจืกืื•ืช ืจื’ื™ืœื•ืช ืœื”ืคืขืœื”, ืขืฆื™ืจื” ื•ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ืฆื•ืคื™ื - #829 -
#902

ืฉื™ื ื•ื™ื™ื ื ื•ืกืคื™ื:

ยท ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื”ื›ื™ื‘ื•ื™ - #784 - #842

ยท ื”ื•ืกืฃ ืืคืฉืจื•ืช ืœืฆื™ื™ืŸ ื’ืจืกืช virtualenv ืขื‘ื•ืจ ื”ืฆื•ืคื™ื - #805

ยท ื”ื•ืกืฃ ืืคืฉืจื•ืช --nostop ืœืคืงื•ื“ื” rmwatcher - #777

ยท ื”ื•ืกืฃ ื”ืชืงืฉืจื•ืช ื—ื•ื–ืจืช ืœ-Arbiter.start - #840

ยท ืชืงืŸ ืฉื•ืžืจื™ ื˜ืขื™ื ื” ืžื—ื“ืฉ ื‘ืื•ืชื™ื•ืช ื’ื“ื•ืœื•ืช - #823

ยท ื”ืกืจ ืฉืงืข ื“ื•ืœืฃ ื‘ื“ืžื•ืŸ ืกื˜ื˜ื™ืกื˜ื™ืงื” - #843

ยท ืชืงืŸ ืฉื™ื“ื•ืจ ืจื™ื‘ื•ื™ ื‘-SunOS - #876

ยท ืกื’ื•ืจ ื–ืจืžื™ ืคืœื˜ ื‘ืขืช ืขืฆื™ืจืช ืฆื•ืคื” - #885

ยท ืชืงืŸ ืฉืœื™ื—ืช ืื•ืชื•ืช ืœื ื›ื“ื™ื ืขื --ืจืงื•ืจืกื™ื‘ื™ - #888

0.11.1 - 2014-05-22
ยท ืชื•ืงืŸ ืจื’ืจืกื™ื” ืฉืฉื‘ืจื” ืืช ืงืจืงืก ื‘-2.6 - #782

0.11 - 2014-05-21
ืžื”ื“ื•ืจื” ื–ื• ืื™ื ื” ืžืฆื™ื’ื” ื”ืจื‘ื” ืชื›ื•ื ื•ืช, ื•ืžืชืžืงื“ืช ื‘ื”ืคื™ื›ืช Circus ืœื™ื•ืชืจ
ื—ื–ืง ื•ื™ืฆื™ื‘.

ืฉื™ื ื•ื™ื™ื/ืชื™ืงื•ื ื™ื ืขื™ืงืจื™ื™ื:

ยท ื•ื“ื ืฉืื™ื ื ื• ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืฉืชื™ ืคืงื•ื“ื•ืช ืกื•ืชืจื•ืช ืขืœ ื”ื‘ื•ืจืจ ื‘ื• ื–ืžื ื™ืช.

ยท ื™ืฉ ืœื ื• 2 ืžื—ืœืงื•ืช ื–ืจืžื™ื ื—ื“ืฉื•ืช: TimedRotatingFileStream, WatchedFileStream

ยท ื™ืฉ ืœื ื• ื”ื•ืง ืื—ื“ ื—ื“ืฉ: after_spawn hook

ยท CircusPlugin ืงืœ ื™ื•ืชืจ ืœืฉื™ืžื•ืฉ

ยท fix autostart=ืฆื•ืคื™ื ื›ื•ื–ื‘ื™ื ื‘ืžื”ืœืš ื”ื”ืชื—ืœื” (ืจื’ืจืกื™ื”)

ืฉื™ื ื•ื™ื™ื ื ื•ืกืคื™ื:

ยท ื ื™ืชืŸ ืœื ืชื‘ ื”ื•ื“ืขื•ืช ืงืจืงืก ืœ-syslog ืขื›ืฉื™ื• - #748

ยท ืืคืฉืจื•ืช endpoint_owner ื ื•ืกืคื” ื›ื“ื™ ืฉื ื•ื›ืœ ืœื”ื’ื“ื™ืจ ืœืื™ื–ื” ืžืฉืชืžืฉ ื™ืฉ ืงื‘ืฆื™ ืฉืงืข ipc ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™
ืงืจืงืก.

ยท ื”ืคืขืœืช ืชืžื™ื›ื” ื‘-Windows (ืจืง circusctl ืœืขืช ืขืชื”)

ยท ืชื™ืงืŸ ื”ืจื‘ื” ื“ืœื™ืคื•ืช ื‘ื‘ื“ื™ืงื•ืช

ยท ืืคืฉืจ ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ืชืœื•ื™ื™ ืจื™ืฉื™ื•ืช

ยท ืชื•ืกืฃ ื”ืžืฉืื‘ื™ื ืžืงื‘ืœ ื›ืขืช ืขืจื›ื™ ื–ื™ื›ืจื•ืŸ ืžื•ื—ืœื˜ื™ื - #609

ยท ื”ื•ืกืฃ ืชืžื™ื›ื” ืœืคืงื•ื“ื” add ืขื‘ื•ืจ ืืคืฉืจื•ืช 'ืกื™ื ื’ืœื˜ื•ืŸ' - #767

ยท ืœืืคืฉืจ ืฉืœื™ื—ืช ืื•ืชื•ืช ืฉืจื™ืจื•ืชื™ื™ื ืœืคืจื•ื™ื™ืงื˜ื™ื ืฉืœ ื™ืœื“ื™ื ื‘ืืžืฆืขื•ืช ืฉื•ืžืจ ืžืฉืื‘ื™ื - #756

ยท ืืคืฉืจ ืชืฆื•ืจืช INI/JSON/YAML ืœืจื™ืฉื•ื

ยท ื•ื“ื ืฉืื ื• ืชื•ืืžื™ื ืœ-psutil 2.x ื• 3.x

ยท ื”ื•ืกื™ืคื• ืขื•ื“ ืžื“ื“ื™ื ืœืกืคืง ืกื˜ื˜ื™ืกื˜ื™ืงื” - #698

ยท ื’ื™ืœื•ื™ ืจื™ื‘ื•ื™ ืฉื™ื“ื•ืจื™ื ืงื‘ื•ืข - #731

ยท ื”ืคื•ืš ืืช ื”ื”ืชื—ืœื”, ื”ืคืขืœ ืžื—ื“ืฉ ื•ื˜ืขืŸ ืžื—ื“ืฉ ืœืื—ื™ื“ื•ืช ื™ื•ืชืจ - #673

ยท ืืชื—ื•ืœ ื ื›ื•ืŸ ืฉืœ ื›ืœ ืงื‘ื•ืฆื•ืช ื”ืฉื™ืžื•ืฉ - #635

ยท ืฉื™ืคื•ืจ ื™ืฆื™ื‘ื•ืช ื”ื‘ื“ื™ืงื•ืช

ยท ืขื•ื“ ื”ืจื‘ื” ื”ืจื‘ื” ื“ื‘ืจื™ื....

0.10 - 2013-11-04
ืฉื™ื ื•ื™ื™ื ืขื™ืงืจื™ื™ื:

ยท ื›ืขืช ืชื•ืื Python 3.2 ื•-3.3 - #586

ยท ื”ืขื‘ื™ืจ ืืช ื”ืœื™ื‘ื” ืœื“ื’ื ืืกื™ื ื›ืจื•ืŸ ืžืœื - #569

ยท ืชื™ืขื•ื“ ืžืฉื•ืคืจ - #622

ืฉื™ื ื•ื™ื™ื ื ื•ืกืคื™ื:

ยท ื ื•ืกืคื• ืื•ืช ืขืฆื•ืจ ื•ื™ืœื“ื™ ืขืฆื™ืจื” - #594

ยท ื•ื“ื ืฉื”ืชื•ืกืฃ Watchdog ืกื•ื’ืจ ืืช ื”ืฉืงืขื™ื - #588

ยท ืขื‘ืจ ืœืžื ืชื— JSON ZMQ

ยท IN ืœื ื ืชืžืš ื‘ื›ืœ ื”ืคืœื˜ืคื•ืจืžื•ืช - #573

ยท ืืคืฉืจ ื”ื—ืœืคื•ืช ืกื‘ื™ื‘ื” ื’ืœื•ื‘ืœื™ื•ืช ื‘ื›ืœ ืกืขื™ืฃ ืชืฆื•ืจื” - #560

ยท ืืคืฉืจ ืžืงืคื™ื ื‘ืฉืžื•ืช ืงื˜ืขื™ื - #546

ยท ื›ืขืช ืžืฉืชื ื™ื ืžื•ืจื—ื‘ื™ื ื‘ื›ืœ ืžืงื•ื ื‘ืชืฆื•ืจื” - #554

ยท ื”ื•ืกื™ืฃ ืืช ื”ืคืœืื’ื™ืŸ CommandReloader

ยท ื ื•ืกืคื• ื•ื•ื™ื ืœืคื ื™_ืื•ืช & ืœืื—ืจ_ืื•ืช

ยท ืืคืฉืจ ืœืคืœืื’ื™ืŸ ืžืชื ื•ืคืฃ ืœื ืกื•ืช ืฉื•ื‘ ืœืœื ื”ื’ื‘ืœืช ื–ืžืŸ

ยท ืืœ ืชืคืขื™ืœ ืžื—ื“ืฉ ืชื”ืœื™ื›ื™ื ื›ืฉื”ืฆื•ืคื” ืขื•ืฆืจ - #529 - #536

ยท ื”ื•ืกืฃ ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ืœื›ืœ ื”ื•ื“ืขืช ืœืงื•ื— - #517

ยท ืžื–ื”ื™ ืขื•ื‘ื“ื™ื ื”ื ื›ืขืช "ื—ืจื™ืฆื™ื" -

ยท ืชื™ืงืŸ ืืช ื”ืชื ื”ื’ื•ืช ื”ื›ื™ื‘ื•ื™ ื”ื—ื™ื ื ื™ืช - #515

ยท ื•ื“ื ืฉื ื•ื›ืœ ืœื”ื•ืกื™ืฃ ืฆื•ืคื™ื ื’ื ืื ื”ื‘ื•ืจืจ ืœื ืžื•ืคืขืœ - #503

ยท ื•ื“ื ื•ื“ื ืฉื ื•ืคืฅ ืชื”ืœื™ืš ืฉืคื’ ืชื•ืงืคื• - #510

ยท ื•ื“ื ืฉื”ืคืงื•ื“ื” ื”ื’ื“ืจ ื™ื›ื•ืœื” ืœื”ื’ื“ื™ืจ ืžืกืคืจ ื•ื•ื™ื

ยท ืชืžื™ื›ื” ื ื›ื•ื ื” ื‘ืฉืงืขื™ ipv6 - #507

ยท ืืคืฉืจ ืืคืฉืจื•ื™ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ืขื‘ื•ืจ stdout_stream ื•-stderr_stream - #495

ยท ื”ื•ืกืคืช time_format ืขื‘ื•ืจ FileStream - #493

ยท ื ื•ืกืคื” ืืคืฉืจื•ืช ื—ื“ืฉื” ืœืชืฆื•ืจืช socket ื›ื“ื™ ืœืื’ื“ ืœืžืžืฉืง ืกืคืฆื™ืคื™ ืœืคื™ ืฉื

0.9.3 - 2013-09-04
ยท ื•ื“ื ืฉื ื•ื›ืœ ืœื”ื•ืกื™ืฃ ืฆื•ืคื™ื ื’ื ืื ื”ื‘ื•ืจืจ ืœื ื”ื•ืคืขืœ

ยท ื•ื“ื ืฉืื ื• ืžืงืคื™ืฆื™ื ืชื”ืœื™ืš ืฉืคื’ ืชื•ืงืคื•

ยท ื•ื“ื ืฉื”ืคืงื•ื“ื” ื”ื’ื“ืจ ื™ื›ื•ืœื” ืœื”ื’ื“ื™ืจ ื•ื•ื™ื ืื—ื“ ืื• ื›ืžื”

ยท ืชืžื™ื›ื” ื ื›ื•ื ื” ื‘ืฉืงืขื™ ipv6 ื•ืฉื™ืคื•ืจื™ื ืฉืœ CircusSockets

ยท ืชืŸ ืขืจืš ื‘ืจื™ืจืช ืžื—ื“ืœ ืœื ืชื™ื‘ ื›ื“ื™ ืœืžื ื•ืข UnboundLocalError

ยท ื ื•ืกืฃ ื‘ื“ื™ืงื” ืœืงื™ื•ื multicast_endpoint ื‘ืืชื—ื•ืœ Controller

ยท ืœื ืžืžื™ืจื™ื ื™ื•ืชืจ ื›ืœ ืžื—ืจื•ื–ืช ืกืคืจื•ืช ืœ-ints

ยท ื”ื•ืกืฃ ืžื‘ื—ื ื™ื

ยท ืื™ืŸ ืฆื•ืจืš ื‘ืžืงืจื™ื ืžื™ื•ื—ื“ื™ื ื‘ืขืช ื”ืžืจืช ืืคืฉืจื•ื™ื•ืช stdout_stream

ยท ืงื‘ืœ ื’ื ืืช umask ื›ื˜ื™ืขื•ืŸ ืœืขืงื‘ื™ื•ืช

ยท ืืคืฉืจ ืืคืฉืจื•ื™ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ืขื‘ื•ืจ stdout_stream ื•-stderr_stream.

ยท ื”ื•ืกืฃ ืืคืฉืจื•ืช ื—ื“ืฉื” ืœืชืฆื•ืจืช socket ื›ื“ื™ ืœืื’ื“ ืœืžืžืฉืง ืกืคืฆื™ืคื™ ืœืคื™ ืฉื

ยท ื”ื•ืกืฃ time_format ืขื‘ื•ืจ FileStream + ื‘ื“ื™ืงื•ืช

ยท ืขื“ื›ื•ืŸ circus.upstart

0.9.2 - 2013-07-17
ยท ื›ืืฉืจ PYTHONPATH ืžื•ื’ื“ืจ ื‘ืงื•ื‘ืฅ ืชืฆื•ืจื”, ื”ื•ื ื ื˜ืขืŸ ื‘-sys.path, ื›ืš ืฉื ื™ืชืŸ ื™ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ื•.
ืžืžื•ืงื ืฉื - #477, #481

ยท ื”ืฉืชืžืฉ ื‘ืืจื’ื•ืžื ื˜ ื™ื—ื™ื“ ืขื‘ื•ืจ add_callback ื›ืš ืฉื”ื•ื ื™ืขื‘ื•ื“ ืขื PyZMQ < 13.1.x - ืจืื” #478

0.9 - 2013-07-16
ยท ื ื•ืกืคื• ืชื•ื•ื™ื ื›ืœืœื™ื™ื ืฉืœ ืกืขื™ืคื™ื [env]

ยท ื”ื•ืกืคื” ืงื˜ืข ื’ืœื•ื‘ืœื™ [env]

ยท ืชื•ืงืŸ ื—ืจื™ื’ ื ืกืชืจ ื›ืืฉืจ ืกื™ืจืงื•ืก-web ืื™ื ื• ืžื•ืชืงืŸ - #424

ยท ืœื•ื•ื“ื ืฉ-incr/decr ืคืงื•ื“ื•ืช ื‘ืืžืช ืœื ื• ืืช ื”ืืคืฉืจื•ืช nb - #421

ยท ืชืงืŸ ื—ื‘ื™ืœื•ืช ืืชืจ ืฉืœ watcher virtualenv ืฉืื™ื ืŸ ื‘-PYTHONPATH

ยท ื•ื“ื ืฉืœื ื ื ืกื” ืœื”ืกื™ืจ ื™ื•ืชืจ ืชื”ืœื™ื›ื™ื ืž-0 - #429

ยท ืžืขื•ื“ื›ืŸ bootstrap.py - #436

ยท ืžืคืจื™ื“ ืจื‘ ืคืœื˜ืคื•ืจืžื•ืช ืงื‘ื•ืข ื‘-pythonpath virtualenv watcher

ยท ืคื•ื ืงืฆื™ื™ืช ืกื’ื™ืจืช ืฉืงืข ืžื—ื•ื“ืฉืช

ยท ื•ื“ื ืฉืงื˜ืขื™ Env ืžื™ื•ืฉืžื™ื ืขืœ ื›ืœ ื”ืฆื•ืคื™ื - #437

ยท ื”ื•ืกื™ืฃ ืืช ื”ืคืงื•ื“ื” reloadconfig

ยท ื”ื•ืกื™ืคื• circus.green ื•ื”ื•ืกืจื• gevent ืžื”ืœื™ื‘ื” - #441, #452

ยท ื”ืฉืชืงืช ื ืงื•ื“ื•ืช ื–ื™ื•ืฃ ื•ืื–ื”ืจื•ืช ื‘ืžื‘ื—ื ื™ื - #438

ยท ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘$(circus.env.*) ืขื‘ื•ืจ ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื‘ืชืฆื•ืจื” ื›ืขืช

ยท ื”ื•ืกื™ืฃ ื”ื•ืง before_spawn

ยท ืชืงืŸ ืืช ื”ื ืชื™ื‘ ืฉืœ circusd ื‘ืงื•ื‘ืฅ ืฉื™ืจื•ืช systemd - #450

ยท ืœื•ื•ื“ื ืฉื ื•ื›ืœ ืœืฉื ื•ืช ื•ื•ื™ื ื•ืœื”ื’ื“ื™ืจ ื–ืจืžื™ื ื‘ืืžืฆืขื•ืช CLI - #455

ยท ืžืกืžืš ืžืฉื•ืคืจ

ยท ื”ื•ืกื™ืฃ ืกื˜ื˜ื™ืกื˜ื™ืงืช spawn_count ื‘-watcher

ยท ื”ื•ืกื™ืคื• ืคืจืžื˜ืจื™ื min_cpu ื•-min_mem ื‘ืชื•ืกืฃ ResourceWatcher

ยท ื”ื•ืกื™ืฃ ืืช ืคืจื˜ื™ ื”-FQDN ืœื‘ื•ืจืจ.

0.8.1 - 2013-05-28
ยท circusd-stats ื ื—ื ืง ืžืฉืงืขื™ ื™ื•ื ื™ืงืก - #415

ยท circusd-stats & circushttpd ืชื”ืœื™ื›ื™ ื™ืœื“ stdout/stderr ื ื•ืชืจื™ื ื›ืขืช ืคืชื•ื—ื™ื ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.
Python <= 2.7.5 ื™ื—ื ืง ื‘ืžื•ื“ื•ืœ ื”ืจื™ืฉื•ื ื‘ืžืงืจื” ืฉ-2/3 ื”-fds ื™ื™ืกื’ืจื• - #415

ยท ื›ืขืช ืžืคื ื” ืืœ /dev/null ื‘ืชื”ืœื™ืš ื”ื™ืœื“ ื‘ืžืงื•ื ืกื’ื™ืจื”. #417

0.8 - 2013-05-24
ยท ืฉื•ืœื‘ื• ืžื˜ืคืœื™ ื™ื•ืžื ื™ื ื‘ืœื•ืœืืช zmq io.

ยท ื”ืคื•ืš ืืช ื”ื ื™ืชื•ื‘ ืžื—ื“ืฉ ืœื ื™ืชืŸ ืœืืชื—ืœ ื•ื‘ืขืงื‘ื•ืช ื›ืš ื—ื–ืง ื™ื•ืชืจ.

ยท ืžืฉืชืžืฉ ื‘-zmq.green.eventloop ื›ืืฉืจ gevent ืžื–ื•ื”ื”

ยท ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” CIRCUSCTL_ENDPOINT ืœ-circusctl - #396

ยท util: ืชืงืŸ ื‘ืื’ ื‘ืคื•ื ืงืฆื™ื™ืช to_uid - #397

ยท ื”ืกืจ ืžื˜ืคืœ ื‘ืฉื’ื™ืืช ioloop - #398.

ยท ื›ื™ืกื•ื™ ืžื‘ื—ืŸ ืžืฉื•ืคืจ

ยท ื”ื•ืฆื™ื ืžืฉื™ืžื•ืฉ ืืช ืืคืฉืจื•ืช ื”'ืฉื™ืจื•ืช' ืขื‘ื•ืจ ื”ืคืœืื’ื™ืŸ ResourceWatcher - #404

ยท ื”ื•ืกืจ ืฉื™ืžื•ืฉ psutil.error

ยท ื ื•ืกืฃ ืชื’ืœื™ืช UDP ื‘ืงืจืงืก - #407

ยท ืžืืคืฉืจ ื›ืขืช ื’ืœื•ื‘ืก ื‘ืจืžื•ืช ืกืคืจื™ื•ืช ืฉืจื™ืจื•ืชื™ื•ืช - #388

ยท ื”ื•ืกืคื” ืืช ืืคืฉืจื•ืช ื”ืชืฆื•ืจื” 'statd' - #408

ยท ื”ื•ืกืฃ ืืคืฉืจื•ืช pidfile, logooutput ื•-loglevel ืœืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ ื”ืงืจืงืก - #379

ยท ื ื•ืกืฃ ืžื“ืจื™ืš ื‘ืžืกืžื›ื™ื.

ยท ื•ื“ื ืฉืื ื• ืžืžื–ื’ื™ื ืืช ื›ืœ ื”ืกืขื™ืคื™ื ื‘ืขืช ื”ืฉื™ืžื•ืฉ ื‘- include - #414

ยท ื”ื•ืกื™ืคื• ืืคืฉืจื•ื™ื•ืช pipe_stdout, pipe_stderr, close_child_stderr ื•-close_child_stdout ืœ-
ืฉื™ืขื•ืจ ืชื”ืœื™ื›ื™ื

ยท ื”ื•ืกื™ืคื• ืืคืฉืจื•ื™ื•ืช close_child_stderr & close_child_stdout ืœืฆื•ืคื”

0.7.1 - 2013-05-02
ยท ืชื•ืงืŸ ืืช ืืคืฉืจื•ืช ื”-respawn - #382

ยท ื•ื“ื ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘-int ืขื‘ื•ืจ ืคืกืง ื”ื–ืžืŸ - #380

ยท ื”ืฆื’ ื’ื ืืช ืฉืงืขื™ ื™ื•ื ื™ืงืก - #381

ยท ื•ื“ื ืฉื”ื•ื ืขื•ื‘ื“ ืขื ื”-pyzmq ื”ืขื“ื›ื ื™ ื‘ื™ื•ืชืจ

ยท ื”ืฆื™ื’ ืชื—ื‘ื™ืจ ืฉื ื™ ืขื‘ื•ืจ ืกื™ืžื•ืŸ fd

0.7 - 2013-04-08
ยท ืชืงืŸ ื“ื•ื’ืžื” ืฉืœ get_arbiter ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘-dict ืœื˜ื™ืขื•ืŸ ื”ืฆื•ืคื™ื. #304

ยท ื”ื•ืกืฃ ื›ืžื” ืชื™ืขื•ื“ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช #323

ยท ื”ื•ืกืฃ ืชืžื™ื›ื” ื‘ื‘ื ื™ื™ืช ืคื™ืชื•ืŸ

ยท ื”ืกื™ืจื• ืืช ื”-givent ื•ืืช ืžื ื•ืชื‘ื™ ื”ืฉืจืฉื•ืจ. ืžืฉืชืžืฉ ื›ืขืช ื‘-ioloop - ืชื™ืงื•ื ื™ื ืžืก' 346.
ืžืชื™ื™ื—ืก #340

ยท circus.web ื”ื•ื ื›ืขืช ืคืจื•ื™ืงื˜ ืžืฉืœื•

ยท ื”ืกื™ืจ ืืช ืชื™ืงื•ืŸ pyzmq

ยท ืืคืฉืจ ืœืฆื•ืคื” ืœื”ื™ื•ืช ืžื•ื’ื“ืจ ืืš ืœื ืžื•ืคืขืœ #283

ยท ื”ื•ืกืฃ ืืคืฉืจื•ืช ืœื˜ืขื™ื ืช ืžื“ืจื™ืš ืืชืจ virtualenv

ยท ื”ื•ืกื™ืคื• ืฆื•ืคื™ื ืœืคื™ ื“ืจื™ืฉื”

ยท ื”ื•ืกื™ืฃ ืžืกืžืš ืขืœ nginx+websockets #371

ยท ืžื ืชื— ื ื›ื•ืŸ ืืช ืจืฉื™ืžืช ื”ืืคืฉืจื•ื™ื•ืช ืฉืœ ื›ืœ ืคืงื•ื“ื” #369

ยท ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ circusd-stats ืงื‘ื•ืข ืžืก' 372

ยท ืชื™ืงืŸ ืืช ื‘ืขื™ื™ืช ื”ื”ืฆืคื” ื‘-Circus-top #378

ยท ืขื•ื“ ื”ืจื‘ื” ื“ื‘ืจื™ื...

0.6 - 2012-12-18
ยท ืฉื ืคืจื•ื˜ื•ืงื•ืœื™ ืชื™ืงื•ืŸ ืขื‘ื•ืจ ืฉืงืขื™ื - #248

ยท ืื™ืŸ ืœื‘ืฆืข ืงื ื” ืžื™ื“ื” ืื•ื˜ื•ืžื˜ื™ ืฉืœ ื’ืจืคื™ื. #240

ยท circusctl: ื”ื•ืกืฃ ืœืขื–ืจื” ืœืคื™ ืคืงื•ื“ื”, ืž-docstrings #217

ยท ื ื•ืกืคื• ื•ื•ื™ ืขื•ื‘ื“ื™ื

ยท ื ื•ืกืคื” ื—ื‘ื™ืœืช ื“ื‘ื™ืืŸ - #227

ยท ื ื•ืกืฃ Redis, HTTP Observer, ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืžืœืื™ื ื•ืชื•ืกืคื™ ืžืฉืื‘ื™ื

ยท ื›ืขืช ืœืชื”ืœื™ื›ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื›ื•ืชืจื•ืช

ยท ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ื ื•ืกืคื”

ยท ื ื•ืกืฃ ืชื”ืœื™ืš/ื’ื™ืœ ืฆื•ืคื” ื‘-webui

ยท ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืžื ื”ืจืช SSH

ยท ื›ืขืช ื‘ืืžืฆืขื•ืช pyzmq.green

ยท ื ื•ืกืฃ ืกืงืจื™ืคื˜ upstart & ืœื›ื” doc

ยท ื ื•ืกืคื• ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ื•ืงื˜ืขื™ื

ยท ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืฉืงืขื™ ื™ื•ื ื™ืงืก

ยท ื”ื•ืกื™ืฃ ืืช respawn ืืคืฉืจื•ืช ืœื”ื—ื–ื™ืง ืฆื•ืคื™ื ื‘ืจื™ืฆื” ืื—ืช

ยท ื›ืขืช ืžืฉืชืžืฉื™ื ื‘ืจืขืœืŸ ื‘ื‘ื“ื™ืงื•ืช

ยท ืืคืฉืจ ื”ื—ืœืคืช ืฉืงืขื™ื ื‘-args

ยท ื ื•ืฉื ื—ื“ืฉ ืœืžืกืžืš

ยท ืืคืฉืจื•ื™ื•ืช ืกื™ื‘ื•ื‘ ื—ื“ืฉื•ืช ืœื–ืจืžื™ื: max_bytes/backup_count

0.5.2 - 2012-07-26
ยท ื›ืขืช ืžืชืงืŸ ืืช ืžื•ื“ื•ืœ ื”ืฉืจืฉื•ืจ ืžื”-stdlib ื›ื“ื™ ืœืžื ื•ืข ื›ืžื” ื‘ืื’ื™ื ืฉืœ Python - #203

ยท ืžืกืš ืขื–ืจื” circusctl ื ืจืื” ื˜ื•ื‘ ื™ื•ืชืจ

ยท ืžืฉืชืžืฉ ื‘-pustil get_nice() ื›ืืฉืจ ื–ืžื™ืŸ (ื ื—ืžื“ ื”ื•ืฆื ืžืฉื™ืžื•ืฉ) - #208

ยท ื”ื•ืกืคืช ืชืžื™ื›ืช max_age - #221

ยท ื”ืชืงืฉืจ ืจืง ืœื”ืื–ื ื”() ื‘ืฉืงืขื™ SOCK_STREAM ืื• SOCK_SEQPACKET

ยท ื•ื“ื ืฉื”ื‘ืงืจ ืžืจื•ืงืŸ ืืช ืจืฉื™ืžืช ื”ืชื•ืกืคื™ื ื‘-update_watchers() - #220

ยท ื”ื•ืกื™ืฃ --log-level ื• --log-output ืœ-circushttpd

ยท ืœืชืงืŸ ืืช ื”ืจื’ ื”ืชื”ืœื™ืš ื‘ืืžืฆืขื•ืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ื‘ืื™ื ื˜ืจื ื˜ - #219

ยท ื›ืขืช circus ืชื•ืื zc.buildout ืœืชืกืจื™ื˜ื™ื.

ยท ื ืงื” ืืช ื”-websocket ื›ืืฉืจ ื”ืœืงื•ื— ืžืชื ืชืง - #225

ยท ืชื™ืงืŸ ืืช ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืขื‘ื•ืจ ื ืงื•ื“ืช ื”ืงืฆื” - #199

ยท ืžืคื•ืฆืœ circushttpd ื‘ืžื•ื“ื•ืœื™ื ืœื•ื’ื™ื™ื

0.5.1 - 2012-07-11
ยท ืชื•ืงืŸ ืžืกืคืจ ืฉื’ื™ืื•ืช ื”ืงืœื“ื” ื‘ืชื™ืขื•ื“

ยท ื ื•ืกืคื” ืืคืฉืจื•ืช ื ื™ืคื•ื™ ื‘ืื’ื™ื

ยท ืืจื•ื– ืืช web-requirements.txt ื›ืจืื•ื™

ยท ื”ื•ืกืฃ ืงื•ื“ ืฉื’ื™ืื” ื‘ื”ื•ื“ืขื•ืช - ืชื™ืงื•ื ื™ื #111

0.5 - 2012-07-06
ยท ื”ื•ืกืคืช ืชืžื™ื›ืช ืฉืงืขื™ื

ยท ื”ื•ืกื™ืฃ ืคืงื•ื“ืช listsocket

ยท ื’ื ืœืฉืงืขื™ื ื™ืฉ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื!

ยท ืชื™ืงื ื• ื”ืจื‘ื” ื‘ืื’ื™ื ืงื˜ื ื™ื

ยท ื”ืกื™ืจ ืืช ื”-wid - ื›ืขืช ืžืฉืชืžืฉ ื‘-Pid ื‘ื›ืœ ืžืงื•ื

ยท ื‘ื“ื™ืงื•ืช ืžื”ื™ืจื•ืช ื™ื•ืชืจ

ยท ืฉื™ื ื” ืืช ืชื—ื‘ื™ืจ ื”ืžืฉืชื ื™ื

ยท ื”ืฉืชืžืฉ ื‘-ioloop ืฉืœ pyzmq ื‘ืžืงื•ืžื•ืช ื ื•ืกืคื™ื

ยท ืžืฉืชืžืฉ ื›ืขืช ื‘-iowait ืขื‘ื•ืจ ื›ืœ ื”ืงืจื™ืื•ืช select()

ยท ืœืคืงื•ื“ื•ืช incr/decr ื™ืฉ ื›ืขืช ืคืจืžื˜ืจ nbprocess

ยท ื”ื•ืกืฃ ืืคืฉืจื•ืช reproduce_env ืœืฆื•ืคื™ื

ยท ื”ื•ืกืฃ ืกื˜ื˜ื•ืก ืœื ืงื™ื™ื ื—ื“ืฉ ืœืชื”ืœื™ื›ื™ื

ยท ื”ื•ืกื™ืฃ ืืช ื”ื’ืœื•ื‘ืœื™ httpd ืืคืฉืจื•ืช ืœื”ืคืขื™ืœ circushttpd ื›ืฆื•ืคื”

0.4 - 2012-06-12
ยท ื ื•ืกืคื” ืžืขืจื›ืช ืคืœืื’ื™ืŸ

ยท ื ื•ืกืคื” ืืคืฉืจื•ืช "ืกื™ื ื’ืœื˜ื•ืŸ" ืœืฆื•ืคื™ื

ยท ื”ื‘ื”ื•ื‘ ืžืกืš ืขืœื™ื•ืŸ ืงืจืงืก ืงื‘ื•ืข

ยท ื”ืกื™ืจื• ืฉืจืฉื•ืจื™ื ืž-circus.stats ืœื˜ื•ื‘ืช ื”ืชืงืฉืจื•ื™ื•ืช ืชืงื•ืคืชื™ื•ืช ืฉืœ zmq

ยท ืฉื™ืคืจ ืืช ื”ืชื™ืขื•ื“

ยท ืœืœืงื•ื— Circus ื™ืฉ ื›ืขืช ืžืžืฉืง API ืฉืœ send_message

ยท ื”ืชื›ื•ื ื” ื”ืžืชื ื•ืคืคืช ื”ื™ื ื›ืขืช ืชื•ืกืฃ

ยท ืœื›ืœ ื›ืœื™ ืฉื•ืจืช ืคืงื•ื“ื” ื™ืฉ โ€‹โ€‹ืืคืฉืจื•ืช --version

ยท ื ื•ืกืฃ ืชื•ืกืฃ statsd (ืฉื•ืœื— ืืช ื”ืื™ืจื•ืขื™ื ืžืงืจืงืก ืœ-statsd)

ยท ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœ ื”ืื™ื ื˜ืจื ื˜ ืžืฉืชืžืฉ ื›ืขืช ื‘-websockets (ื“ืจืš socketio) ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื

ยท ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœ ื”ืื™ื ื˜ืจื ื˜ ืžืฉืชืžืฉ ื›ืขืช ื‘ื”ืคืขืœื•ืช ืขื‘ื•ืจ "ื”ื•ื“ืขื•ืช ื”ื‘ื–ืง" ื‘ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜

0.3.4 - 2012-05-30
ยท ืชื•ืงืŸ ืžืฆื‘ ืžื™ืจื•ืฅ ืฉืžื ืข ืžื”ื‘ืงืจ ืœืงืฆื•ืจ ื‘ืฆื•ืจื” ื ืงื™ื™ื” ืชื”ืœื™ื›ื™ื ืฉื”ืกืชื™ื™ืžื•.

ยท ื›ืขืช ื ื™ืชืŸ ืœืฉืœื•ื˜ ื‘-check_flapping ื‘ืชืฆื•ืจื”. ื•ืžื•ืคืขืœ/ืžื•ืฉื‘ืช
ืœื›ืœ ืฆื•ืคื”.

0.3.3 - 2012-05-29
ยท ืชื™ืงืŸ ืืช ื”ืจื’ืจืกื™ื” ื‘ื˜ื™ืคื•ืœ ื‘-uid

0.3.2 - 2012-05-24
ยท ืžืืคืฉืจ ืžืืคื™ื™ืŸ args ืื•ืคืฆื™ื•ื ืœื™ ืœืคืงื•ื“ื” add_watcher.

ยท ื”ื•ืกื™ืฃ circushttpd, circus-top ื•-circusd-stats

ยท ืžืืคืฉืจ ืœ-Arbiter.add_watcher() ืœื”ื’ื“ื™ืจ ืืช ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช Watcher

ยท ืœื•ื•ื“ื ืฉื”ืžืคื ื™ื ืžื—ื“ืฉ ื ื•ืฆืจื• ืžื—ื“ืฉ ื‘ื”ืคืขืœื” ืžื—ื“ืฉ

0.3.1 - 2012-04-18
ยท ืชื™ืงื•ืŸ: ื•ื“ื ืฉื‘ืจื™ืจื•ืช ื”ืžื—ื“ืœ ืฉืœ ื”ืฆื•ืคื” ืื™ื ืŸ ืขื•ืงืคื•ืช

ยท ื”ื•ืกื™ืฃ ื›ื™ืชืช StdoutStream.

0.3 - 2012-04-18
ยท ื”ื•ืกื™ืฃ ืืช ืชื›ื•ื ืช ื”ืกื˜ืจื™ืžื™ื ื’

ยท ืžืฆื™ื’ ื›ืขืช ื›ื™ืกื•ื™ ื‘ืžืกืžืš ื”ืกืคื™ื ืงืก

ยท ืชื™ืงืŸ ืืช ื”ื“ืจืš ืฉื‘ื” ื”ืชื”ืœื™ื›ื™ื ืžื•ืžืชื™ื (ืœื ืขื•ื“ SIGQUIT)

ยท ื”ืชืฆื•ืจื” ื ืœืงื—ื” ื‘ื—ืฉื‘ื•ืŸ

ยท ืชืžื™ื›ื” ื‘-setproctitle

0.2 - 2012-04-04
ยท ื”ืกื™ืจ ืืช ืœึฐื”ึทืฆึดื™ื’ ืฉืึตื. ื”ื•ื—ืœืฃ ืขืœ ื™ื“ื™ ืฆื•ึนืคึถื”.

ยท ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืชื”ืœื™ืš ื”ื”ื’ื“ืจื” rlimit.

ยท ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ include dirs ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”.

ยท ืชื•ืงืŸ ื›ืžื” ืžืชืืจื™ ืงื‘ืฆื™ื ื“ื•ืœืคื™ื.

ยท ืชื•ืงืŸ ืžื–ื‘ืœื” ืฉืœ ืœื™ื‘ื” ื‘ื ืคื ื•ืฃ

ยท ืฉื™ืคื•ืจื™ ืžืกืžืš

ยท ื•ื“ื ืฉื’ื™ืื•ืช circusd ื›ืจืื•ื™ ื›ืืฉืจ circusd ืื—ืจ ืคื•ืขืœ ืขืœ ืื•ืชื• ืฉืงืข.

ยท get_arbiter ืžืงื‘ืœ ื›ืขืช ืžืกืคืจ ืฆื•ืคื™ื.

ยท ืชื™ืงืŸ ืืช cmd vs args vs executable ื‘ืชื”ืœื™ืš init.

ยท ืงื‘ื•ืข - ื”ืชื—ืœ ื‘-circusctl ืœื”ื•ืกื™ืฃ

0.1 - 2012-03-20
ยท ืฉื™ื—ืจื•ืจ ืจืืฉื•ื ื™

ืื™ืฉ ื“ืคื™ื
ืงืจืงืก ืื™ืฉ ืขืžื•ื“
ืชึทืงืฆึดื™ืจ
circusd [ืืคืฉืจื•ื™ื•ืช] [config]

ืชื™ืื•ืจ
circusd ื”ื•ื ื”ืชื”ืœื™ืš ื”ืขื™ืงืจื™ ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืงืจืงืก. ื–ื” ื“ื•ืื’ ืœื”ืคืขื™ืœ ืืช ื›ืœ
ืชื”ืœื™ื›ื™ื. ื›ืœ ืชื”ืœื™ืš ื”ืžื ื•ื”ืœ ืขืœ ื™ื“ื™ ืงืจืงืก ื”ื•ื ืชื”ืœื™ืš ื™ืœื“ ืฉืœ ืงืจืงืก.

ื˜ื™ืขื•ื ื™ื
config ืงื•ื‘ืฅ ืชืฆื•ืจื”

ืืคืฉืจื•ื™ื•ืช
-ื—, - ืขื–ืจื”
ื”ืฆื’ ืืช ื”ื•ื“ืขืช ื”ืขื–ืจื” ื•ืฆื

--ืจืžืช ื™ื•ืžืŸ ืจืžื”
ืฆื™ื™ืŸ ืืช ืจืžืช ื”ื™ื•ืžืŸ. ืจืžื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื™ื“ืข, ื‘ืื’ื™ื, ืงืจื™ื˜ื™, ืื–ื”ืจื” or ืฉื’ื™ืื”.

--ืคืœื˜ ื™ื•ืžืŸ LOGOUTPUT
ื”ืžื™ืงื•ื ื‘ื• ื™ื™ื›ืชื‘ื• ื”ื™ื•ืžื ื™ื. ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœื›ืชื•ื‘ ืืœ
stdout (ืชื•ื›ืœ ืœืืœืฅ ืื•ืชื• ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช '-' ืœืืคืฉืจื•ืช ื–ื•). ืœื•ืงื— ืฉื ืงื•ื‘ืฅ
ืื—ืจืช.

--logger-config LOGGERCONFIG
ื”ืžื™ืงื•ื ืฉื‘ื• ืงื•ื‘ืฅ Python ืœื•ื’ืจ ืชืฆื•ืจืช INI, JSON ืื• YAML
ื™ื›ื•ืœ ืœื”ืžืฆื. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื–ื” ื›ื“ื™ ืœืขืงื•ืฃ ืืช ืชืฆื•ืจืช ืจื™ืฉื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืขื‘ื•ืจ
ื”ื‘ื•ืจืจ.

--ื“ื™ืžื•ืŸ
ื”ืชื—ืœ ืงืจืงืก ื‘ืจืงืข.

--pidfile PIDFILE
ื”ืžื™ืงื•ื ืฉืœ ืงื•ื‘ืฅ ื”-PID.

--ื’ึดืจึฐืกึธื”
ืžืฆื™ื’ ืืช ื’ืจืกืช ื”ืงืจืงืก ื•ื™ืฆื™ืื•ืช.

ืœึดืจึฐืื•ึนืช ื’ื
ืงืจืงืก (1), circusctl (1), ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก (1), ืงืจืงืก-ืคืœืื’ื™ืŸ (1), ื˜ื•ืค ืงืจืงืก (1).

ื”ืชื™ืขื•ื“ ื”ืžืœื ื–ืžื™ืŸ ื‘ื›ืชื•ื‘ืช http://circus.readthedocs.org

circusctl ืื™ืฉ ืขืžื•ื“
ืชึทืงืฆึดื™ืจ
ื”ืคืงื•ื“ื” circusctl [ืืคืฉืจื•ื™ื•ืช] [args]

ืชื™ืื•ืจ
circusctl ื”ื•ื ื”ืงืฆื” ื”ืงื“ืžื™ ืœืฉืœื™ื˜ื” ื‘ื“ืžื•ืŸ ื”ืงืจืงืก. ื–ื” ื ื•ืขื“ ืœืขื–ื•ืจ ืœ
ื”ืžื ื”ืœ ืฉื•ืœื˜ ื‘ืชืคืงื•ื“ ื”-Circud ืงืจืงืก ื“ืžื•ืŸ.

ืคืงื•ื“ื•ืช
ืœื”ื•ืกื™ืฃ ื”ื•ืกืฃ ืฆื•ืคื”

decr ื”ืงื˜ื ืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื”

dstats ืงื‘ืœื• ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืฉืœ ืงืจืงืก

ืœืงื‘ืœ ืงื‘ืœ ืืช ื”ืขืจืš ืฉืœ ืืคืฉืจื•ื™ื•ืช ืฆื•ืคื” ืกืคืฆื™ืคื™ื•ืช

ืื•ืคืฆื™ื•ืช ื’ืœื•ื‘ืœื™ื•ืช
ืงื‘ืœ ืืช ืืคืฉืจื•ื™ื•ืช ื”ื‘ื•ืจืจ

ืชื•ืกืคืช ื”ื’ื“ืœ ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื”

ืคึผึดื™ืชื•ึนืŸ
ืฆื•ืจ ืžืขื˜ืคืช ืœืชื”ืœื™ืš ื”ืงืจืงืก

ืจืฉื™ืžื” ืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ืฆื•ืคื™ื ืื• ืชื”ืœื™ื›ื™ื ื‘ืฆื•ืคื”

ืœื”ืงืฉื™ื‘ ื”ื™ืจืฉื ืœืื™ืจื•ืข ืฆื•ืคื”

ืฉืงืขื™ ืจืฉื™ืžื•ืช
ืงื‘ืœื• ืืช ืจืฉื™ืžืช ื”ืฉืงืขื™ื

ืžืกืคืจ ืชื”ืœื™ื›ื™ื
ืงื‘ืœ ืืช ืžืกืคืจ ื”ืชื”ืœื™ื›ื™ื

ืฉื•ืžืจื™ ืžืกืคืจ
ืงื‘ืœ ืืช ืžืกืคืจ ื”ืฆื•ืคื™ื

ืืคืฉืจื•ื™ื•ืช
ืงื‘ืœ ืืช ื”ืขืจืš ืฉืœ ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ืขื‘ื•ืจ ืฆื•ืคื”

ืœื”ืคืกื™ืง ืขื–ื•ื‘ ืืช ื”ื‘ื•ืจืจ ืžื™ื“

ืœื˜ืขื•ืŸ ืžื—ื“ืฉ ื˜ืขืŸ ืžื—ื“ืฉ ืืช ื”ื‘ื•ืจืจ ืื• ืฆื•ืคื”

ื˜ืขืŸ ืžื—ื“ืฉ ืืช ื”ืชืฆื•ืจื”
ื˜ืขืŸ ืžื—ื“ืฉ ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”

ื”ืคืขืœื” ืžื—ื“ืฉ
ื”ืคืขืœ ืžื—ื“ืฉ ืืช ื”ื‘ื•ืจืจ ืื• ืฆื•ืคื”

rm ื”ืกืจ ืฆื•ืคื”

ืกื˜ ื”ื’ื“ืจ ืืคืฉืจื•ืช ืฆื•ืคื”

ืื•ึนืช ืฉืœื— ืื•ืช

ื”ืชื—ืœื” ื”ืชื—ืœ ืืช ื”ื‘ื•ืจืจ ืื• ืฆื•ืคื”

ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงื‘ืœ ืžื™ื“ืข ืขืœ ืชื”ืœื™ืš

ืžืฆื‘ ืงื‘ืœ ืกื˜ื˜ื•ืก ืฉืœ ืฆื•ืคื” ืื• ื›ืœ ื”ืฆื•ืคื™ื

ืœื”ืคืกื™ืง ืฉื•ืžืจื™ ืขืฆื•ืจ

ืืคืฉืจื•ื™ื•ืช
--ื ืงื•ื“ืช ืงืฆื” ืกื™ื•ื
ื ืงื•ื“ืช ืงืฆื” ื—ื™ื‘ื•ืจ

-ื—, - ืขื–ืจื”
ื”ืฆื’ ืืช ื”ื•ื“ืขืช ื”ืขื–ืจื” ื•ืฆื

--json ืคืœื˜ ืœ-JSON

--ืœึฐื™ึทืคึผื•ึนืช
ืœื™ื™ืคื•ืช ืคืœื˜

--ืฉืฉ SSH
ืฉืจืช SSH ื‘ืคื•ืจืžื˜ user@host:port

--ssh_keyfile SSH_KEYFILE
ื ืชื™ื‘ ืœืงื•ื‘ืฅ ื”ืžืคืชื— ื›ื“ื™ ืœืืฉืจ ืืช ื”ืžืฉืชืžืฉ

--ืคืกืง ื–ืžืŸ ืคืกืง ื–ืžืŸ
ืคืกืง ื–ืžืŸ ืœื—ื™ื‘ื•ืจ

--ื’ึดืจึฐืกึธื”
ืžืฆื™ื’ ืืช ื’ืจืกืช ื”ืงืจืงืก ื•ื™ืฆื™ืื•ืช.

ืœึดืจึฐืื•ึนืช ื’ื
ืงืจืงืก (1), ืงืจืงืก (1), ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก (1), ืงืจืงืก-ืคืœืื’ื™ืŸ (1), ื˜ื•ืค ืงืจืงืก (1).

ื”ืชื™ืขื•ื“ ื”ืžืœื ื–ืžื™ืŸ ื‘ื›ืชื•ื‘ืช http://circus.readthedocs.org

ืงืจืงืก-ืคืœืื’ื™ืŸ ืื™ืฉ ืขืžื•ื“
ืชึทืงืฆึดื™ืจ
circus-plugin [ืืคืฉืจื•ื™ื•ืช] [plugin]

ืชื™ืื•ืจ
circus-plugin ืžืืคืฉืจ ืœื”ืคืขื™ืœ ืชื•ืกืฃ ืžื“ืžื•ืŸ Circus ืคื•ืขืœ.

ื˜ื™ืขื•ื ื™ื
ื—ื™ื‘ื•ืจ ืฉื ืžืœื ืฉืœ ืžื—ืœืงืช ื”ืคืœืื’ื™ืŸ.

ืืคืฉืจื•ื™ื•ืช
--ื ืงื•ื“ืช ืงืฆื” ืกื™ื•ื
ื ืงื•ื“ืช ืงืฆื” ื—ื™ื‘ื•ืจ.

--pubsub PUBSUB
ืฉืงืข ื”ืคืื‘/ืกืื‘ circusd ZeroMQ ืœื”ืชื—ื‘ืจ ืืœื™ื•.

--config ื”ืชืฆื•ืจื”
ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ ื”ืคืœืื’ื™ืŸ.

--ืขื™ื›ื•ื‘ ื‘ื“ื™ืงื” CHECK_DELAY
ื‘ื“ื•ืง ืขื™ื›ื•ื‘.

--ืจืžืช ื™ื•ืžืŸ ืจืžื”
ืฆื™ื™ืŸ ืืช ืจืžืช ื”ื™ื•ืžืŸ. ืจืžื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื™ื“ืข, ื‘ืื’ื™ื, ืงืจื™ื˜ื™, ืื–ื”ืจื” or ืฉื’ื™ืื”.

--ืคืœื˜ ื™ื•ืžืŸ LOGOUTPUT
ื”ืžื™ืงื•ื ื‘ื• ื™ื™ื›ืชื‘ื• ื”ื™ื•ืžื ื™ื. ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœื›ืชื•ื‘ ืืœ
stdout (ืชื•ื›ืœ ืœืืœืฅ ืื•ืชื• ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช '-' ืœืืคืฉืจื•ืช ื–ื•). ืœื•ืงื— ืฉื ืงื•ื‘ืฅ
ืื—ืจืช.

--ืฉืฉ SSH
ืฉืจืช SSH ื‘ืคื•ืจืžื˜ user@host:port.

-ื—, - ืขื–ืจื”
ื”ืฆื’ ืืช ื”ื•ื“ืขืช ื”ืขื–ืจื” ื•ืฆื.

--ื’ึดืจึฐืกึธื”
ืžืฆื™ื’ ืืช ื’ืจืกืช ื”ืงืจืงืก ื•ื™ืฆื™ืื•ืช.

ืœึดืจึฐืื•ึนืช ื’ื
ืงืจืงืก (1), ืงืจืงืก (1), circusctl (1), ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก (1), ื˜ื•ืค ืงืจืงืก (1).

ื”ืชื™ืขื•ื“ ื”ืžืœื ื–ืžื™ืŸ ื‘ื›ืชื•ื‘ืช http://circus.readthedocs.org

ื˜ื•ืค ืงืจืงืก ืื™ืฉ ืขืžื•ื“
ืชึทืงืฆึดื™ืจ
ืจืืฉ ืงืจืงืก [ืืคืฉืจื•ื™ื•ืช]

ืชื™ืื•ืจ
ืงืจืงืก-ื˜ื•ืค ื”ื•ื ื ื—ืœืง ืขืœื™ื•ืŸืคืงื•ื“ื” -like ืœื”ืฆื’ืช ื“ืžื•ืŸ ื”ืงืจืงืก ื•ื”ืชื”ืœื™ื›ื™ื ื”ืžื ื•ื”ืœื™ื ืขืœ ื™ื“ื™
ืงืจืงืก.

ืืคืฉืจื•ื™ื•ืช
--ื ืงื•ื“ืช ืงืฆื” ืกื™ื•ื
ื ืงื•ื“ืช ืงืฆื” ื—ื™ื‘ื•ืจ.

--ืฉืฉ SSH
ืฉืจืช SSH ื‘ืคื•ืจืžื˜ user@host:port.

--ื–ืžืŸ ืงืฆื•ื‘ ืœืชื”ืœื™ืš PROCESS_TIMEOUT
ืœืื—ืจ ืขื™ื›ื•ื‘ ื–ื” ืฉืœ ื—ื•ืกืจ ืคืขื™ืœื•ืช, ืชื”ืœื™ืš ื™ื•ืกืจ.

-ื—, - ืขื–ืจื”
ื”ืฆื’ ืืช ื”ื•ื“ืขืช ื”ืขื–ืจื” ื•ืฆื.

--ื’ึดืจึฐืกึธื”
ืžืฆื™ื’ ืืช ื’ืจืกืช ื”ืงืจืงืก ื•ื™ืฆื™ืื•ืช.

ืœึดืจึฐืื•ึนืช ื’ื
ืงืจืงืก (1), circusctl (1), ืงืจืงืก (1), ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก (1), ืงืจืงืก-ืคืœืื’ื™ืŸ (1).

ื”ืชื™ืขื•ื“ ื”ืžืœื ื–ืžื™ืŸ ื‘ื›ืชื•ื‘ืช http://circus.readthedocs.org

ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืงืจืงืก ืื™ืฉ ืขืžื•ื“
ืชึทืงืฆึดื™ืจ
circusd-stats [ืืคืฉืจื•ื™ื•ืช]

ืชื™ืื•ืจ
circusd-stats ืžืคืขื™ืœ ืืช ืื’ืจื’ื˜ื•ืจ ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขื‘ื•ืจ Circus.

ืืคืฉืจื•ื™ื•ืช
--ื ืงื•ื“ืช ืงืฆื” ืกื™ื•ื
ื ืงื•ื“ืช ืงืฆื” ื—ื™ื‘ื•ืจ.

--pubsub PUBSUB
ืฉืงืข ื”ืคืื‘/ืกืื‘ circusd ZeroMQ ืœื”ืชื—ื‘ืจ ืืœื™ื•.

--statspoint STATSPOINT
ืฉืงืข ื”ืคืื‘/ืžืฉื ื” ZeroMQ ืœืฉืœื•ื— ืืœื™ื• ื ืชื•ื ื™ื.

--ืจืžืช ื™ื•ืžืŸ ืจืžื”
ืฆื™ื™ืŸ ืืช ืจืžืช ื”ื™ื•ืžืŸ. ืจืžื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื™ื“ืข, ื‘ืื’ื™ื, ืงืจื™ื˜ื™, ืื–ื”ืจื” or ืฉื’ื™ืื”.

--ืคืœื˜ ื™ื•ืžืŸ LOGOUTPUT
ื”ืžื™ืงื•ื ื‘ื• ื™ื™ื›ืชื‘ื• ื”ื™ื•ืžื ื™ื. ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ืœื›ืชื•ื‘ ืืœ
stdout (ืชื•ื›ืœ ืœืืœืฅ ืื•ืชื• ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช '-' ืœืืคืฉืจื•ืช ื–ื•). ืœื•ืงื— ืฉื ืงื•ื‘ืฅ
ืื—ืจืช.

--ืฉืฉ SSH
ืฉืจืช SSH ื‘ืคื•ืจืžื˜ user@host:port.

-ื—, - ืขื–ืจื”
ื”ืฆื’ ืืช ื”ื•ื“ืขืช ื”ืขื–ืจื” ื•ืฆื.

--ื’ึดืจึฐืกึธื”
ืžืฆื™ื’ ืืช ื’ืจืกืช ื”ืงืจืงืก ื•ื™ืฆื™ืื•ืช.

ืœึดืจึฐืื•ึนืช ื’ื
ืงืจืงืก (1), ืงืจืงืก (1), circusctl (1), ืงืจืงืก-ืคืœืื’ื™ืŸ (1), ื˜ื•ืค ืงืจืงืก (1).

ื”ืชื™ืขื•ื“ ื”ืžืœื ื–ืžื™ืŸ ื‘ื›ืชื•ื‘ืช http://circus.readthedocs.org

ืžื™ืœื•ืŸ ืžื•ื ื—ื™ื: ืกืคืฆื™ืคื™ ืœืงืจืงืก ืžื•ื ื—ื™ื
ืคื•ืกืง
ื”ืฉืžื™ื™ื ืคื•ืกืง ืื—ืจืื™ ืขืœ ื ื™ื”ื•ืœ ื›ืœ ื”ืฆื•ืคื™ื ื‘ืงืจืงืก, ืœื”ื‘ื˜ื™ื—
ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืคื•ืขืœื™ื ื›ื”ืœื›ื”.

ื‘ืงืจ
A ื‘ืงืจ ืžื›ื™ืœ ืืช ืžื›ืœื•ืœ ื”ืคืขื•ืœื•ืช ืฉื ื™ืชืŸ ืœื‘ืฆืข ืขืœ ื”ื‘ื•ืจืจ.

ืžืชื ืคื ืฃ
ื”ืฉืžื™ื™ื ืžืชื ืคื ืฃ ื–ื™ื”ื•ื™ ื ืจืฉื ืœืื™ืจื•ืขื™ื ื•ืžื–ื”ื” ืžืชื™ ืชื”ืœื™ื›ื™ื ืžืกื•ื™ืžื™ื
ื›ืœ ื”ื–ืžืŸ ืžื—ื“ืฉ.

ืคืื‘/ืชืช
ืœืงืจืงืก ื™ืฉ ื pubsub ืฉืžืงื‘ืœ ืื™ืจื•ืขื™ื ืžื”ืฆื•ืคื™ื ื•ืฉื•ืœื— ืื•ืชื ืืœื™ื”ื
ื›ืœ ื”ืžื ื•ื™ื™ื.

ืžืจื—ื•ืง ื‘ืงืจ
ื”ืฉืžื™ื™ื ืžืจื—ื•ืง ื‘ืงืจ ืžืืคืฉืจ ืœืš ืœืชืงืฉืจ ืขื ื”ื‘ืงืจ ื‘ืืžืฆืขื•ืช ZMQ ืœ
ืœืฉืœื•ื˜ ื‘ืงืจืงืก.

ืฆื•ึนืคึถื”, ืฆื•ืคื™ื
A ืฆื•ึนืคึถื” ื”ื™ื ื”ืชื•ื›ื ื™ืช ืฉืืชื” ืื•ืžืจ ืœืงืจืงืก ืœื”ืคืขื™ืœ. ืžื•ืคืข ื™ื—ื™ื“ ืฉืœ Circus ื™ื›ื•ืœ ืœืคืขื•ืœ
ืฆื•ืคื” ืื—ื“ ืื• ื™ื•ืชืจ.

ืขื•ึนื‘ึตื“, ืขื•ื‘ื“ื™ื, ืชึทื”ึฒืœึดื™ืš, ืชื”ืœื™ื›ื™ื
A ืชื”ืœื™ืš ื”ื•ื ืžื•ืคืข ืขืฆืžืื™ ืฉืœ ืชื”ืœื™ืš ืžืขืจื›ืช ื”ืคืขืœื” ืฉืœ ื”ืชื•ื›ื ื™ืช ืฉืœืš. ืฆื•ืคื” ื™ื—ื™ื“
ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืชื”ืœื™ืš ืื—ื“ ืื• ื™ื•ืชืจ. ืื ื—ื ื• ืงื•ืจืื™ื ืœื”ื ื’ื ืขื•ื‘ื“ื™ื.

ื–ื›ื•ื™ื•ืช ื™ื•ืฆืจื™ื
Circus ื”ื•ืงื ืขืœ ื™ื“ื™ Tarek Ziade ื•ื”ื•ื ืžื•ืจืฉื” ืชื—ืช APLv2

ื‘ื ื•ืื” ืฆ'ืกื ื• ื”ื™ื” ืชื•ืจื ืžื•ืงื“ื ื•ืขืฉื” ื“ื‘ืจื™ื ืจื‘ื™ื, ื›ืžื• ืจื•ื‘ ื”ืคืขื•ืœื•ืช
circus.commands ืขื‘ื•ื“ื”.

ืจื™ืฉื™ื•ืŸ
ื–ื›ื•ื™ื•ืช ื™ื•ืฆืจื™ื 2012 - ืงืจืŸ ืžื•ื–ื™ืœื”
ื–ื›ื•ื™ื•ืช ื™ื•ืฆืจื™ื 2012 - ื‘ื ื•ืื” ืฆ'ืกื ื•

ืžื•ืจืฉื” ื‘ืจื™ืฉื™ื•ืŸ ืืคืืฆ'ื™, ื’ืจืกื” 2.0 ("ื”ืจื™ืฉื™ื•ืŸ");
ืื™ื ืš ืจืฉืื™ ืœื”ืฉืชืžืฉ ื‘ืงื•ื‘ืฅ ื–ื” ืืœื ืจืง ื‘ื”ืชืื ืœืจื™ืฉื™ื•ืŸ.
ืืชื” ื™ื›ื•ืœ ืœื”ืฉื™ื’ ืขื•ืชืง ืฉืœ ื”ืจื™ืฉื™ื•ืŸ ื‘ื›ืชื•ื‘ืช

http://www.apache.org/licenses/LICENSE-2.0

ืืœื ืื ื›ืŸ ื ื“ืจืฉ ืขืœ ืคื™ ื”ื—ื•ืง ื”ื—ืœ ืื• ืžื•ืกื›ื ื‘ื›ืชื‘, ืชื•ื›ื ื”
ื”ืžื•ืคืฅ ืชื—ืช ื”ืจื™ืฉื™ื•ืŸ ืžื•ืคืฅ ืขืœ ื‘ืกื™ืก "ื›ืคื™ ืฉื”ื•ื",
ืœืœื ืื—ืจื™ื•ืช ืื• ืชื ืื™ื ืžื›ืœ ืกื•ื’ ืฉื”ื•ื, ืžืคื•ืจืฉ ืื• ืžืฉืชืžืข.
ืขื™ื™ืŸ ื‘ืจื™ืฉื™ื•ืŸ ืœืงื‘ืœืช ื”ืฉืคื” ื”ืกืคืฆื™ืคื™ืช ื”ืžืกื“ื™ืจื” ืืช ื”ื”ืจืฉืื•ืช
ืžื’ื‘ืœื•ืช ืชื—ืช ื”ืจื™ืฉื™ื•ืŸ.

ืชื•ืจื
ืจืื” ืืช ื”ืจืฉื™ืžื” ื”ืžืœืื” ื‘ https://github.com/circus-tent/circus/blob/master/CONTRIBUTORS.txt

ื”ืฉืชืžืฉ ื‘ืงืจืงืก ื‘ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ืฉื™ืจื•ืชื™ onworks.net


ืฉืจืชื™ื ื•ืชื—ื ื•ืช ืขื‘ื•ื“ื” ื‘ื—ื™ื ื

ื”ื•ืจื“ ืืคืœื™ืงืฆื™ื•ืช Windows & Linux

  • 1
    turkdevops
    turkdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Team
    Taraf?ndan desteklenmektedir..
    ืชื›ื•ื ื•ืช: https://github.com/turkdevopshttps://turkdevops.g...
    ื”ื•ืจื“ ืืช turkdevops
  • 2
    asammdf
    asammdf
    *asammdf* ื”ื•ื ืžื ืชื— ืคื™ื™ืชื•ืŸ ืžื”ื™ืจ ื•
    ืขื•ืจืš ืขื‘ื•ืจ ASAM (ืื™ื’ื•ื“ ืœ
    ืกื˜ื ื“ืจื˜ื™ื–ืฆื™ื” ืฉืœ ืื•ื˜ื•ืžืฆื™ื” ื•
    ืžืขืจื›ื•ืช ืžื“ื™ื“ื”) MDF / MF4
    (ืคื•ืจืžื˜ ื ืชื•ื ื™ ืžื“ื™ื“ื”...
    ื”ื•ืจื“ asammdf
  • 3
    LAME (Lame Aint an MP3 Encoder)
    LAME (Lame Aint an MP3 Encoder)
    LAME ื”ื•ื ื›ืœื™ ื—ื™ื ื•ื›ื™ ืœืฉื™ืžื•ืฉ
    ืœืœื™ืžื•ื“ ืขืœ ืงื™ื“ื•ื“ MP3. ื”
    ื”ืžื˜ืจื” ืฉืœ ืคืจื•ื™ืงื˜ LAME ื”ื™ื ืœืฉืคืจ
    ื”ืืงื•ืกื˜ื™ืงื” ื”ืคืกื™ื›ื•ื˜ื™ืช, ื”ืื™ื›ื•ืช ื•ื”ืžื”ื™ืจื•ืช
    ืฉืœ MP...
    ื”ื•ืจื“ ืืช LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    ืงื‘ื•ืฆื” ืฉืœ ืžื•ื“ื•ืœื™ ื”ืจื—ื‘ื” ืฉืœ Python ืฉ
    ืœืขื˜ื•ืฃ ืืช ืฉื™ืขื•ืจื™ GUI ื—ื•ืฆื™ ื”ืคืœื˜ืคื•ืจืžื•ืช
    wxWidgets.. ืงื”ืœ: ืžืคืชื—ื™ื. ืžึดืฉืืชึทืžึตืฉื
    ืžืžืฉืง: X Windows System (X11), Win32 ...
    ื”ื•ืจื“ ืืช wxPython
  • 5
    packfilemanager
    packfilemanager
    ื–ื”ื• ืžื ื”ืœ ื”ืงื‘ืฆื™ื ืฉืœ ื—ื‘ื™ืœืช Total War
    ืคืจื•ื™ืงื˜, ื”ื—ืœ ืžื’ืจืกื” 1.7. ื
    ื”ื™ื›ืจื•ืช ืงืฆืจื” ืขื Warscape
    ืžื•ื“ื™ื ื’:...
    ื”ื•ืจื“ ืืช packfilemanager
  • 6
    IPerf2
    IPerf2
    ื›ืœื™ ืชืขื‘ื•ืจืช ืจืฉืช ืœืžื“ื™ื“ื”
    ื‘ื™ืฆื•ืขื™ TCP ื•-UDP ืขื ืžื“ื“ื™ื
    ืกื‘ื™ื‘ ืชืคื•ืงื” ื•ื”ืฉื”ื™ื™ื” ื›ืื—ื“. ื”
    ื”ื™ืขื“ื™ื ื›ื•ืœืœื™ื ืฉืžื™ืจื” ืขืœ ืคืขื™ืœื•ืช ืคืขื™ืœื”
    ืงื•ื“ iperf...
    ื”ื•ืจื“ ืืช IPerf2
  • ืขื•ื“ ยป

ืคืงื•ื“ื•ืช ืœื™ื ื•ืงืก

Ad