InggrisPerancisSpanyol

favorit OnWorks

sirkus - Online di Awan

Jalankan sirkus di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah sirkus perintah yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


sirkus - Dokumentasi Sirkus [gambar]

Circus adalah program Python yang dapat digunakan untuk memantau dan mengontrol proses dan soket.

Sirkus dapat digerakkan melalui antarmuka baris perintah, antarmuka web, atau secara terprogram
melalui API python-nya.

Untuk menginstalnya dan mencoba fitur-fiturnya, lihat contohnya, atau baca sisa halaman ini
untuk pengenalan cepat.

RUNNING A SIRKUS DAEMON


Circus menyediakan panggilan skrip baris perintah sirkus yang dapat digunakan untuk mengelola proses
terorganisir dalam satu atau lebih pengamat.

Alat baris perintah Circus dapat dikonfigurasi menggunakan file konfigurasi gaya ini.

Berikut ini contoh yang sangat minim:

[pengamat: program]
cmd = python program saya.py
numproses = 5

[pengamat:program lain]
cmd = program_lain
numproses = 2

File tersebut kemudian diteruskan ke sirkus:

$ contoh sirkus.ini

Selain proses, Circus juga dapat mengikat soket. Karena setiap proses yang dikelola oleh Circus adalah
anak dari daemon Circus utama, itu berarti program apa pun yang dikendalikan oleh Circus dapat
menggunakan soket tersebut.

Menjalankan soket semudah menambahkan stopkontak bagian dalam file konfigurasi:

[soket: mysocket]
tuan rumah = localhost
pelabuhan = 8080

Untuk mempelajari lebih lanjut tentang soket, lihat soket.

Untuk memahami mengapa ini adalah fitur pembunuh, bacalah soket sirkus.

PENGENDALIAN SIRKUS


Circus menyediakan dua alat baris perintah untuk mengelola daemon Anda yang sedang berjalan:

· sirkus, konsol manajemen yang dapat Anda gunakan untuk melakukan tindakan seperti menambahkan atau
menghapus pekerja

· puncak sirkus, konsol top-like yang dapat Anda gunakan untuk menampilkan penggunaan memori dan cpu perangkat Anda
menjalankan Sirkus.

Untuk mempelajari lebih lanjut tentang ini, lihat cli

Circus juga menawarkan dasbor web yang dapat terhubung ke daemon Circus yang sedang berjalan dan memungkinkan Anda
memantau dan berinteraksi dengannya.

Untuk mempelajari lebih lanjut tentang fitur ini, lihat circushttpd

Apa sekarang ?
Jika Anda seorang pengembang dan ingin memanfaatkan Circus dalam proyek Anda sendiri, tulis plugin atau
kait, pergi ke fordevs.

Jika Anda seorang ops dan ingin mengelola proses Anda menggunakan Circus, buka forops.

Kontribusi dan Umpan Balik
Lebih lanjut tentang kontribusi: kontribusi.

Link yang Berguna:

· Ada milis untuk umpan balik atau pertanyaan:
http://tech.groups.yahoo.com/group/circus-dev/

· Repositori dan pelacak masalah ada di GitHub : https://github.com/circus-tent/circus

· Bergabunglah dengan kami di IRC: Freenode, saluran #tenda sirkus

Dokumentasi indeks
Instalasi Sirkus
Circus adalah paket Python yang diterbitkan di PyPI - Indeks Paket Python.

Cara paling sederhana untuk menginstalnya adalah dengan menggunakan pip, alat untuk menginstal dan mengelola Python
paket:

$ pip menginstal sirkus

Atau unduh arsip on PyPI, ekstrak dan instal secara manual dengan:

$ python setup.py instal

Jika Anda ingin mencoba Circus, lihat contohnya.

Jika Anda menggunakan debian atau distribusi berbasis debian, Anda juga dapat menggunakan ppa untuk
instal sirkus, ada di https://launchpad.net/~roman-imankulov/+archive/circus

zc.buildout
Kami menyediakan zc.buildout konfigurasi, Anda dapat menggunakannya hanya dengan menjalankan bootstrap
skrip, lalu panggil buildout:

$python bootstrap.py
$ bin/pembuatan

More on Persyaratan
Sirkus bekerja dengan:

· Python 2.6, 2.7, 3.2 atau 3.3

·

nolmq >= 2.1.10

· Versi zeromq yang didukung pada akhirnya ditentukan oleh versi apa
pyzmq diinstal oleh pip selama instalasi sirkus.

· Rilis mereka saat ini mendukung versi 2.x (terbatas), 3.x, dan 4.x ZeroMQ.

· Note: Jika Anda menggunakan PyPy alih-alih CPython, pastikan untuk membacanya
dokumen instalasi karena dukungan versi ZeroMQ tidak sama di PyPy.

Saat Anda menginstal sirkus, versi terbaru dari dependensi Python akan ditarik keluar
untuk Anda.

Anda juga dapat menginstalnya secara manual menggunakan file pip-requirements.txt yang kami sediakan:

$ pip install -r pip-persyaratan.txt

Jika Anda ingin menjalankan konsol Web, Anda harus menginstal sirkus-web:

$ pip instal circus-web

Tutorial
Selangkah demi selangkah tutorial
contoh direktori di repositori Circus berisi banyak contoh untuk mendapatkan Anda
dimulai, tapi inilah tutorial lengkap yang memberi Anda gambaran umum tentang fitur-fiturnya.

Kami akan mengawasi aplikasi WSGI.

Instalasi
Circus diuji pada Mac OS X dan Linux dengan Python 2.6, 2.7, 3.2 dan 3.3 terbaru. Ke
menjalankan Circus penuh, Anda juga perlu libzmq, bebas & virtualenv.

Pada sistem berbasis Debian:

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

Buat virtualenv dan instal sirkus, sirkus-web dan kaus kaki di dalamnya

$ virtualenv /tmp/sirkus
$cd /tmp/sirkus
$ bin/pip menginstal sirkus
$ bin/pip instal circus-web
$ bin/pip menginstal chaussette

Setelah ini selesai, Anda akan menemukan banyak perintah di direktori bin lokal.

penggunaan
Kaus kaki hadir dengan aplikasi Hello world default, coba jalankan:

$ bin/chaussette

Anda harus dapat mengunjungi http://localhost: 8080 dan melihat halo dunia.

Hentikan Chaussette dan tambahkan file circus.ini di direktori yang berisi:

[sirkus]
statistik = 1
httpd = 1

[pengamat: webapp]
cmd = bin/chaussette --fd $(circus.sockets.web)
numproses = 3
use_sockets = Benar

[soket: web]
tuan rumah = 127.0.0.1
pelabuhan = 9999

File konfigurasi ini memberi tahu Circus untuk mengikat soket pada port 9999 dan menjalankan 3 pekerja chaussettes
menentangnya. Ini juga mengaktifkan dasbor web Circus dan modul statistik.

Simpan & jalankan menggunakan sirkus:

$ bin/circusd --daemon circus.ini

Kunjungi sekarang http://127.0.0.1: 9999, Anda akan melihat aplikasi hello world. Bedanya sekarang adalah
bahwa soket dikelola oleh Circus dan ada beberapa pekerja web yang menerima
koneksi melawannya.

CATATAN:
Penyeimbangan beban dioperasikan oleh sistem operasi sehingga Anda mendapatkan kecepatan yang sama
seperti server web pre-fork lainnya seperti Apache atau NGinx. Sirkus tidak mengganggu
data yang dilalui.

Anda juga bisa berkunjung http://localhost: 8080 / dan nikmati dasbor web Circus.

Interaksi
Mari kita gunakan shell circusctl saat sistem sedang berjalan:

$bin/sirkusctl
sirkus 0.7.1
circusd-stats: aktif
sirkushttpd: aktif
aplikasi web: aktif
(sirkus)

Anda masuk ke shell interaktif. Jenis membantu untuk mendapatkan semua perintah:

(circusctl) bantuan

Perintah terdokumentasi (ketik bantuan ):
========================
tambahkan dapatkan daftar numproses berhenti rm mulai berhenti
decr globaloptions dengarkan numwatchers memuat ulang set statistik
dstats termasuk opsi daftar soket restart status sinyal

Perintah tidak berdokumen:
======================
bantuan EOF

Mari kita coba hal-hal dasar. Mari daftar proses pekerja web dan tambahkan yang baru:

(circusctl) daftar aplikasi web
13712,13713,13714
(circusctl) termasuk aplikasi web
4
(circusctl) daftar aplikasi web
13712,13713,13714,13973

Selamat, Anda telah berinteraksi dengan Circus Anda! Keluar dari shell dengan Ctrl + D dan sekarang jalankan
puncak sirkus:

$ bin/puncak sirkus

Ini adalah perintah top-like untuk melihat semua memori proses Anda dan penggunaan CPU secara real time.

Tekan Ctrl+C dan sekarang mari kita keluar dari Circus sepenuhnya melalui circus-ctl:

$ bin/circusctl berhenti
ok

Selanjutnya tangga
Anda dapat memasang aplikasi WSGI Anda sendiri alih-alih dunia halo Chaussette hanya dengan
menunjuk aplikasi yang dapat dipanggil.

Chaussette juga dilengkapi dengan banyak backend seperti Gevent atau Meinheld.

Baca https://chaussette.readthedocs.org/ untuk semua opsi.

Mengapa harus I menggunakan Sirkus sebagai gantinya of X ?
1. Sirkus disederhanakan Tujuan jaringan tumpukan proses pengelolaan

Circus tahu bagaimana mengelola proses dan soket, jadi Anda tidak perlu mendelegasikan web
manajemen pekerja ke server WGSI.

Lihat mengapacircussockets

2. Sirkus menyediakan pub/sub dan pemilihan pemberitahuan melalui NolMQ
Circus memiliki pub/sub saluran tempat Anda dapat berlangganan. Saluran ini menerima semua acara
terjadi di Sirkus. Misalnya, Anda dapat diberi tahu ketika suatu proses mengepak, atau
buat klien yang memicu peringatan ketika beberapa proses memakan semua CPU atau
RAM

Acara ini dikirim melalui saluran ZeroMQ, yang membuatnya berbeda dari stdin
stream Pengawas menggunakan:

· Circus mengirimkan acara dengan cara api-dan-lupa, jadi tidak perlu mengulang secara manual
melalui semua pendengar dan mempertahankan keadaan mereka.

· Pelanggan dapat ditemukan di host jarak jauh.

Circus juga menyediakan cara untuk mendapatkan pembaruan status melalui jajak pendapat satu kali di req/rep
saluran. Ini berarti Anda bisa mendapatkan informasi Anda tanpa harus berlangganan
sungai kecil. Perintah cli yang disediakan oleh Circus menggunakan saluran ini.

Lihat contoh.

3. Sirkus is (Pyton) pembangun ramah
Sementara Circus dapat digerakkan sepenuhnya oleh file konfigurasi dan sirkus / sirkus
perintah, mudah untuk menggunakan kembali semua atau sebagian dari sistem untuk membangun kustom Anda sendiri
pengamat proses dengan Python.

Setiap lapisan sistem diisolasi, sehingga Anda dapat menggunakan kembali secara mandiri:

· pembungkus proses (Proses)

· manajer proses (Pengintai)

· manajer global yang menjalankan beberapa manajer proses (Wasit)

· dan seterusnya…

4. Sirkus sisik
Salah satu kasus penggunaan Circus adalah mengelola ribuan proses tanpa menambahkan
overhead -- kami berdedikasi untuk berfokus pada hal ini.

Kedatangan dari Pengawas
Supervisor adalah solusi yang sangat populer di dunia Python dan kami sering ditanya bagaimana Circus
membandingkan dengannya.

Jika Anda berasal dari Pengawas, halaman ini mencoba memberikan gambaran tentang bagaimana alat-alat tersebut
berbeda.

Perbedaan ikhtisar
Supervisor & Circus memiliki tujuan yang sama - keduanya mengelola proses dan menyediakan
skrip baris perintah — masing-masing pengawas dan sirkus — yang membaca konfigurasi
file, memotong proses baru dan membuatnya tetap hidup.

Circus memiliki fitur tambahan: kemampuan untuk mengikat soket dan membiarkan proses yang dikelolanya
gunakan mereka. Model "pra-garpu" ini digunakan oleh banyak server web di luar sana, seperti Apache or
Unicorn. Memiliki opsi ini di Circus dapat menyederhanakan tumpukan aplikasi web: semua proses dan
soket dikelola oleh satu alat.

Kedua proyek menyediakan cara untuk mengontrol daemon yang sedang berjalan melalui skrip lain. masing-masing
pengawas dan sirkus. Mereka juga memiliki acara dan cara berlangganan.
Perbedaan utama adalah teknologi yang mendasarinya: Supervisor menggunakan XML-RPC untuk berinteraksi
dengan daemon, sedangkan Circus menggunakan ZeroMQ.

Circus & Supervisor keduanya memiliki antarmuka web untuk menampilkan apa yang terjadi. Sirkus 'lebih
maju karena Anda dapat mengikuti secara real time apa yang terjadi dan berinteraksi dengan daemon.
Ini menggunakan soket web dan dikembangkan dalam proyek terpisah (sirkus-web.)

Ada banyak perbedaan halus lainnya dalam desain inti, yang mungkin akan kami daftarkan di sini suatu hari nanti… In
sementara itu, Anda dapat mempelajari lebih lanjut tentang sirkus internal dalam desain.

konfigurasi
Kedua sistem menggunakan file seperti ini sebagai konfigurasi.

· Pengawas dokumentasi

· Sirkus dokumentasi

Berikut adalah contoh kecil menjalankan aplikasi dengan Supervisor. Dalam hal ini,
aplikasi akan dimulai dan dimulai ulang jika macet

[program:contoh]
perintah = npm mulai
direktori=/home/www/server-saya/
pengguna=www-data
autostart = true
mulai ulang otomatis = benar
redirect_stderr=Benar

Di Circus, konfigurasi yang sama dilakukan dengan:

[pengamat: contoh]
cmd=npm mulai
working_dir=/home/www/server-saya/
pengguna=www-data
stderr_stream.class=Aliran Stdout

Perhatikan bahwa pengalihan stderr sedikit berbeda di Circus. Alat tidak memiliki
a ekor fitur seperti di Supervisor, tetapi akan membiarkan Anda menghubungkan setiap bagian kode untuk ditangani
aliran yang masuk. Anda dapat membuat pengait aliran Anda sendiri (sebagai Kelas) dan melakukan apa pun yang Anda inginkan
inginkan dengan aliran masuk. Circus menyediakan beberapa kelas aliran bawaan seperti
StdoutStream, Aliran File, Streaming File yang Ditonton, atau Aliran FileRotating Berwaktu.

Sirkus untuk Ops
PERINGATAN:
Secara default, Circus tidak mengamankan pesannya saat mengirim informasi melalui ZeroMQ.
Sebelum menjalankan Circus di lingkungan produksi, pastikan untuk membaca halaman Keamanan.

Langkah pertama untuk mengelola daemon Circus adalah menulis file konfigurasinya. Lihat
konfigurasi. Jika Anda menggunakan tumpukan web, lihatlah sockets.

Circus dapat digunakan menggunakan Python 2.6, 2.7, 3.2 atau 3.3 - sebagian besar penerapan di luar sana
dilakukan pada 2.7. Untuk mempelajari cara menerapkan Circus, lihat penerapan.

Untuk mengelola daemon Circus, Anda harus terbiasa dengan daftar perintah yang dapat Anda gunakan
in sirkus. Perhatikan bahwa Anda dapat memiliki bantuan yang sama secara online saat Anda berlari sirkus sebagai
kulit.

Kami juga menyediakan puncak sirkus, lihat cli dan dasbor web yang bagus. lihat sirkushttpd.

Terakhir, untuk mendapatkan hasil maksimal dari Circus, pastikan untuk memeriksa cara menggunakan plugin dan kait.
Lihat plugin dan kait.

Ops dokumentasi indeks
konfigurasi
Circus dapat dikonfigurasi menggunakan file konfigurasi gaya ini.

Contoh:

[sirkus]
cek_delay = 5
titik akhir = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
termasuk = \*.more.config.ini
umask = 002

[pengamat: program saya]
cmd = ular piton
args = -u program saya.py $(circus.wid) $(CIRCUS.ENV.VAR)
pemanasan_penundaan = 0
numproses = 5

# kait
hooks.before_start = my.hooks.control_redis

# akan mendorong di test.log streaming setiap 300 md
stdout_stream.class = FileStream
stdout_stream.nama file = test.log

# secara opsional memutar file log ketika mencapai 1 gb
# dan simpan 5 salinan file yang diputar
stdout_stream.max_bytes = 1073741824
stdout_stream.backup_count = 5

[env:program saya]
JALUR = $JALUR:/tempat sampah
KUE = bohong

[plugin:statistik]
gunakan = circus.plugins.statsd.StatsdEmitter
tuan rumah = localhost
pelabuhan = 8125
sample_rate = 1.0
nama_aplikasi = contoh

[soket: web]
tuan rumah = localhost
pelabuhan = 8080

sirkus - tunggal bagian
endpoint
Soket ZMQ digunakan untuk mengelola Circus melalui sirkus. (bawaan:
tcp://127.0.0.1:5555)

titik akhir_pemilik
Jika diatur ke nama pengguna sistem dan titik akhirnya adalah soket ipc seperti
ipc://var/run/circusd.sock, maka kepemilikan file soket akan diubah menjadi
pengguna itu saat startup. Untuk lebih jelasnya, lihat keamanan. (default: Tidak ada)

pubsub_endpoint
Soket ZMQ PUB/SUB menerima publikasi acara. (bawaan:
tcp://127.0.0.1:5556)

papa_titik akhir
Jika menggunakan papa, Anda dapat menentukan titik akhir, seperti ipc://var/run/circusd.sock.
(bawaan: tcp://127.0.0.1:20202)

statistik Jika disetel ke True, Circus menjalankan daemon circusd-stats. (default: Salah)

stats_endpoint
Soket ZMQ PUB/SUB menerima publikasi statistik. (bawaan:
tcp://127.0.0.1:5557)

statsd_close_outputs
Jika True mengirimkan circusd-stats stdout/stderr ke /dev/null. (default: Salah)

cek_delay
Interval polling dalam detik untuk soket ZMQ. (bawaan: 5)

memasukkan
Daftar file konfigurasi yang akan disertakan. Anda dapat menggunakan wildcard (*) untuk memasukkan tertentu
skema untuk file Anda. Jalurnya absolut atau relatif terhadap file konfigurasi.
(default: Tidak ada)

sertakan_dir
Daftar direktori konfigurasi. Semua file cocok *.ini di bawah setiap direktori akan
termasuk. Jalurnya absolut atau relatif terhadap file konfigurasi. (bawaan:
Tidak ada)

streaming_backend
Menentukan jenis backend yang akan digunakan untuk streaming. Nilai yang mungkin adalah benang
or acara. (default: utas)

pemanasan_penundaan
Interval dalam detik antara dua pengamat dimulai. Harus int. (bawaan: 0)

httpd Jika disetel ke True, Circus menjalankan daemon circushttpd. (default: Salah)

httpd_host
Host dijalankan oleh daemon circushttpd. (default: localhost)

httpd_port
Port dijalankan oleh daemon circushttpd. (default: 8080)

httpd_close_outputs
Jika Benar, kirim circushttpd stdout/stderr ke /dev/null. (default: Salah)

men-debug Jika disetel ke True, semua daemon Circus stout/stderr dialihkan ke circusd
stdout/stderr (default: Salah)

debug_gc
Jika disetel ke True, circusd mengeluarkan info log tambahan dari pengumpul sampah.
Ini dapat berguna dalam melacak kebocoran memori. (default: Salah)

file pid
File yang harus digunakan untuk menyimpan daemon pid.

umask Nilai untuk umask. Jika tidak disetel, circusd tidak akan mencoba memodifikasi umask.

tingkat log
Loglevel yang ingin kita lihat (default: INFO)

logout
File logout tempat kita ingin login (default: - untuk masuk ke stdout). Kamu bisa
masuk ke syslog jarak jauh dengan menggunakan sintaks berikut:
syslog://host:port?fasilitas di mana Host adalah server syslog Anda, port adalah opsional
dan fasilitas adalah fasilitas syslog yang akan digunakan. Jika Anda ingin masuk ke syslog lokal
Kamu dapat memakai syslog:///path/to/syslog/socket? sebagai gantinya.

konfigurasi logger
Jalur ke file INI, JSON, atau YAML untuk mengonfigurasi pencatatan log Python standar untuk
Wasit. Nilai khusus "default" menggunakan konfigurasi logging bawaan
berdasarkan opsi loglevel dan logoutput opsional.

Example YAML konfigurasi File

Versi: 1
disable_existing_loggers: salah
pemformat:
sederhana:
format: '%(waktu awal)s - %(nama)s - [%(namatingkat)s] %(pesan)s'
penangan:
berkas log:
kelas: logging.FileHandler
nama file: logoutput.txt
tingkat: DEBUG
pemformat: sederhana
penebang kayu:
sirkus:
tingkat: DEBUG
penangan: [file log]
menyebarkan: tidak
akar:
tingkat: DEBUG
penangan: [file log]

pengamat: NAMA - as banyak bagian as Anda ingin
NAMA Nama pengamat. Nama ini digunakan dalam sirkus

cmd Program yang dapat dieksekusi untuk dijalankan.

args Argumen baris perintah untuk diteruskan ke program. Anda dapat menggunakan format python
sintaks di sini untuk membangun parameter. Variabel lingkungan tersedia, sebagai
serta id pekerja dan variabel lingkungan yang Anda berikan, jika ada,
dengan parameter "env". Lihat format itu perintah dan argumen dengan dinamis
variabel Untuk informasi lebih lanjut tentang ini.

tempurung Jika Benar, proses dijalankan di shell (default: False)

shell_args
Argumen baris perintah untuk diteruskan ke perintah shell ketika tempurung adalah benar. Pekerjaan
hanya untuk sistem *nix (default: Tidak ada)

kerja_dir
Dir yang berfungsi untuk proses (default: Tidak ada)

uid Id pengguna atau nama perintah yang harus dijalankan. (Uid saat ini adalah
bawaan).

gid Id grup atau nama perintah yang harus dijalankan. (Gid saat ini adalah
bawaan).

salin_env
Jika disetel ke true, variabel lingkungan lokal akan disalin dan diteruskan ke
pekerja saat menelurkan mereka. (Bawaan: Salah)

salin_jalur
Jika disetel ke benar, sys.path dilewatkan di lingkungan subproses menggunakan PYTHONPATH.
salin_env harus benar. (Bawaan: Salah)

pemanasan_penundaan
Penundaan (dalam detik) antara proses yang berjalan.

autostart
Jika disetel ke salah, pengamat tidak akan dimulai secara otomatis saat arbiter
dimulai. Pengamat dapat dimulai secara eksplisit (contoh: sirkusctrl awal
program saya). (Bawaan: Benar)

proses bilangan
Jumlah proses yang harus dijalankan untuk pengamat ini.

batas_LIMIT
Tetapkan batas sumber daya LIMIT untuk proses yang diawasi. Nama konfigurasi harus cocok
konstanta RLIMIT_* (tidak peka huruf besar/kecil) yang tercantum dalam Ular sanca sumber modul
referensi. Misalnya, baris konfigurasi 'rlimit_nofile = 500' menetapkan maksimum
jumlah file yang terbuka menjadi 500. Untuk menetapkan nilai batas ke RLIM_INFINITY, jangan atur a
nilai, seperti baris konfigurasi ini: 'rlimit_nofile = '.

stderr_stream.kelas
Nama kelas Python yang sepenuhnya memenuhi syarat yang akan dipakai, dan akan menerima
itu stderr aliran semua proses dalam nya __panggilan__() Metode.

Circus menyediakan beberapa kelas aliran yang dapat Anda gunakan tanpa awalan:

· Aliran File: menulis dalam file dan dapat melakukan rotasi log otomatis

· Streaming File yang Ditonton: menulis dalam file dan bergantung pada rotasi log eksternal

· Aliran FileRotating Berwaktu: menulis dalam sebuah file dan dapat melakukan rotasi pada waktu tertentu
interval.

· AntrianStream: tulis di Antrian memori

· StdoutStream: menulis di stdout

· Aliran FancyStdout: menulis keluaran berwarna dengan awalan waktu di stdout

stderr_stream.*
Semua opsi dimulai dengan stderr_stream. selain kelas akan lulus
konstruktor saat membuat instance dari kelas yang didefinisikan dalam
stderr_stream.kelas.

stdout_stream.kelas
Nama kelas Python yang sepenuhnya memenuhi syarat yang akan dipakai, dan akan menerima
itu stdout aliran semua proses dalam nya __panggilan__() Metode.

Circus menyediakan beberapa kelas aliran yang dapat Anda gunakan tanpa awalan:

· Aliran File: menulis dalam file dan dapat melakukan rotasi log otomatis

· Streaming File yang Ditonton: menulis dalam file dan bergantung pada rotasi log eksternal

· Aliran FileRotating Berwaktu: menulis dalam sebuah file dan dapat melakukan rotasi pada waktu tertentu
interval.

· AntrianStream: tulis di Antrian memori

· StdoutStream: menulis di stdout

· Aliran FancyStdout: menulis keluaran berwarna dengan awalan waktu di stdout

stdout_stream.*
Semua opsi dimulai dengan stdout_stream. selain kelas akan lulus
konstruktor saat membuat instance dari kelas yang didefinisikan dalam
stdout_stream.kelas.

close_child_stdout
Jika disetel ke True, aliran stdout dari setiap proses akan dikirim ke /dev/null
setelah garpu. Default ke Salah.

close_child_stderr
Jika disetel ke True, aliran stderr dari setiap proses akan dikirim ke /dev/null
setelah garpu. Default ke Salah.

kirim_hup
Jika Benar, proses reload akan dilakukan dengan mengirimkan sinyal SIGHUP. Default
ke Salah.

stop_signal
Sinyal untuk dikirim saat menghentikan proses. Dapat ditentukan sebagai angka atau
nama sinyal. Nama sinyal tidak peka huruf besar-kecil dan dapat menyertakan 'SIG' atau tidak. Jadi
contoh yang valid termasuk berhenti, INT, JANGKA TARGET dan 3. Default ke SIGTERM.

berhenti_anak-anak
Saat mengirim stop_signal, kirimkan ke anak-anak juga. Default untuk
Salah.

max_retry
Berapa kali kita mencoba untuk memulai suatu proses, sebelum kita meninggalkan dan berhenti
seluruh pengamat. Default ke 5. Setel ke -1 untuk menonaktifkan max_retry dan coba lagi
tanpa batas.

anggun_waktu habis
Jumlah detik untuk menunggu suatu proses berakhir dengan baik sebelum
membunuhnya.

Saat menghentikan suatu proses, pertama-tama kami mengirimkannya stop_signal. Seorang pekerja mungkin menangkap ini
sinyal untuk melakukan operasi pembersihan sebelum keluar. Jika pekerja masih
aktif setelah graceful_timeout detik, kami mengirimkannya sinyal SIGKILL. Bukan itu
mungkin untuk menangkap sinyal SIGKILL sehingga pekerja akan berhenti.

Default ke 30-an.

prioritas
Integer yang mendefinisikan prioritas bagi pengamat. Ketika Arbiter melakukan sesuatu
operasi pada semua pengamat, itu akan mengurutkannya dengan bidang ini, dari yang lebih besar
bilangan ke yang terkecil. Default ke 0.

tunggal
Jika disetel ke True, pengamat ini akan memiliki paling banyak satu proses. Default untuk
Salah.

gunakan_socket
Jika disetel ke True, pengamat ini akan dapat mengakses soket yang ditentukan melalui
deskriptor file. Jika False, semua parent fds ditutup ketika proses anak adalah
bercabang dua. Default ke Salah.

usia_maks
Jika disetel maka proses akan dimulai ulang beberapa saat setelah max_age detik. Ini
berguna ketika proses berurusan dengan kumpulan konektor: memulai kembali proses
meningkatkan keseimbangan beban. Default untuk dinonaktifkan.

max_age_variance
Jika max_age diatur maka proses akan hidup antara max_age dan max_age +
acak(0, max_age_variance) detik. Ini menghindari memulai ulang semua proses untuk a
pengamat sekaligus. Default ke 30 detik.

sesuai_permintaan
Jika disetel ke True, proses akan dimulai hanya setelah koneksi pertama ke
salah satu soket yang dikonfigurasi (lihat di bawah). Jika restart diperlukan, itu akan menjadi
hanya dipicu pada acara soket berikutnya.

kait.*
Kait yang tersedia: sebelum_mulai, setelah_mulai, sebelum_bertelur, setelah_bertelur,
sebelum_berhenti, setelah_berhenti, sebelum_sinyal, setelah_sinyal, diperpanjang_stats

Tentukan fungsi panggilan balik yang terhubung ke proses startup/shutdown pengamat.

Jika kaitnya kembali Salah dan jika kail adalah salah satunya sebelum_mulai, sebelum_bertelur,
setelah_mulai or setelah_bertelur, startup akan dibatalkan.

Jika kaitnya adalah sebelum_sinyal dan kembali Salah, maka sinyal yang sesuai
tidak akan terkirim (kecuali SIGKILL yang selalu terkirim)

Perhatikan bahwa kait yang gagal selama proses penghentian tidak akan membatalkannya.

Definisi callback dapat diikuti oleh flag boolean yang dipisahkan dengan koma.
Saat bendera disetel ke benar, kesalahan apa pun yang terjadi di hook akan diabaikan. Jika
mulai palsu (default), hook akan kembali Salah.

Lebih lanjut tentang kait.

virtualenv
Saat disediakan, arahkan ke akar direktori Virtualenv. Pengamat akan
memindai lokal paket situs dan memuat kontennya ke dalam eksekusi
lingkungan. Harus digunakan dengan salin_env disetel ke Benar. Default ke Tidak Ada.

virtualenv_py_ver
Menentukan versi python dari virtualenv (misalnya "3.3"). Ini berguna jika
sirkus dijalankan dengan versi python lain (misalnya "2.7") Pengamat akan memindai
lokal paket situs dari versi python yang ditentukan dan memuat kontennya ke dalam
lingkungan eksekusi. Harus digunakan dengan virtualenv. Default ke Tidak Ada.

respawn
Jika disetel ke False, proses yang ditangani oleh pengamat tidak akan dimunculkan kembali
secara otomatis. Prosesnya dapat dimunculkan kembali secara manual dengan awal perintah.
(bawaan: Benar)

gunakan_papa
Atur ke true untuk menggunakan papa.

soket: NAMA - as banyak bagian as Anda ingin
tuan rumah Tuan rumah soket. Default ke 'localhost'

pelabuhan Pelabuhan. Default ke 8080.

keluarga Keluarga soket. Dapat berupa 'AF_UNIX', 'AF_INET' atau 'AF_INET6'. Default untuk
'AF_INET'.

mengetik Jenis soket. Dapat berupa 'SOCK_STREAM', 'SOCK_DGRAM', 'SOCK_RAW', 'SOCK_RDM' atau
'SOCK_SEQPACKET'. Default ke 'SOCK_STREAM'.

antarmuka
Saat diberikan nama antarmuka jaringan seperti 'eth0', ikat soket ke sana
perangkat tertentu sehingga hanya paket yang diterima dari antarmuka tertentu
diproses oleh soket. Ini dapat digunakan misalnya untuk membatasi perangkat mana
untuk mengikat saat mengikat IN_ADDR_ANY (0.0.0.0) atau IN_ADDR_BROADCAST
(255.255.255.255). Perhatikan bahwa ini hanya berfungsi untuk beberapa jenis soket, khususnya
soket AF_INET.

path Saat disediakan jalur ke file yang akan digunakan sebagai file soket unix. Jika sebuah
jalan disediakan, keluarga dipaksa untuk AF_UNIX dan tuan rumah dan pelabuhan diabaikan.

umask Jika tersedia, atur umask yang akan digunakan untuk membuat soket AF_UNIX. Untuk
contoh, umask = 000 akan menghasilkan soket dengan izin 777.

menggantikan
Saat membuat soket Unix ('AF_UNIX'), file yang ada mungkin menunjukkan masalah
jadi defaultnya adalah gagal. Menentukan Benar untuk menghapus file lama jika Anda
yakin bahwa soket hanya dikelola oleh Circus.

jadi_reuseport
Jika disetel ke True dan SO_REUSEPORT tersedia di platform target, sirkus akan
buat dan ikat soket SO_REUSEPORT baru untuk setiap pekerja yang dimulainya yaitu a
pengguna soket ini.

gunakan_papa
Atur ke true untuk menggunakan papa.

Setelah soket dibuat, ${circus.sockets.NAME} string dapat digunakan dalam perintah
(cmd or args) dari seorang pengamat. Circus akan menggantikannya dengan nilai FD. Pengamat juga harus
memiliki gunakan_socket mulai Benar jika tidak, soket akan ditutup dan Anda akan mendapatkan
kesalahan ketika pengamat mencoba menggunakannya.

Contoh:

[pengamat: pekerja web]
cmd = chaussette --fd $(circus.sockets.webapp) chaussette.util.bench_app
use_sockets = Benar

[soket: aplikasi web]
tuan rumah = 127.0.0.1
pelabuhan = 8888

pengaya:NAME - as banyak bagian as Anda ingin
menggunakan Nama yang sepenuhnya memenuhi syarat yang menunjuk ke kelas plugin.

apa saja lain
Setiap kunci lain yang ditemukan di bagian diteruskan ke konstruktor plugin di
config pemetaan.

Anda dapat menggunakan semua opsi pengamat, karena plugin dimulai seperti pengamat.

Circus hadir dengan beberapa plugin yang telah dikirim sebelumnya tetapi Anda juga dapat memperluasnya dengan mudah dengan
mengembangkan Anda sendiri.

env or env[:PENONTON] - as banyak bagian as Anda ingin
apa saja
Nama variabel lingkungan yang akan diberi nilai. lingkungan gaya bash
substitusi didukung. misalnya, tambahkan /tempat sampah untuk PATH 'JALAN =
$JALAN:/tempat sampah'

Bagian yang bertanggung jawab untuk memberikan variabel lingkungan untuk menjalankan proses.

Contoh:

[pengamat: pekerja1]
cmd = ping 127.0.0.1

[pengamat: pekerja2]
cmd = ping 127.0.0.1

[env]
KUE = bohong

Variabel CAKE akan disebarkan ke semua pengamat yang ditentukan dalam file konfigurasi.

WATCHERS dapat berupa daftar bagian pengamat yang dipisahkan koma untuk menerapkan lingkungan ini.
jika beberapa bagian env cocok dengan pengamat, mereka akan digabungkan dalam urutan kemunculannya
file konfigurasi. entri selanjutnya akan didahulukan.

Contoh:

[pengamat: pekerja1]
cmd = ping 127.0.0.1

[pengamat: pekerja2]
cmd = ping 127.0.0.1

[env:pekerja1,pekerja2]
JALUR = /tempat sampah

[env:pekerja1]
JALAN = $PATH

[env:pekerja2]
KUE = bohong

pekerja1 akan dijalankan dengan PATH = $PATH (diperluas dari lingkungan tempat sirkus dijalankan)
pekerja2 akan dijalankan dengan PATH = /tempat sampah dan KUE = bohong

Dimungkinkan juga untuk menggunakan wildcard.

Contoh:

[pengamat: pekerja1]
cmd = ping 127.0.0.1

[pengamat: pekerja2]
cmd = ping 127.0.0.1

[env:pekerja*]
JALUR = /tempat sampah

Kedua pekerja1 dan pekerja2 akan dijalankan dengan PATH = /tempat sampah

Menggunakan lingkungan Hidup variabel
Saat menulis file konfigurasi Anda, Anda dapat menggunakan variabel lingkungan yang didefinisikan di env
bagian atau di os.lingkungan itu sendiri.

Anda hanya perlu menggunakan sirkus.env. awalan.

Contoh:

[pengamat: pekerja1]
cmd = $(circus.env.shell)

[pengamat: pekerja2]
baz = $(circus.env.pengguna)
bar = $(circus.env.yeah)
sup = $(circus.env.oh)

[soket: soket1]
port = $(circus.env.port)

[plugin: plugin1]
gunakan = beberapa.path
parameter1 = $(circus.env.plugin_param)

[env]
ya = bu

[env:pekerja2]
oh = oke

Jika sebuah variabel didefinisikan di beberapa tempat, nilai yang paling terspesialisasi memiliki prioritas: a
variabel yang didefinisikan dalam env:XXX akan menimpa variabel yang didefinisikan dalam env, yang akan menimpa a
variabel yang didefinisikan dalam os.lingkungan.

substitusi lingkungan dapat digunakan di bagian mana pun dari konfigurasi di bagian mana pun
variabel.

format itu perintah dan argumen dengan dinamis variabel
Seperti yang mungkin telah Anda lihat, adalah mungkin untuk melewatkan beberapa informasi yang dihitung
dinamis saat menjalankan proses. Antara lain, Anda bisa mendapatkan id pekerja
(WID) dan semua opsi yang diteruskan ke Proses. Selain itu, dimungkinkan untuk
mengakses opsi yang diteruskan ke Pengintai yang mencontohkan proses.

CATATAN:
Id pekerja berbeda dari id proses. Ini adalah nilai yang unik, mulai dari 1,
yang hanya unik untuk pengamat.

Misalnya, jika Anda ingin mengakses beberapa variabel yang ada di lingkungan,
anda harus melakukannya dengan pengaturan seperti ini:

cmd = "buat-saya-kopi --gula $(CIRCUS.ENV.SUGAR_AMOUNT)"

Ini bekerja dengan keduanya cmd dan args.

penting:

· Semua variabel diawali dengan sirkus.

· Penggantian tidak peka huruf besar/kecil.

Aliran konfigurasi
Kelas aliran sederhana seperti AntrianStream dan StdoutStream tidak memiliki atribut khusus tetapi
beberapa kelas aliran lain mungkin memiliki beberapa:

Aliran File
nama file
Jalur file tempat log akan ditulis.

format waktu
Format strftime yang akan digunakan untuk mengawali setiap waktu dengan stempel waktu. Oleh
default mereka tidak akan diawali.

yaitu: %Y-%m-%d %H:%M:%S

max_bytes
Ukuran maksimum file log sebelum file baru dimulai. Jika tidak disediakan,
file tidak terguling.

cadangan_jumlah
Jumlah file log yang akan disimpan Secara default backup_count adalah null.

CATATAN:
Rollover terjadi setiap kali file log saat ini hampir max_bytes panjangnya. Jika
backup_count adalah >= 1, sistem akan berturut-turut membuat file baru dengan file yang sama
pathname sebagai file dasar, tetapi dengan ekstensi ".1", ".2" dll. ditambahkan padanya. Untuk
contoh, dengan backup_count 5 dan nama file dasar "app.log", Anda akan mendapatkan
"app.log", "app.log.1", "app.log.2", ... hingga "app.log.5". File yang sedang ditulis
to selalu "app.log" - ketika diisi, ditutup dan diganti namanya menjadi
"app.log.1", dan jika file "app.log.1", "app.log.2" dll. ada, maka namanya diganti
ke "app.log.2", "app.log.3" dll.

Contoh:

[pengamat: program saya]
cmd = python -m aplikasi saya.server

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

Streaming File yang Ditonton
nama file
Jalur file tempat log akan ditulis.

format waktu
Format strftime yang akan digunakan untuk mengawali setiap waktu dengan stempel waktu. Oleh
default mereka tidak akan diawali.

yaitu: %Y-%m-%d %H:%M:%S

CATATAN:
WatchedFileStream mengandalkan alat rotasi log eksternal untuk memastikan bahwa file log
jangan terlalu besar. File output akan dipantau dan jika pernah dihapus atau
digerakkan oleh alat rotasi log eksternal, maka pegangan file output akan menjadi
dimuat ulang secara otomatis.

Contoh:

[pengamat: program saya]
cmd = python -m aplikasi saya.server

stdout_stream.class = MenontonFileStream
stdout_stream.nama file = test.log
stdout_stream.time_format = %Y-%m-%d %H:%M:%S

Aliran FileRotating Berwaktu
nama file
Jalur file tempat log akan ditulis.

cadangan_jumlah
Jumlah file log yang akan disimpan Secara default backup_count adalah null.

format waktu
Format strftime yang akan digunakan untuk mengawali setiap waktu dengan stempel waktu. Oleh
default mereka tidak akan diawali.

yaitu: %Y-%m-%d %H:%M:%S

putar_kapan
Jenis intervalnya. Daftar nilai yang mungkin ada di bawah. Perhatikan bahwa mereka adalah
tidak peka huruf besar/kecil.

┌───────────────────────────────────────────────────────────────────-
Nilai Jenis interval
├───────────────────────────────────────────────────────────────────-
'S' Detik
├───────────────────────────────────────────────────────────────────-
'M' Menit
├───────────────────────────────────────────────────────────────────-
'H' Jam
├───────────────────────────────────────────────────────────────────-
'D' Hari
├───────────────────────────────────────────────────────────────────-
'W0'-'W6' Hari kerja (0=Senin)
├───────────────────────────────────────────────────────────────────-
'midnight' Berguling di tengah malam
└───────────────────────────────────────────────────────────────────-

putar_interval
Interval putaran.

CATATAN:
TimedRotatingFileStream memutar file log pada interval waktu tertentu. Interval rollover
ditentukan oleh kombinasi rotate_when dan rotate_interval.

Contoh:

[pengamat: program saya]
cmd = python -m aplikasi saya.server

stdout_stream.class = TimeRotatingFileStream
stdout_stream.nama file = test.log
stdout_stream.time_format = %Y-%m-%d %H:%M:%S
stdout_stream.utc = Benar
stdout_stream.rotate_when = H
stdout_stream.rotate_interval = 1

Aliran FancyStdout
warna

nama of an ascii warna:

· merah

· hijau

· kuning

· biru

· Magenta

· sia-sia

· putih

format waktu
Format strftime yang akan diawali dengan setiap baris.

Default ke: %Y-%m-%d %H:%M:%S

Contoh:

[pengamat: program saya]
cmd = python -m aplikasi saya.server
stdout_stream.class = FancyStdoutStream
stdout_stream.color = hijau
stdout_stream.time_format = %Y/%m/%d | %H:%M:%S

Perintah
Di pusat sirkus hidup sistem komando. sirkus hanyalah klien zeromq,
dan jika perlu, Anda dapat mengemudikan sistem Circus secara terprogram dengan menulis zmq . Anda sendiri
pelanggan.

Semua pesan adalah pemetaan JSON.

Untuk setiap perintah di bawah ini, kami memberikan contoh penggunaan dengan circusctl tetapi juga input /
mengeluarkan pesan zmq.

sirkus-ctl perintah
· menambahkan: perintah/tambahkan

· dek: perintah/deklarasi

· dstat: perintah/dstat

· mendapatkan: perintah/dapatkan

· pilihan global: perintah/globaloptions

· termasuk: perintah/termasuk

· ular piton: perintah/ipython

· daftar: perintah/daftar

· mendengarkan: perintah/dengarkan

· daftar soket: perintah/daftar soket

· proses bilangan: perintah/numproses

· pengamat angka: perintah/numwatcher

· Pilihan: perintah/opsi

· berhenti: perintah/keluar

· kembali: perintah/muat ulang

· isi ulang konfigurasi: perintah/reloadconfig

· Restart: perintah/restart

· rm: perintah/rm

· set: perintah/set

· sinyal: perintah/sinyal

· awal: perintah/mulai

· statistik: perintah/statistik

· status: perintah/status

· berhenti: perintah/berhenti

Add a pengintai
Perintah ini menambahkan pengamat secara dinamis ke arbiter.

ZMQ Pesan
{
"perintah": "tambah",
"properti": {
"cmd": "/path/ke/commandline --option"
"nama": "namapengamat"
"args": [],
"pilihan": {},
"mulai": salah
}
}

Sebuah pesan berisi 2 properti:

· cmd: Baris perintah penuh untuk dieksekusi dalam suatu proses

· args: array, argumen diteruskan ke perintah (opsional)

· nama: nama pengamat

· opsi: opsi pengamat

· mulai: mulai pengamat setelah pembuatan

Responnya mengembalikan status "ok".

perintah line
$ circusctl tambahkan [--start]

Opsi
· : nama pengamat yang akan dibuat

· : baris perintah penuh untuk dieksekusi dalam suatu proses

· --start: mulai menonton segera

Pengurangan itu jumlah of proses in a pengintai
Komentar ini mengurangi jumlah proses dalam pengamat sebesar , 1 menjadi
standar.

ZMQ Pesan
{
"perintah": "dek",
"sifat": {
"nama": " "
"nb":
"menunggu": Salah
}
}

Respons mengembalikan jumlah proses di properti 'numprocesses`:

{ "status": "ok", "numproses": , "waktu", "stempel waktu" }

perintah line
$ circusctl decr [ ] [--menunggu]

Opsi
· : nama pengamat

· : jumlah proses yang akan dihapus.

Dapatkan sirkus statistik
Anda bisa mendapatkan statistik tentang sirkus kapan saja dengan perintah dstat.

ZMQ Pesan
Untuk mendapatkan statistik sirkus, jalankan saja:

{
"perintah": "dstats"
}

Respons mengembalikan pemetaan properti "infos" yang berisi beberapa informasi proses:

{
"informasi": {
"anak-anak": [],
"cmdline": "python",
"cpu": 0.1,
"waktu": "0:00.41",
"me": 0.1,
"mem_info1": "3M",
"mem_info2": "2G",
"baik": 0,
"pid": 47864,
"nama pengguna": "akar"
},
"status": "oke",
"waktu": 1332265655.897085
}

perintah baris
$statistik sirkusctl

Dapatkan itu nilai of tertentu pengintai Pilihan
Perintah ini dapat digunakan untuk menanyakan nilai saat ini dari satu atau lebih opsi pengamat.

ZMQ Pesan
{
"perintah": "dapatkan",
"properti": {
"kunci": ["kunci1, "kunci2"]
"nama": "namapengamat"
}
}

Pesan permintaan berisi dua properti:

· kunci: daftar, Tombol opsi yang ingin Anda dapatkan nilainya

· nama: nama pengamat

Objek respons memiliki properti Pilihan yang merupakan kamus nama opsi dan
nilai-nilai.

misalnya:

{
"status": "oke",
"pilihan": {
"graceful_timeout": 300,
"send_hup": Benar,
},
waktu': 1332202594.754644
}

perintah line
$sirkusctl dapatkan

Dapatkan itu wasit Pilihan
Perintah ini mengembalikan opsi arbiter

ZMQ Pesan
{
"command": "globaloptions",
"properti": {
"kunci1": "val1",
..
}
}

Sebuah pesan berisi 2 properti:

· kunci: daftar, Tombol opsi yang ingin Anda dapatkan nilainya

Respons mengembalikan objek dengan properti "opsi" yang berisi daftar kunci/nilai
dikembalikan oleh sirkus.

misalnya:

{
"status": "oke",
"pilihan": {
"check_delay": 1,
...
},
waktu': 1332202594.754644
}

perintah line
$circusctl globaloptions

Opsi
Tombol Opsi adalah:

· titik akhir: titik akhir pengontrol ZMQ

· pubsub_endpoint: titik akhir pubsub

· check_delay: penundaan antara dua titik pengontrol

· multicast_endpoint: titik akhir multicast untuk penemuan otomatis kluster sirkus

Kenaikan itu jumlah of proses in a pengintai
Komentar ini menambah jumlah proses dalam pengamat sebesar , 1 menjadi
kegagalan

ZMQ Pesan
{
"perintah": "termasuk",
"properti": {
"nama": " ",
"nb": ,
"menunggu": Salah
}
}

Respons mengembalikan jumlah proses di properti 'numprocesses`:

{ "status": "ok", "numproses": , "waktu", "stempel waktu" }

perintah line
$ circusctl termasuk [ ] [--menunggu]

Opsi
· : nama pengamat.

· : jumlah proses yang akan ditambahkan.

membuat tempurung ke sirkus proses
Perintah ini hanya berguna jika Anda telah menginstal paket ipython.

perintah baris
$ sirkusctl ipython

Dapatkan daftar of pengamat or proses in a pengintai
ZMQ Pesan
Untuk mendapatkan daftar semua pengamat:

{
"perintah": "daftar",
}

Untuk mendapatkan daftar proses aktif di pengamat:

{
"perintah": "daftar",
"properti": {
"nama": "namapengamat",
}
}

Tanggapan mengembalikan daftar yang diminta. pemetaan yang dikembalikan dapat berupa 'pengamat' atau
'pids' tergantung permintaan.

perintah line
$ daftar sirkusctl [ ]

Berlangganan untuk a pengintai peristiwa
ZMQ
Setiap saat Anda dapat berlangganan acara sirkus. Circus menyediakan umpan PUB/SUB di mana
setiap klien dapat berlangganan. URI titik akhir pelanggan diatur di circus.ini
file konfigurasi.

Acara adalah topik pubsub:

· pengintai. .menuai: ketika sebuah proses menuai

· pengintai. .muncul: ketika sebuah proses muncul

· pengintai. .membunuh: ketika sebuah proses dimatikan

· pengintai. .update: ketika konfigurasi pengamat diperbarui

· pengintai. .berhenti: ketika seorang pengamat dihentikan

· pengintai. .Mulailah: ketika seorang pengamat dimulai

Semua pesan acara berada dalam struct json.

perintah line
Klien telah diperbarui untuk menyediakan cara sederhana untuk mendengarkan acara:

circusctl mendengarkan [ , ...]

Example of hasil:
$ circusctl mendengarkan tcp://127.0.0.1:5556
watcher.refuge.spawn: {u'process_id': 6, u'process_pid': 72976,
u'waktu': 1331681080.985104}
watcher.refuge.spawn: {u'process_id': 7, u'process_pid': 72995,
u'waktu': 1331681086.208542}
watcher.refuge.spawn: {u'process_id': 8, u'process_pid': 73014,
u'waktu': 1331681091.427005}

Dapatkan itu daftar of soket
ZMQ Pesan
Untuk mendapatkan daftar soket:

{
"perintah": "listsockets",
}

Responsnya mengembalikan daftar pemetaan json dengan kunci untuk fd, nama, host, dan port.

perintah line
$ circusctl list sockets

Dapatkan itu jumlah of proses
Dapatkan jumlah proses di pengamat atau di arbiter

ZMQ Pesan
{
"perintah": "proses angka",
"sifat": {
"nama": " "
}

}

Respons mengembalikan jumlah proses di properti 'numprocesses`:

{ "status": "ok", "numproses": , "waktu", "stempel waktu" }

Jika nama properti tidak ditentukan, jumlah semua proses yang dikelola akan dikembalikan.

perintah line
$ circusctl numprocesses [ ]

Opsi
· : nama pengamat

Dapatkan itu jumlah of pengamat
Dapatkan jumlah pengamat di arbiter

ZMQ Pesan
{
"command": "pengamat angka",
}

Responsnya mengembalikan jumlah pengamat di properti 'numwatchers`:

{ "status": "ok", "numwatchers": , "waktu", "stempel waktu" }

perintah line
$ pengamat angka sirkusctl

Dapatkan itu nilai of semua Pilihan untuk a pengintai
Perintah ini mengembalikan semua nilai opsi untuk pengamat tertentu.

ZMQ Pesan
{
"perintah": "opsi",
"properti": {
"nama": "namapengamat",
}
}

Sebuah pesan berisi 1 properti:

· nama: nama pengamat

Objek respons memiliki properti Pilihan yang merupakan kamus nama opsi dan
nilai-nilai.

misalnya:

{
"status": "oke",
"pilihan": {
"graceful_timeout": 300,
"send_hup": Benar,
...
},
waktu': 1332202594.754644
}

perintah line
$ opsi sirkusctl

Opsi
· : nama pengamat

Tombol Opsi adalah:

· numprocesses: integer, jumlah proses

· warmup_delay: bilangan bulat atau angka, penundaan untuk menunggu antara proses pemijahan dalam hitungan detik

· working_dir: string, direktori dimana proses akan dieksekusi

· uid: string atau integer, ID pengguna yang digunakan untuk meluncurkan proses

· gid: string atau integer, ID grup yang digunakan untuk meluncurkan proses

· send_hup: boolean, jika TRU sinyal HUP akan digunakan pada reload

· shell: boolean, akan menjalankan perintah di lingkungan shell jika benar

· cmd: string, Baris perintah yang digunakan untuk meluncurkan proses

· env: objek, tentukan lingkungan di mana proses akan diluncurkan

· retry_in: bilangan bulat atau angka, waktu dalam detik kami menunggu sebelum kami mencoba lagi untuk meluncurkan
proses jika jumlah upaya maksimum telah tercapai.

· max_retry: integer, Maksimum pengulangan pengulangan

· graceful_timeout: integer atau angka, waktu kita menunggu sebelum kita benar-benar mematikan suatu proses.

· prioritas: digunakan untuk mengurutkan pengamat di arbiter

· singleton: jika Benar, seorang pengamat tunggal.

· max_age: waktu suatu proses dapat hidup sebelum dimulai ulang

· max_age_variance: variabel waktu tambahan untuk hidup, menghindari injakan kawanan.

Berhenti itu wasit segera
Ketika arbiter menerima perintah ini, arbiter keluar.

ZMQ Pesan
{
"perintah": "keluar",
"menunggu": Salah
}

Responnya mengembalikan status "ok".

If menunggu salah (default), panggilan akan segera kembali setelah panggilan stop_signal
pada setiap proses.

If menunggu benar, panggilan akan kembali hanya ketika proses berhenti benar-benar berakhir.
Karena opsi graceful_timeout, ini bisa memakan waktu.

perintah line
$ circusctl berhenti [--menunggu]

mengisi kembali itu wasit or a pengintai
Perintah ini memuat ulang semua proses di pengamat atau semua pengamat. Ini akan terjadi dalam satu
dari 3 cara:

· Jika anggun salah, restart sederhana terjadi.

· Jika kirim_hup benar untuk pengamat, sinyal HUP dikirim ke setiap proses.

·

Jika tidak:

· Jika sekuensial salah, arbiter akan mencoba untuk menelurkan proses bilangan yang baru
proses. Jika proses baru berhasil dimunculkan, hasilnya adalah
semua proses lama dihentikan, karena secara default proses tertua adalah
dihentikan ketika jumlah sebenarnya dari proses untuk seorang pengamat lebih besar dari
proses bilangan.

· Jika sekuensial benar, arbiter akan memulai kembali setiap proses secara berurutan
cara (dengan pemanasan_penundaan jeda di antara setiap langkah)

ZMQ Pesan
{
"perintah": "muat ulang",
"properti": {
"nama": ' ",
"anggun": benar,
"berurutan": salah,
"menunggu": Salah
}
}

Responnya mengembalikan status "ok". Jika properti anggun diatur ke true prosesnya
akan keluar dengan anggun.

Jika nama properti ada, maka reload akan diterapkan ke pengamat.

perintah line
$ circusctl memuat ulang [ ] [--berhenti] [--menunggu]
[--sekuensial]

Opsi
· : nama pengamat

· --mengakhiri; keluar dari simpul segera

mengisi kembali itu konfigurasi fillet
Perintah ini memuat ulang file konfigurasi, jadi perubahan pada file konfigurasi adalah
tercermin dalam konfigurasi sirkus.

ZMQ Pesan
{
"perintah": "reloadconfig",
"menunggu": Salah
}

Responnya mengembalikan status "ok". Jika properti anggun diatur ke true prosesnya
akan keluar dengan anggun.

perintah line
$ circusctl reloadconfig [--menunggu]

Restart itu wasit or a pengintai
Perintah ini memulai kembali semua proses di watcher atau semua watcher. Fungsi ini secara sederhana
hentikan pengamat lalu mulai ulang.

ZMQ Pesan
{
"perintah": "mulai ulang",
"properti": {
"nama": " ",
"menunggu": Salah,
"cocok": "[sederhana|glob|regex]"
}
}

Responnya mengembalikan status "ok".

Jika nama properti ada, maka reload akan diterapkan ke pengamat.

If menunggu salah (default), panggilan akan segera kembali setelah panggilan stop_signal
pada setiap proses.

If menunggu benar, panggilan akan kembali hanya ketika proses restart benar-benar
berakhir. Karena opsi graceful_timeout, ini bisa memakan waktu.

pertandingan parameter dapat memiliki nilai sederhana untuk perbandingan string, bola untuk wildcard
cocok (default) atau regex untuk pencocokan regex.

perintah line
$ circusctl restart [nama] [--menunggu] [--match=simple|glob|regex]

Opsi
· : nama atau pola pengamat

· : metode pertandingan pengamat

Hapus a pengintai
Perintah ini menghapus pengamat secara dinamis dari arbiter. Para pengamat dengan anggun
dihentikan secara default.

ZMQ Pesan
{
"perintah": "rm",
"properti": {
"nama": " ",
"nostop": Salah,
"menunggu": Salah
}
}

Responnya mengembalikan status "ok".

If berhenti adalah Benar (default: Salah), proses untuk pengamat tidak akan dihentikan -
sebaliknya pengamat hanya akan dilupakan oleh sirkus dan proses pengamat akan
bertanggung jawab untuk menghentikan diri mereka sendiri. Jika berhenti tidak ditentukan atau Salah, maka
proses pengamat akan dihentikan dengan anggun.

If menunggu salah (default), panggilan akan segera kembali setelah mulai dihapus
dan hentikan pengamat yang sesuai.

If menunggu benar, panggilan akan kembali hanya ketika proses hapus dan hentikan adalah
benar-benar berakhir. Karena opsi graceful_timeout, ini bisa memakan waktu.

perintah line
$ circusctl rm [--menunggu] [--nostop]

Opsi
· : nama pengamat yang akan dihapus

· nostop: jangan hentikan proses pengamat, hapus saja pengamatnya

set a pengintai Option
ZMQ Pesan
{
"perintah": "setel",
"properti": {
"nama": "namapengamat",
"pilihan": {
"kunci1": "val1",
..
}
"menunggu": Salah
}
}

Responnya mengembalikan status "ok". Lihat perintah Opsi untuk daftar kunci yang akan diatur.

perintah line
$ sirkusctl set --menunggu

Kirim a sinyal
Perintah ini memungkinkan Anda untuk mengirim sinyal ke semua proses di pengamat, proses tertentu
pada seorang pengamat atau anak-anaknya.

ZMQ Pesan
Untuk mengirim sinyal ke semua proses untuk pengamat:

{
"perintah": "sinyal",
"Properti": {
"nama": ,
"tanda tangan":
}

Untuk mengirim sinyal ke suatu proses:

{
"perintah": "sinyal",
"Properti": {
"nama": ,
"pid": ,
"tanda tangan":
}

Properti opsional "anak-anak" dapat digunakan untuk mengirim sinyal ke semua anak sebagai gantinya
daripada proses itu sendiri:

{
"perintah": "sinyal",
"Properti": {
"nama": ,
"pid": ,
"tanda tangan": ,
"anak-anak": Benar
}

Untuk mengirim sinyal ke anak proses:

{
"perintah": "sinyal",
"Properti": {
"nama": ,
"pid": ,
"tanda tangan": ,
"anak_pid": ,
}

Dimungkinkan juga untuk mengirim sinyal ke semua anak pengamat:

{
"perintah": "sinyal",
"Properti": {
"nama": ,
"tanda tangan": ,
"anak-anak": Benar
}

Terakhir, Anda dapat mengirim sinyal ke proses dan anak-anaknya, dengan rekursif opsi:

{
"perintah": "sinyal",
"Properti": {
"nama": ,
"tanda tangan": ,
"rekursif": Benar
}

perintah line
$ sinyal sirkusctl [ ] [--anak-anak]
[--rekursif]

Pilihan:
· : nama pengamat

· : integer, id proses.

· : nomor sinyal (atau nama) yang akan dikirim.

· : pid anak, jika ada

· : boolean, kirim sinyal ke semua anak

· : boolean, mengirim sinyal ke proses dan anak-anaknya

Start itu wasit or a pengintai
Perintah ini memulai semua proses di watcher atau semua watcher.

ZMQ Pesan
{
"perintah": "mulai",
"properti": {
"nama": ' ",
"menunggu": Salah,
"cocok": "[sederhana|glob|regex]"
}
}

Responnya mengembalikan status "ok".

Jika nama properti ada, pengamat akan dimulai.

If menunggu salah (default), panggilan akan segera kembali setelah panggilan awal on
setiap proses.

If menunggu adalah Benar, panggilan akan kembali hanya ketika proses awal benar-benar berakhir.
Karena opsi graceful_timeout, ini bisa memakan waktu.

pertandingan parameter dapat memiliki nilai sederhana untuk perbandingan string, bola untuk wildcard
cocok (default) atau regex untuk pencocokan regex.

perintah line
$ circusctl restart [nama] [--menunggu] [--match=simple|glob|regex]

Opsi
· : nama atau pola pengamat

· : metode pertandingan pengamat

Dapatkan proses informasi
Anda bisa mendapatkan statistik tentang proses Anda kapan saja dengan perintah stat.

ZMQ Pesan
Untuk mendapatkan statistik untuk semua pengamat:

{
"perintah": "statistik"
}

Untuk mendapatkan statistik pengamat:

{
"perintah": "statistik",
"properti": {
"nama":
}
}

Untuk mendapatkan statistik untuk suatu proses:

{
"perintah": "statistik",
"properti": {
"nama": ,
"proses":
}
}

Statistik dapat diperpanjang dengan hook extended_stats tetapi statistik yang diperpanjang harus
diminta:

{
"perintah": "statistik",
"properti": {
"nama": ,
"proses": ,
"diperpanjang": Benar
}
}

Respons mengembalikan objek per proses dengan properti "info" yang berisi beberapa proses
informasi:

{
"informasi": {
"anak-anak": [],
"cmdline": "python",
"cpu": 0.1,
"waktu": "0:00.41",
"me": 0.1,
"mem_info1": "3M",
"mem_info2": "2G",
"baik": 0,
"pid": 47864,
"nama pengguna": "akar"
},
"proses": 5,
"status": "oke",
"waktu": 1332265655.897085
}

perintah baris
$ circusctl stats [--extended] [ ] [ ]

Dapatkan itu status of a pengintai or semua pengamat
Perintah ini mulai mendapatkan status pengamat atau semua pengamat.

ZMQ Pesan
{
"perintah": "status",
"properti": {
"nama": ' ",
}
}

Respon tersebut mengembalikan status "aktif" atau "berhenti" atau status/pengamat.

perintah line
$ status sirkustl [ ]

Opsi
· : nama pengamat

Example
$ dummy status circusctl
aktif
status $ sirkus
boneka: aktif
dummy2: aktif
perlindungan: aktif

berhenti pengamat
Perintah ini menghentikan pengamat tertentu atau semua pengamat.

ZMQ Pesan
{
"perintah": "berhenti",
"properti": {
"nama": " ",
"menunggu": Salah,
"cocok": "[sederhana|glob|regex]"
}
}

Respons mengembalikan status "ok".

Jika nama properti hadir, maka pemberhentian akan diterapkan pada pengamat
sesuai dengan nama itu. Jika tidak, semua pengamat akan dihentikan.

If menunggu salah (default), panggilan akan segera kembali setelah panggilan stop_signal
pada setiap proses.

If menunggu Benar, panggilan akan kembali hanya ketika proses berhenti benar-benar berakhir.
Karena opsi graceful_timeout, ini bisa memakan waktu.

pertandingan parameter dapat memiliki nilai sederhana untuk perbandingan string, bola untuk wildcard
cocok (default) atau regex untuk pencocokan regex.

perintah line
$ circusctl stop [nama] [--menunggu] [--match=simple|glob|regex]

Opsi
· : nama atau pola pengamat

· : metode pertandingan pengamat

CLI alat
puncak sirkus
puncak sirkus adalah konsol top-like yang dapat Anda jalankan untuk menonton langsung sistem Circus Anda yang sedang berjalan. Dia
akan menampilkan CPU, penggunaan Memori, dan hit soket jika Anda memilikinya.

Contoh keluaran:

-------------------------------------------------- ---------------------
statistik sirkus
PID CPU (%) MEMORI (%)
14252 0.8 0.4
0.8 (rata-rata) 0.4 (jumlah)

boneka
PID CPU (%) MEMORI (%)
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 (rata-rata) 0.5 (jumlah)

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

puncak sirkus adalah konsol baca-saja. Jika Anda ingin berinteraksi dengan sistem, gunakan sirkus.

sirkus
sirkus dapat digunakan untuk menjalankan perintah apa pun yang tercantum dalam perintah. Misalnya, Anda bisa mendapatkan
daftar semua pengamat, Anda dapat melakukannya

$ daftar sirkusctl

Selain mendukung beberapa opsi, Anda juga dapat menentukan titik akhir sirkus harus
menggunakan menggunakan CIRCUSCTL_ENDPOINT variabel lingkungan.

jaringan konsul
Circus dilengkapi dengan Web Console yang dapat digunakan untuk mengelola sistem.

Konsol Web memungkinkan Anda:

· Hubungkan ke sistem Circus yang sedang berjalan

· Perhatikan proses penggunaan CPU dan Memori secara real-time

· Tambahkan atau matikan proses

· Tambahkan pengamat baru

CATATAN:
Fitur penggunaan CPU & Memori waktu nyata menggunakan soket statistik. Jika Anda menghendaki
aktifkan, pastikan sistem Circus yang akan Anda sambungkan memiliki statistik yang ditentukan
diaktifkan dalam konfigurasinya:

[sirkus]
statsd = Benar

Secara default, opsi ini tidak diaktifkan.

Konsol web adalah paketnya sendiri, Anda perlu menginstal:

$ pip instal circus-web

Untuk mengaktifkan konsol, tambahkan beberapa opsi di file Circus ini:

[sirkus]
httpd = Benar
httpd_host = host lokal
httpd_port = 8080

httpd_host dan httpd_port adalah opsional, dan default ke localhost dan 8080.

Jika Anda ingin menjalankan aplikasi web sendiri, jalankan saja sirkushttpd naskah:

$ sirkushttpd
Server botol mulai...
Mendengarkan http://localhost: 8080 /
Tekan Ctrl-C untuk keluar.

Secara default skrip akan menjalankan Konsol Web pada port 8080, tetapi opsi --port dapat
digunakan untuk mengubahnya.

Menggunakan itu konsol
Setelah skrip berjalan, Anda dapat membuka browser dan mengunjungi http://localhost: 8080. Anda
harus mendapatkan layar ini: [gambar]

Konsol Web siap disambungkan ke sistem Circus, karena endpoint. Oleh
default titik akhir adalah tcp://127.0.0.1:5555.

Setelah Anda memukul Terhubung, aplikasi web akan terhubung ke sistem Circus.

Dengan Konsol Web masuk, Anda akan mendapatkan daftar pengamat, dan status waktu nyata
dari dua proses Circus (circusd dan circusd-stats).

Anda dapat mengklik status setiap pengamat untuk beralih dari Aktif (hijau) untuk non-aktif
(merah). Perubahan ini berlaku segera dan memungkinkan Anda memulai & menghentikan pengamat.

Jika Anda mengklik nama pengamat, Anda akan mendapatkan halaman web untuk pengamat tertentu,
dengan proses-prosesnya:

Di layar ini, Anda dapat menambah atau menghapus proses, dan mematikan yang sudah ada.

Last but not least, Anda dapat menambahkan pengamat baru dengan mengklik Add Pengintai tautan masuk
menu kiri: .SS Berjalan di belakang Nginx

Nginx dapat bertindak sebagai proxy dan lapisan keamanan di depan web sirkus.

CATATAN:
Untuk menerima pembaruan status dan grafik secara real-time di web sirkus, Anda harus menyediakan Nginx
solusi proxy yang memiliki dukungan websocket

Nginx >= 1.3.13
Pada Nginx>=1.3.13 dukungan websocket sudah ada di dalamnya, jadi tidak perlu menggabungkan Nginx
dengan Varnish atau HAProxy. Contoh konfigurasi Nginx dengan dukungan websocket:

hulu circusweb_server {
server 127.0.0.1:8080;
}

server {
dengarkan 80;
nama server _;

lokasi /
proxy_pass http://circusweb_server;
proxy_http_version 1.1;
proxy_set_header Tingkatkan $http_upgrade;
proxy_set_header Koneksi "upgrade";
proxy_set_header Host $ host;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for;
proxy_set_header X-Diteruskan-Proto http;
proxy_redirect mati;
}

tempat ~/media/\*(.png|.jpg|.css|.js|.ico)$ {
alias /path_to_site-packages/circusweb/media/;
}
}

Nginx < 1.3.13
Versi Nginx < 1.3.13 tidak memiliki dukungan soket web bawaan.

Untuk memberikan dukungan soket web untuk web sirkus saat menggunakan Nginx < 1.3.13, Anda dapat menggabungkan
Nginx dengan Varnish atau HAProxy. Yaitu, Nginx di depan web sirkus, dengan Varnish atau
HAProxy di depan Nginx.

Contoh di bawah ini menunjukkan konfigurasi Nginix dan Varnish gabungan yang diperlukan untuk proxy
circus-web dan menyediakan dukungan websocket.

Nginx konfigurasi:

hulu circusweb_server {
server 127.0.0.1:8080;
}

server {
dengarkan 8001;
nama server _;

lokasi /
proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for;
proxy_set_header Tuan rumah $http_host;
proxy_redirect mati;
proxy_pass http://circusweb_server;
}

tempat ~/media/\*(.png|.jpg|.css|.js|.ico)$ {
alias /path_to_site-packages/circusweb/media/;
}
}

Jika Anda menginginkan lebih banyak opsi konfigurasi Nginx, lihat http://wiki.nginx.org/HttpProxyModule.

Pernis konfigurasi:

standar latar belakang {
.host = "127.0.0.1";
.port = "8001";
}

soket ujung belakang {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 1 detik;
.first_byte_timeout = 2 detik;
.between_bytes_timeout = 60 detik;
}

sub vcl_pipa {
if (permintaan.http.upgrade) {
atur bereq.http.upgrade = req.http.upgrade;
}
}

sub vcl_recv {
if (req.http.Upgrade ~ "(?i)websocket") {
set req.backend = soket;
kembali (pipa);
}
}

Dalam contoh konfigurasi Varnish di atas, dua backend didefinisikan. Satu melayani web
konsol dan satu melayani koneksi soket. Permintaan konsol web terikat ke port
8001. Arahan 'server' Nginx harus dikonfigurasi untuk mendengarkan pada port 8001.

Koneksi soket web ditingkatkan dan disalurkan langsung ke proses mendengarkan sirkushttpd
pada port 8080 oleh Varnish. yaitu melewati proxy Nginx.

Ubuntu
Sejak versi 13.10 (Cakep), Ubuntu menyertakan Nginx dengan dukungan soket web sendiri
repositori. Untuk versi yang lebih lama, Anda dapat menginstal Nginx>=1.3.13 dari Nginx resmi
PPA stabil, seperti:

sudo apt-get install properti perangkat lunak python
sudo add-apt-repository ppa:nginx/stable
sudo update apt-get
sudo apt-get install nginx
nginx -v

Perlindungan kata sandi sirkushttpd
Seperti yang dijelaskan di halaman Keamanan, menjalankan sirkushttpd cukup tidak aman. Kami tidak menyediakan
keamanan apa pun di Circus itu sendiri, tetapi Anda dapat melindungi konsol Anda di level NGinx, dengan
menggunakan http://wiki.nginx.org/HttpAuthBasicModule

Contoh:

lokasi /
proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for;
proxy_set_header Tuan rumah $http_host;
proxy_set_header X-Host yang Diteruskan: $http_host;
proxy_set_header X-Forwarded-Proto: $skema;
proxy_redirect mati;
proxy_pass http://127.0.0.1: 8080;
auth_basic "Dibatasi";
auth_basic_user_file /path/ke/htpasswd;
}

htpasswd file berisi pengguna dan kata sandi mereka, dan permintaan kata sandi akan muncul ketika
Anda mengakses konsol.

Anda dapat menggunakan skrip htpasswd Apache untuk mengeditnya, atau skrip Python yang mereka sediakan di:
http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

Namun, tidak ada dukungan asli untuk penggunaan gabungan Otentikasi HTTP dan
WebSockets (server akan membuang kode kesalahan HTTP 401). Solusinya adalah dengan menonaktifkan
otentikasi untuk server socket.io.

Contoh (perlu ditambahkan sebelum aturan sebelumnya):

lokasi /socket.io {
proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for;
proxy_set_header Tuan rumah $http_host;
proxy_set_header X-Host yang Diteruskan: $http_host;
proxy_set_header X-Forwarded-Proto: $skema;
proxy_redirect mati;
proxy_pass http://127.0.0.1: 8080;
}

Tentu saja itu hanya salah satu cara untuk melindungi konsol web Anda, Anda bisa menggunakan banyak cara lainnya
teknik.

Memperluas itu jaringan konsol
Kami memilih botol untuk membangun webconsole, terutama karena itu adalah kerangka kerja yang sangat kecil yang
tidak berbuat banyak. Dengan melihat kode konsol web, Anda akhirnya akan menemukan
bahwa itu sangat sederhana untuk dipahami.

Berikut cara pembagiannya:

· Itu sirkushttpd.py file berisi definisi "tampilan" dan beberapa kode untuk menangani
koneksi soket (melalui socketio).

· NS pengontrol.py berisi satu kelas yang bertugas melakukan komunikasi
dengan pengontrol sirkus. Ini memungkinkan untuk memiliki API tingkat tinggi yang lebih bagus saat mendefinisikan
server web.

Jika Anda ingin menambahkan fitur di konsol web, Anda dapat menggunakan kembali kode yang sudah ada. SEBUAH
beberapa alat yang Anda inginkan untuk memudahkan proses:

· Ada sebuah render_template fungsi, yang mengambil argumen bernama yang Anda berikan padanya dan
meneruskannya ke perender template dan mengembalikan HTML yang dihasilkan. Itu juga melewati beberapa
variabel tambahan, seperti sesi, versi sirkus dan klien jika ditentukan.

· Jika Anda ingin menjalankan perintah dan pengalihan doa tergantung hasilnya, Anda dapat menggunakan
itu jalankan_perintah fungsi, yang mengambil callable sebagai argumen pertama, pesan dalam kasus
sukses dan url pengalihan.

StatsNamespace class bertanggung jawab untuk mengelola komunikasi websocket di
sisi server. Dokumentasinya akan membantu Anda memahami fungsinya.

Kerja dengan soket
Circus dapat mengikat soket jaringan dan mengelolanya seperti halnya untuk proses.

Ide utamanya adalah bahwa proses anak yang dibuat oleh Circus untuk menjalankan salah satu dari watcher
perintah dapat mewarisi dari semua deskriptor file yang dibuka.

Begitulah cara kerja Apache atau Unicorn, dan banyak alat lain di luar sana.

Tujuan
Tujuan memiliki soket yang dikelola oleh Circus adalah untuk dapat mengelola aplikasi jaringan
di Circus persis seperti aplikasi lain.

Misalnya, jika Anda menggunakan Circus dengan Kaus kaki -- server WGSI, Anda bisa mendapatkan yang sangat cepat
menjalankan dan mengelola server web "Web Pekerja" di Circus seperti yang akan Anda lakukan untuk yang lain
proses.

Memisahkan manajemen soket dari aplikasi jaringan itu sendiri menawarkan banyak
peluang untuk menskalakan dan mengelola tumpukan Anda.

Mendesain
Inti dari fitur ini dilakukan dengan mengikat soket dan mulai mendengarkannya di
sirkus:

soket impor

kaus kaki = soket.socket(Keluarga, JENIS)
kaus kaki.bind((HOST, PORT))
kaus kaki.dengarkan(BACKLOG)
fd = kaus kaki.fileno()

Circus kemudian melacak semua fds yang dibuka, dan membiarkan prosesnya berjalan sebagai anak-anak
memiliki akses ke mereka jika mereka mau.

Jika Anda membuat skrip jaringan Python kecil yang ingin Anda jalankan di Circus, itu bisa
terlihat seperti ini:

soket impor
impor sys

fd = int(sys.argv[1]) # mendapatkan FD dari sirkus
kaus kaki = socket.fromfd(fd, FAMILY, TYPE)

# berurusan dengan satu permintaan pada satu waktu
sementara Benar:
samb, addr = sock.accept()
permintaan = samb.recv(1024)
.. lakukan sesuatu ..
conn.sendall(respons)
samb.tutup()

Kemudian Circus bisa berjalan seperti ini:

[sirkus]
cek_delay = 5
titik akhir = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[pengamat: bodoh]
cmd = mycoolscript $(circus.sockets.foo)
use_sockets = Benar
pemanasan_penundaan = 0
numproses = 5

[soket: foo]
tuan rumah = 127.0.0.1
pelabuhan = 8888

$(circus.sockets.foo) akan digantikan oleh nilai FD setelah soket dibuat dan
terikat pada 8888 pelabuhan.

CATATAN:
Mulai Circus 0.8 ada sintaks alternatif untuk menghindari beberapa konflik dengan beberapa
pengurai konfigurasi. Kamu bisa menulis:

((sirkus.sockets.foo))

Dunia nyata contoh
Kaus kaki adalah pendamping Circus yang sempurna jika Anda ingin menjalankan aplikasi WSGI Anda.

Setelah diinstal, jalankan 5 dikurung pekerja dapat dilakukan dengan membuat soket dan
memanggil kaus kaki perintah di pekerja, seperti ini:

[sirkus]
titik akhir = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[pengamat:web]
cmd = chaussette --fd $(circus.sockets.web) --backend meinheld mycool.app
use_sockets = Benar
numproses = 5

[soket: web]
tuan rumah = 0.0.0.0
pelabuhan = 8000

Kami belum menerbitkan tolok ukur, tetapi kluster Web yang dikelola oleh Circus dengan Gevent atau
Backend Meinheld secepat server WSGI pre-fork di luar sana.

Menggunakan built-in plugin
Circus hadir dengan beberapa plugin bawaan. Bagian ini menyajikan plugin ini dan mereka
opsi konfigurasi.

Statistik
menggunakan setel ke 'circus.plugins.statsd.StatsdEmitter'

nama aplikasi
nama yang digunakan untuk mengidentifikasi awalan ember untuk memancarkan statistik (itu akan menjadi
diawali dengan sirkus. dan diakhiri dengan .pengintai)

tuan rumah tuan rumah untuk mengirim data statistik ke

pelabuhan port yang didengarkan daemon statsd

tingkat_sampel
jika Anda lebih suka tingkat sampel yang berbeda dari 1, Anda dapat mengaturnya di sini

Statistik Lengkap
Ekstensi pada plugin Statsd yang juga menerbitkan statistik proses. Seperti itu
memiliki opsi konfigurasi yang sama seperti Statsd dan berikut ini.

menggunakan mulai sirkus.plugins.statsd.FullStats

kecepatan_ulang
frekuensi plugin harus meminta statistik dalam hitungan detik. Standar: 60.

RedisObserver
Layanan ini mengamati proses redis untuk Anda, menerbitkan informasi ke statsd
dan menawarkan untuk memulai ulang pengamat ketika tidak bereaksi dalam batas waktu yang diberikan. Plugin ini
membutuhkan redis-py untuk berlari.

Ini memiliki konfigurasi yang sama dengan statsd dan menambahkan yang berikut:

menggunakan mulai sirkus.plugins.redis_observer.RedisObserver

kecepatan_ulang
frekuensi plugin harus meminta statistik dalam hitungan detik. Standar: 60.

redis_url
database untuk diperiksa sebagai url redis. Bawaan: "redis://localhost:6379/0"

batas waktu
batas waktu dalam hitungan detik yang dapat diambil permintaan sebelum dianggap turun.
Default ke 5.

restart_on_timeout
nama proses untuk memulai kembali saat permintaan habis. Tidak ada restart
dipicu saat tidak diberikan. Standar: Tidak ada.

HttpObserver
Layanan ini mengamati proses http untuk Anda dengan melakukan ping ke situs web tertentu secara teratur.
Mirip dengan pengamat redis, ia menawarkan untuk memulai ulang pengamat jika terjadi kesalahan. Itu membutuhkan
angin topan untuk berlari.

Ini memiliki konfigurasi yang sama dengan statsd dan menambahkan yang berikut:

menggunakan mulai sirkus.plugins.http_observer.HttpObserver

kecepatan_ulang
frekuensi plugin harus meminta statistik dalam hitungan detik. Standar: 60.

cek_url
url yang akan diperiksa. Bawaan: http://localhost/

batas waktu
batas waktu dalam hitungan detik yang dapat diambil permintaan sebelum dianggap turun.
Default ke 10.

restart_on_error
nama proses untuk memulai kembali saat permintaan habis atau mengembalikan apa pun
jenis kesalahan lainnya. Tidak ada restart yang dipicu saat tidak diberikan. Standar: Tidak ada.

Pengamat Sumber Daya
Layanan ini mengawasi sumber daya dari proses yang diberikan dan memicu restart ketika
mereka terlalu sering melampaui batasan tertentu secara berturut-turut.

Ini memiliki konfigurasi yang sama dengan statsd dan menambahkan yang berikut:

menggunakan mulai sirkus.plugins.resource_watcher.ResourceWatcher

kecepatan_ulang
frekuensi plugin harus meminta statistik dalam hitungan detik. Standar: 60.

pengintai
pengamat sumber daya ini harus dijaga. (sebelumnya disebut
layanan tapi layanan sekarang tidak digunakan lagi)

max_cpu
Proses cpu maksimum yang diizinkan untuk dikonsumsi (dalam %). Standar: 90

min_cpu
Proses cpu minimum yang harus dikonsumsi (dalam %). Default: Tidak ada (tidak ada minimum)
Anda dapat mengatur min_cpu ke 0 (nol), dalam hal ini jika satu proses mengkonsumsi dengan tepat
0% cpu, itu akan memicu batas yang terlampaui.

max_mem
Jumlah memori yang diizinkan untuk dikonsumsi oleh satu proses pengamat ini. Bawaan:
90. Jika tidak ada unit yang ditentukan, nilainya dalam %. Contoh: 50 Jika suatu satuan adalah
ditentukan, nilainya dalam byte. Satuan yang didukung adalah B, K, M, G, T, P, E, Z, Y.
Contoh: 250M

min_mem
Memori minimum yang harus dikonsumsi oleh satu proses pengamat ini. Bawaan: Tidak ada (tidak ada
minimum). Jika tidak ada unit yang ditentukan, nilainya dalam %. Contoh: 50 Jika suatu satuan adalah
ditentukan, nilainya dalam byte. Satuan yang didukung adalah B, K, M, G, T, P, E, Z, Y.
Contoh: 250M

ambang_kesehatan
Kesehatan adalah rata-rata cpu dan memori (dalam %) proses pengamat adalah
diperbolehkan untuk dikonsumsi (dalam %). Standar: 75

jumlah_maks
Seberapa sering batas-batas ini (masing-masing dihitung secara terpisah) diperbolehkan
terlampaui sebelum restart akan dipicu. Standar: 3

Contoh:

[sirkus]
; ...

[pengamat: program]
cmd = tidur 120

[plugin: plugin saya]
gunakan = circus.plugins.resource_watcher.ResourceWatcher
pengamat = program
min_cpu = 10
maks_cpu = 70
min_mem = 0
max_mem = 20

Penjaga
Plugin yang mengikat soket udp dan menunggu pesan pengawas. Untuk "dijaga"
proses, pengawas akan membunuh mereka jika mereka tidak mengirim detak jantung dalam waktu tertentu
periode waktu yang diwujudkan oleh loop_rate * max_count. (sirkus akan secara otomatis
restart proses yang hilang di pengamat)

Setiap proses yang dipantau harus mengirim pesan udp setidaknya pada loop_rate. udp
format pesan adalah sebaris teks, didekodekan menggunakan pesan_regex parameter. Detak jantung
pesan HARUS setidaknya berisi pid dari proses pengiriman pesan.

Daftar pengamat yang dipantau ditentukan oleh parameter pengamat_regex dalam
konfigurasi.

Parameter konfigurasi:

menggunakan mulai sirkus.plugins.watchdog.WatchDog

kecepatan_ulang
tingkat loop pengawas dalam hitungan detik. Di setiap loop, WatchDog akan mencari "mati"
proses.

pengamat_regex
regex untuk mencocokkan nama pengamat yang harus dipantau oleh pengawas
(bawaan: .* semua pengamat dipantau)

pesan_regex
regex untuk mendekodekan pesan detak jantung yang diterima di udp (default:
^(?P .*);(?P .*)$) format default adalah pesan teks sederhana:
pid; stempel waktu

jumlah_maks
jumlah maksimum loop yang dilewati tanpa menerima detak jantung apa pun sebelum memulai kembali
proses (default: 3)

ip ip pengawas akan mengikat (default: 127.0.0.1)

pelabuhan port yang akan diikat oleh pengawas (default: 1664)

Mengepakkan
Ketika seorang pekerja terlalu sering memulai ulang, kami mengatakan bahwa itu adalah mengepak. Plugin ini melacak
pekerja memulai ulang dan menghentikan pengamat yang sesuai jika itu mengepak. Ini
plugin dapat digunakan untuk secara otomatis menghentikan pekerja yang terus-menerus dimulai ulang karena
mereka tidak bekerja dengan benar.

menggunakan mulai circus.plugins.flapping.flapping

upaya
berapa kali suatu proses dapat dimulai ulang, dalam jendela detik, sebelum kita
anggap itu mengepak (default: 2)

jendela jendela waktu dalam hitungan detik untuk menguji mengepakkan. Jika proses restart lagi
dari upaya kali dalam jendela waktu ini, kami menganggapnya sebagai proses mengepak.
(bawaan: 1)

coba lagi_in
waktu dalam hitungan detik untuk menunggu sampai kita mencoba untuk memulai kembali proses yang telah
mengepak. (bawaan: 7)

max_retry
berapa kali kita mencoba untuk memulai proses yang telah mengepak, sebelumnya
kita meninggalkan dan menghentikan seluruh pengamat. (default: 5) Setel ke -1 untuk menonaktifkan
max_retry dan coba lagi tanpa batas.

aktif tentukan apakah plugin aktif atau tidak (default: True). Jika bendera global adalah
disetel ke False, plugin tidak dimulai.

Opsi dapat diganti di bagian pengamat menggunakan a mengepak. awalan. Misalnya,
di sini adalah bagaimana Anda akan mengonfigurasi yang spesifik max_retry nilai untuk nginx:

[pengamat: nginx]
cmd = /path/ke/nginx
mengepak.max_retry = 2

[pengamat: skrip saya]
cmd = ./script_saya.py

; ...pengamat lainnya

[plugin: mengepak]
gunakan = circus.plugins.flapping.Flapping
max_retry = 5

CommandReloader
Plugin ini akan memulai ulang pengamat ketika file perintah mereka diubah. Ini bekerja dengan
memeriksa waktu modifikasi dan jalur file yang ditunjukkan oleh cmd pilihan setiap
kecepatan_ulang detik. Ini mungkin berguna saat mengembangkan proses pekerja atau bahkan untuk hot
peningkatan kode dalam produksi.

menggunakan mulai sirkus.plugins.command_reloader.CommandReloader

kecepatan_ulang
frekuensi plugin harus memeriksa modifikasi dalam hitungan detik. Standar: 1.

Penyebaran
Meskipun daemon Circus dapat dikelola dengan perintah circusd, lebih mudah untuk memilikinya
mulai saat boot. Jika sistem Anda mendukung Pemula, Anda dapat membuat skrip Pemula ini di
/etc/init/circus.conf.

mulai pada sistem file dan net-device-up IFACE=lo
berhenti di runlevel [016]

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

Ini mengasumsikan bahwa circusd.ini terletak di /etc/circus/circusd.ini. Setelah reboot, Anda
dapat mengontrol sirkus dengan perintah layanan:

# layanan sirkus start/stop/restart

Jika sistem Anda mendukung systemd, Anda dapat membuat file unit systemd ini di bawah
/etc/systemd/system/circus.service.

[Satuan]
Description=Manajer proses sirkus
Setelah=syslog.target jaringan.target nss-lookup.target

[Layanan]
Ketik = sederhana
ExecReload=/usr/bin/circusctl memuat ulang
ExecStart=/usr/bin/circusd /etc/circus/circus.ini
Mulai ulang = selalu
RestartSec = 5

[Memasang]
WantedBy=default.target

Reboot tidak diperlukan jika Anda menjalankan perintah daemon-reload di bawah ini:

# systemctl --sistem daemon-reload

Kemudian sirkus dapat dikelola melalui:

# systemctl start/stop/status/reload sirkus

Resep
Bagian ini akan berisi resep untuk menyebarkan Circus. Sampai saat itu Anda dapat melihat Pete's
Wayang resep atau di Remy's Koki resep

Paus Proses Inti
Satu masalah yang umum terjadi pada manajer proses adalah Anda tidak dapat memulai ulang manajer proses
tanpa memulai ulang semua proses yang dikelolanya. Hal ini membuat sulit untuk menyebarkan
versi baru Circus atau versi baru dari perpustakaan mana pun yang menjadi sandarannya.

Jika Anda menggunakan sistem tipe Unix, Circus dapat menggunakan kernel proses Papa. Saat digunakan, Papa
akan membuat daemon berumur panjang yang akan berfungsi sebagai host untuk semua proses dan soket
Anda membuat dengan itu. Jika sirkus dimatikan, Papa akan mempertahankan semua yang dihostingnya.

Pengaturan
Mulailah dengan menginstal ayah dan setproctitle modul:

instal pip papa
instal pip setproctitle

setproctitle modul adalah opsional. Ini akan digunakan jika ada untuk mengganti nama daemon Papa
untuk puncak dan ps untuk sesuatu seperti "papa daemon dari sirkus". Jika Anda tidak menginstal
setproctitle modul, judul itu akan menjadi baris perintah dari proses yang meluncurkannya.
Sangat membingungkan.

Setelah Papa diinstal, tambahkan gunakan_papa=benar ke proses dan soket kritis Anda.
Umumnya Anda ingin menyimpan semua proses tumpukan Anda di Papa, dan tidak satu pun dari
Proses dukungan sirkus seperti plugin mengepakkan dan statistik.

[sirkus]
tingkat log = info

[pengamat: 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
pemanasan_penundaan = 3
waktu tunggu grace_timeout = 10
max_retry = 5
lajang = benar
send_hup = benar
stop_signal = KELUAR
stdout_stream.class = FileStream
stdout_stream.namafile = /var/logs/web-server.log
stdout_stream.max_bytes = 10000000
stdout_stream.backup_count = 10
stderr_stream.class = FileStream
stderr_stream.nama file = /var/logs/web-server-error.log
stderr_stream.max_bytes = 1000000
stderr_stream.backup_count = 10
aktif = benar
use_papa = benar

[pengamat: pencatat]
cmd = /my_service/env/bin/python logger.py jalankan
working_dir = /layanan_saya
waktu tunggu grace_timeout = 10
lajang = benar
stop_signal = INT
stdout_stream.class = FileStream
stdout_stream.namafile = /var/logs/logger.log
stdout_stream.max_bytes = 10000000
stdout_stream.backup_count = 10
stderr_stream.class = FileStream
stderr_stream.nama file = /var/logs/logger.log
stderr_stream.max_bytes = 1000000
stderr_stream.backup_count = 10
prioritas = 50
use_papa = benar

[pengamat: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 = /layanan_saya/web_app
anggun_waktu habis=10
stop_signal = KELUAR
use_sockets = Benar
stdout_stream.class = FileStream
stdout_stream.namafile = /var/logs/web_app.log
stdout_stream.max_bytes = 10000000
stdout_stream.backup_count = 10
stderr_stream.class = FileStream
stderr_stream.nama file = /var/logs/web_app.log
stderr_stream.max_bytes = 1000000
stderr_stream.backup_count = 10
hooks.after_spawn = contoh.uwsgi_lossless_reload.children_started
hooks.before_signal = contoh.uwsgi_lossless_reload.clean_stop
hooks.extended_stats = contoh.uwsgi_lossless_reload.extended_stats
prioritas = 40
use_papa = benar

[soket: web]
path = /layanan_saya/sock/uwsgi
use_papa = benar

[plugin: mengepak]
gunakan = circus.plugins.flapping.Flapping
jendela = 10
prioritas = 1000

CATATAN:
Jika proses Papa menggunakan soket apa saja, soket tersebut juga harus menggunakan papa.

Mendesain Tujuan
Papa dirancang dengan fitur dan persyaratan yang sangat minimalis. Itu:

· Mulai dan hentikan soket

· Sediakan penyimpanan kunci/nilai

· Mulai proses dan kembalikan stdout, stderr, dan kode keluar

Itu tidak:

· Mulai ulang proses

· Menyediakan cara untuk menghentikan proses

· Berikan informasi apa pun tentang proses selain apakah proses tersebut masih berjalan atau tidak

Papa tidak memerlukan perpustakaan pihak ketiga sehingga dapat berjalan hanya pada perpustakaan Python standar.
Itu dapat menggunakan setproctitle paket tapi itu hanya digunakan untuk membuat judul
lebih cantik untuk ps dan puncak dan tidak esensial.

Fungsionalitas telah dibuat seminimal mungkin sehingga Anda tidak perlu memulai ulang
Papa daemon. Sebagian besar fungsi telah didorong ke perpustakaan klien sebagai
mungkin. Dengan begitu, Anda seharusnya dapat menerapkan salinan Papa baru untuk fitur klien baru
tanpa perlu me-restart daemon Papa. Papa dimaksudkan untuk menjadi pilar stabilitas di
lautan perpustakaan pihak ke-3 yang terus berubah.

Operasi
Kebanyakan hal tetap tidak berubah apakah Anda menggunakan Papa atau tidak. Anda masih bisa memulai dan berhenti
proses. Anda masih bisa mendapatkan status dan statistik untuk proses. Hal utama yang berubah
apakah itu ketika Anda melakukannya? sirkus berhenti, semua proses Papa dibiarkan berjalan. ketika kamu
awal sirkus cadangan, proses tersebut dipulihkan.

CATATAN:
Ketika proses dipulihkan, sebelum_mulai dan sebelum_bertelur kait dilewati.

Logging
Saat Circus dimatikan, Papa akan menyimpan hingga 2M output per proses. Maka itu akan
mulai membuang data terlama. Saat Anda me-restart Circus, output yang di-cache ini akan cepat
diambil dan dikirim ke output stream. Papa mensyaratkan bahwa penerimaan output menjadi
diakui, jadi Anda tidak akan kehilangan output apa pun selama shutdown.

Tidak hanya itu, Papa menyimpan stempel waktu dari output. Sirkus telah ditingkatkan menjadi
manfaatkan data cap waktu jika ada. Jadi jika Anda menulis output ke file log
atau di suatu tempat, stempel waktu Anda semua harus benar.

Masalah
Jika Anda menggunakan termasuk or dek perintah untuk mengubah jumlah proses untuk pengamat, ini akan
disetel ulang ke level yang ditentukan dalam file INI ketika sirkus dimulai ulang.

Juga, saya telah mengalami masalah dengan kombinasi salin_env dan virtualenv. Kamu boleh
perhatikan bahwa sampel INI di atas menghindari masalah ini dengan jalur eksplisit.

Telnet Antarmuka
Papa memiliki antarmuka baris perintah dasar yang dapat Anda akses melalui telnet:

telnet localhost 20202
membantu

Sirkus untuk pengembang
Menggunakan Sirkus as a perpustakaan
Circus menyediakan kelas dan fungsi tingkat tinggi yang memungkinkan Anda mengelola proses di
aplikasi Anda sendiri.

Misalnya, jika Anda ingin menjalankan empat proses selamanya, Anda dapat menulis:

dari sirkus impor get_arbiter

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

arbiter = get_arbiter([program saya])
coba:
arbiter.mulai()
akhirnya:
wasit.berhenti()

Cuplikan ini akan menjalankan empat contoh program saya dan awasi untuk Anda, mulai ulang
jika mereka mati mendadak.

Untuk mempelajari lebih lanjut tentang ini, lihat perpustakaan

Memperluas Sirkus
Sangat mudah untuk memperluas Circus untuk membuat sistem yang lebih kompleks, dengan mendengarkan semua
sirkus acara melalui pub/sub salurannya, dan mengemudikannya melalui perintah.

Begitulah cara kerja fitur mengepak misalnya: ia mendengarkan semua proses yang sekarat,
mengukur seberapa sering itu terjadi, dan menghentikan pengamat yang dicurigai setelah terlalu banyak memulai ulang
upaya.

Circus hadir dengan sistem plugin untuk membantu Anda menulis ekstensi semacam itu, dan beberapa built-in
plugin yang dapat Anda gunakan kembali. Lihat plugin.

Anda juga dapat memiliki perilaku startup dan shutdown yang lebih halus dengan menggunakan kait sistem
yang akan memungkinkan Anda menjalankan kode arbitrer sebelum dan setelah beberapa proses dimulai atau
berhenti. Lihat kait.

Last but not least, Anda juga dapat menambahkan perintah baru. Lihat menambahkancmds.

Pengembang Dokumentasi Indeks
Sirkus Perpustakaan
Paket Circus terdiri dari level tinggi dapatkan_arbiter() fungsi dan banyak kelas. Di
kebanyakan kasus, menggunakan fungsi tingkat tinggi sudah cukup, karena menciptakan segala sesuatu yang
diperlukan agar Circus dapat berjalan.

Anda dapat mensubklasifikasikan kelas Circus jika Anda membutuhkan lebih banyak perincian daripada yang ditawarkan oleh
konfigurasi.

dapatkan_arbiter fungsi
dapatkan_arbiter() hanyalah kenyamanan di atas berbagai kelas sirkus. Ini menciptakan
arbiter (kelas Wasit) contoh dengan opsi yang disediakan, yang pada gilirannya menjalankan satu
Pengintai dengan satu Proses.

sirkus.get_arbiter()

Contoh:

dari sirkus impor get_arbiter

arbiter = get_arbiter([{"cmd": "program saya", "numproses": 3}])
coba:
arbiter.mulai()
akhirnya:
wasit.berhenti()

Kelas
Circus menyediakan serangkaian kelas yang dapat Anda gunakan untuk mengimplementasikan manajer proses Anda sendiri:

· Proses: membungkus proses yang sedang berjalan dan menyediakan beberapa pembantu di atasnya.

· Pengintai: menjalankan beberapa contoh Proses terhadap perintah yang sama. Kelola kematian dan
kehidupan proses.

· Wasit: mengelola beberapa Pengintai.

kelas circus.process.Process(nama, lebar, cmd, args=Tidak ada, working_dir=Tidak ada, kulit=Salah,
uid=Tidak ada, gid=Tidak ada, env=Tidak ada, rlimits=Tidak ada, dapat dieksekusi=Tidak ada, use_fds=Salah, pengamat=Tidak ada,
bibit=Benar, pipe_stdout=Benar, pipe_stderr=Benar, close_child_stdout=Salah,
close_child_stderr=Salah)
Membungkus sebuah proses.

Pilihan:

· lebar: pengidentifikasi unik proses. Nilai ini akan digunakan untuk menggantikan $lebar
string di baris perintah jika ada.

· cmd: perintah untuk menjalankan. Dapat berisi salah satu variabel yang tersedia yaitu
diteruskan ke kelas ini. Mereka akan diganti menggunakan sintaks format python.

· args: argumen untuk menjalankan perintah. Bisa berupa daftar atau string. Jika args is
sebuah string, itu dipisah menggunakan shlex.split(). Default ke Tidak Ada.

· executable: Ketika executable diberikan, item pertama dalam urutan args
diperoleh dari cmd masih diperlakukan oleh sebagian besar program sebagai nama perintah, yang
kemudian dapat berbeda dari nama yang dapat dieksekusi yang sebenarnya. Itu menjadi tampilan
nama untuk program pelaksana di utilitas seperti ps.

· kerja_dir: direktori kerja untuk menjalankan perintah. Jika tidak disediakan, akan
default ke direktori kerja saat ini.

· tempurung: jika Benar, akan menjalankan perintah di lingkungan shell. Salah secara default
peringatan: ini is a keamanan bahaya.

· uid: jika diberikan, apakah id pengguna atau nama perintah yang harus dijalankan. Sekarang
uid adalah default.

· gid: jika diberikan, apakah id grup atau nama yang harus dijalankan oleh perintah. Sekarang
.gid adalah defaultnya.

· env: pemetaan yang berisi variabel lingkungan yang akan dijalankan oleh perintah.
Pilihan.

· batas: pemetaan yang berisi nama dan nilai rlimit yang akan ditetapkan sebelum
perintah berjalan.

· gunakan_fds: jika Benar, tidak akan menutup fds di subproses. Harus disetel ke
Benar di Windows jika stdout atau stderr dialihkan. default: Salah.

· pipa_stdout: jika Benar, akan membuka PIPA di stdout. standar: Benar.

· pipa_stderr: jika Benar, akan membuka PIPA di stderr. standar: Benar.

· close_child_stdout: Jika Benar, alihkan stdout proses anak ke /dev/null
setelah garpu. default: Salah.

· close_child_stderr: Jika Benar, alihkan stdout proses anak ke /dev/null
setelah garpu. default: Salah.

usia() Kembalikan usia proses dalam hitungan detik.

anak-anak()
Kembalikan daftar pid anak.

info () Informasi proses pengembalian.

Info yang dikembalikan adalah pemetaan dengan kunci-kunci ini:

· mem_info1: Memori Ukuran Set Resident dalam byte (RSS)

· mem_info2: Ukuran Memori Virtual dalam byte (VMS).

· cpu: % penggunaan cpu.

· Anggota: % penggunaan memori.

· waktu: memproses waktu CPU (pengguna + sistem) dalam hitungan detik.

· pid: identitas proses

· nama pengguna: nama pengguna yang memiliki proses.

· bagus: proses kebaikan (antara -20 dan 20)

· cmdline: baris perintah tempat proses dijalankan.

adalah_anak(pid)
Kembali Benar adalah yang diberikan pid adalah anak dari proses itu.

pid Kembalikan pid

kirim_sinyal(*args, **kw)
Mengirim sinyal sig ke proses.

send_signal_child(*args, **kw)
Kirim sinyal tanda tangan untuk anak pid.

send_signal_children(*args, **kw)
Kirim sinyal tanda tangan kepada semua anak.

status Kembalikan status proses sebagai konstanta

· BERLARI

· MATI_ATAU_ZOMBIE

· TIDAK ADA

· LAINNYA

stderr Kembalikan stdout aliran

stdout Kembalikan stdout aliran

berhenti(*arg, **kw)
Hentikan proses dan tutup stdout/stderr

Jika proses yang sesuai masih ada di sini (biasanya sudah dibunuh oleh
pengamat), SIGTERM dikirim, kemudian SIGKILL setelah 1 detik.

Proses shutdown (SIGTERM lalu SIGKILL) biasanya dilakukan oleh
pengintai. Jadi jika prosesnya masih ada di sini, itu semacam perilaku buruk
karena batas waktu yang anggun tidak akan dihormati di sini.

Contoh:

>>> dari Proses impor sirkus.proses
>>> proses = Proses('Atas', 'atas', shell=True)
>>> proses.usia()
3.0107998847961426
>>> proses.info()
'Atas: 6812 N/A tarek Zombie N/AN/AN/AN/AN/A'
>>> proses.status
1
>>> proses.stop()
>>> proses.status
2
>>> proses.info()
'Tidak ada proses seperti itu (dihentikan?)'

kelas circus.watcher.Watcher(nama, cmd, args=Tidak ada, numproses=1, pemanasan_delay=0.0,
working_dir=Tidak ada, kulit=Salah, shell_args=Tidak ada, uid=Tidak ada, maks_coba lagi=5, gid=Tidak ada,
send_hup=Salah, stop_sinyal=15, stop_children=Salah, env=Tidak ada, graceful_timeout=30.0,
prereload_fn=Tidak ada, rlimits=Tidak ada, dapat dieksekusi=Tidak ada, stdout_stream=Tidak ada, stderr_stream=Tidak ada,
prioritas=0, lingkaran=Tidak ada, tunggal = Salah, use_sockets=Salah, copy_env=Salah,
copy_path=Salah, usia_maks=0, max_age_variance=30, kait=Tidak ada, respawn=Benar, autostart=Benar,
on_demand=Salah, virtualenv=Tidak ada, close_child_stdout=Salah, close_child_stderr=Salah,
virtualenv_py_ver=Tidak ada, use_papa=Salah, **pilihan)
Kelas mengelola daftar proses untuk perintah yang diberikan.

Pilihan:

· nama: nama yang diberikan kepada pengamat. Digunakan untuk mengidentifikasinya secara unik.

· cmd: perintah untuk menjalankan. Mungkin berisi $lebar, yang akan digantikan oleh lebar.

· args: argumen untuk menjalankan perintah. Bisa berupa daftar atau string. Jika args is
sebuah string, itu dipisah menggunakan shlex.split(). Default ke Tidak Ada.

· proses bilangan: Jumlah proses yang akan dijalankan.

· kerja_dir: direktori kerja untuk menjalankan perintah. Jika tidak disediakan, akan
default ke direktori kerja saat ini.

· tempurung: jika Benar, akan menjalankan perintah di lingkungan shell. Salah secara default
peringatan: ini is a keamanan bahaya.

· uid: jika diberikan, apakah id pengguna atau nama perintah yang harus dijalankan. Sekarang
uid adalah default.

· gid: jika diberikan, apakah id grup atau nama yang harus dijalankan oleh perintah. Sekarang
.gid adalah defaultnya.

· kirim_hup: jika True akan dilakukan proses reload dengan mengirimkan sinyal SIGHUP.
Default ke Salah.

· stop_signal: sinyal yang akan dikirim saat menghentikan proses. Default ke SIGTERM.

· berhenti_anak-anak: kirim stop_signal kepada anak-anak juga. Default ke Salah.

· env: pemetaan yang berisi variabel lingkungan yang akan dijalankan oleh perintah.
Pilihan.

· batas: pemetaan yang berisi nama dan nilai rlimit yang akan ditetapkan sebelum
perintah berjalan.

· stdout_stream: pemetaan yang mendefinisikan aliran untuk proses stdout. Default
ke Tidak Ada.

Pilihan. Ketika disediakan, stdout_stream adalah pemetaan yang berisi hingga tiga kunci:

· kelas: kelas aliran. Default untuk sirkus.stream.FileStream

· nama file: nama file, jika menggunakan FileStream

· max_bytes: ukuran file maksimum, setelah itu file keluaran baru dibuka. default
ke 0 yang berarti tidak ada ukuran maksimum (hanya berlaku dengan FileStream).

· cadangan_jumlah: berapa banyak cadangan yang harus disimpan saat memutar file menurut
parameter max_bytes. default ke 0 yang berarti tidak ada cadangan yang dibuat (hanya
berlaku dengan FileStream)

Pemetaan ini akan digunakan untuk membuat aliran yang dapat dipanggil dari kelas yang ditentukan.
Setiap entri yang diterima oleh callable adalah pemetaan yang berisi:

· pid - proses pid

· nama - nama aliran (stderr or stdout)

· data - data

Ini tidak didukung di Windows.

· stderr_stream: pemetaan yang mendefinisikan aliran untuk proses stderr. Default
ke Tidak Ada.

Pilihan. Ketika disediakan, stderr_stream adalah pemetaan yang berisi hingga tiga kunci:
- kelas: kelas aliran. Default untuk sirkus.stream.FileStream - nama file: Yang
nama file, jika menggunakan FileStream - max_bytes: ukuran file maksimum, setelah itu baru
file keluaran adalah
dibuka. default ke 0 yang berarti tidak ada ukuran maksimum (hanya berlaku dengan
Aliran File)

· cadangan_jumlah: berapa banyak cadangan yang harus disimpan saat memutar file menurut
parameter max_bytes. default ke 0 yang berarti tidak ada cadangan yang dibuat (hanya
berlaku dengan FileStream).

Pemetaan ini akan digunakan untuk membuat aliran yang dapat dipanggil dari kelas yang ditentukan.

Setiap entri yang diterima oleh callable adalah pemetaan yang berisi:

· pid - proses pid

· nama - nama aliran (stderr or stdout)

· data - data

Ini tidak didukung di Windows.

· prioritas -- integer yang mendefinisikan prioritas bagi pengamat. Ketika Arbiter melakukan
beberapa operasi pada semua pengamat, itu akan mengurutkannya dengan bidang ini, dari
bilangan yang lebih besar ke yang terkecil. (bawaan: 0)

· tunggal -- Jika Benar, pengamat ini memiliki satu proses. (default: Salah)

· gunakan_socket -- Jika Benar, proses akan mewarisi deskriptor file, sehingga dapat
menggunakan kembali soket yang dibuka oleh sirkus. (default: Salah)

· sesuai_permintaan -- Jika Benar, proses akan dimulai hanya pada koneksi pertama
ke soket (default: False)

· salin_env -- Jika Benar, lingkungan tempat sirkus berjalan akan menjadi
direproduksi untuk para pekerja. Ini default ke True pada Windows karena Anda tidak dapat menjalankan
apa pun yang dapat dieksekusi tanpa SISTEMROOT variabel. (default: Salah)

· salin_jalur -- Jika Benar, sirkus sys.path dikirim ke proses melalui PYTHONPATH.
Anda harus mengaktifkan salin_env untuk salin_jalur bekerja. (default: Salah)

· usia_maks: Jika disetel setelah sekitar max_age detik, prosesnya diganti dengan yang baru
satu. (default: 0, Dinonaktifkan)

· max_age_variance: Jumlah detik maksimum yang dapat ditambahkan ke max_age.
Nilai ekstra ini untuk menghindari memulai ulang semua proses secara bersamaan. SEBUAH
proses akan hidup antara max_age dan max_age + max_age_variance detik.

· kait: fungsi panggilan balik untuk menghubungkan ke startup dan shutdown pengamat
proses. kait adalah dict di mana setiap kunci adalah nama kait dan setiap nilai adalah a
2-tuple dengan nama callable atau callable itu sendiri dan flag boolean
menunjukkan jika pengecualian yang terjadi di hook tidak boleh diabaikan. Mungkin
nilai untuk nama kait: sebelum_mulai, setelah_mulai, sebelum_bertelur, setelah_bertelur,
sebelum_berhenti, setelah_berhenti., sebelum_sinyal, setelah_sinyal or diperpanjang_stats.

· Pilihan -- Opsi tambahan untuk pekerja. Semua opsi ditemukan dalam konfigurasi
file misalnya, dilewatkan dalam pemetaan ini -- ini dapat digunakan oleh plugin untuk
opsi khusus pengamat.

· respawn -- Jika disetel ke Salah, proses yang ditangani oleh pengamat tidak akan
muncul kembali secara otomatis. (bawaan: Benar)

· virtualenv -- Direktori root dari sebuah virtualenv. Jika disediakan, pengamat akan
memuat lingkungan untuk eksekusinya. (default: Tidak ada)

· close_child_stdout: Jika Benar, tutup stdout setelah garpu. default: Salah.

· close_child_stderr: Jika Benar, tutup stderr setelah garpu. default: Salah.

· gunakan_papa: Jika Benar, gunakan kernel proses papa untuk proses ini. default: Salah.

proses_pembunuhan(*args, **kwarg)
Matikan proses (stop_signal, graceful_timeout lalu SIGKILL)

kill_processes(*args, **kwarg)
Bunuh semua proses (stop_signal, graceful_timeout lalu SIGKILL)

kelola_proses(*args, **kwarg)
Kelola proses.

notify_event(topik, pesan)
Publikasikan pesan di saluran penerbit acara

menuai_dan_mengelola_proses(*args, **kwarg)
Menuai & mengelola proses.

menuai_proses(*args, **kw)
Menuai semua proses untuk pengamat ini.

send_signal_child(*args, **kw)
Kirim sinyal ke anak.

spawn_process(recovery_wid=Tidak ada)
Proses bertelur.

Kembalikan Benar jika ok, Salah jika pengamat harus dihentikan

spawn_proses(*args, **kwarg)
Proses pemijahan.

kelas circus.arbiter.Arbiter(pengamat, titik akhir, pubsub_endpoint, cek_delay=1.0,
prereload_fn=Tidak ada, konteks=Tidak ada, lingkaran=Tidak ada, statsd=Salah, stats_endpoint=Tidak ada,
statsd_close_outputs=Salah, multicast_endpoint=Tidak ada, plugin=Tidak ada, soket=Tidak ada,
pemanasan_delay=0, httpd=Salah, httpd_host='localhost', httpd_port=8080,
httpd_close_outputs=Salah, debug=Salah, debug_gc=Salah, ssh_server=Tidak ada,
proc_name='sirkus', pidfile=Tidak ada, loglevel=Tidak ada, logoutput=Tidak ada, loggerconfig=Tidak ada,
fqdn_prefix=Tidak ada, umask=Tidak ada, endpoint_owner=Tidak ada, papa_endpoint=Tidak ada)
Kelas digunakan untuk mengontrol daftar pengamat.

Pilihan:

· pengamat -- daftar objek Pengamat

· endpoint -- titik akhir pengontrol ZMQ

· pubsub_endpoint -- titik akhir pubsub

· statistik -- Jika Benar, proses circusd-stats dijalankan (default: False)

· stats_endpoint -- titik akhir statistik.

· statsd_close_outputs -- jika True mengirimkan circusd-stats stdout/stderr ke
/dev/null (default: Salah)

· multicast_endpoint -- titik akhir multicast untuk penemuan otomatis kluster sirkus
(default: udp://237.219.251.97:12027) Multicast addr harus antara 224.0.0.0
ke 239.255.255.255 dan sama untuk semua cluster.

· cek_delay -- penundaan antara dua titik pengontrol (default: 1 d)

· pramuat ulang_fn -- callable yang akan dieksekusi pada setiap reload (default: None)

· konteks -- jika tersedia, konteks zmq akan digunakan kembali. (default: Tidak ada)

·

lingkaran: if asalkan, a zmq.eventloop.ioloop.IOLoop contoh
untuk digunakan kembali. (default: Tidak ada)

· plugin -- daftar plugin. Setiap item adalah pemetaan dengan:

· menggunakan -- Nama yang sepenuhnya memenuhi syarat yang menunjuk ke kelas plugin

· setiap nilai lainnya diteruskan ke plugin di config Option

· soket - pemetaan soket. Setiap kunci adalah nama soket, dan setiap nilai a
Soket Sirkus kelas. (default: Tidak ada)

· pemanasan_penundaan -- penundaan dalam hitungan detik antara dua startup pengamat. (bawaan: 0)

· httpd -- Jika Benar, proses circushttpd dijalankan (default: False)

· httpd_host -- host circushttpd (default: localhost)

· httpd_port -- port sirkushttpd (default: 8080)

· httpd_close_outputs -- jika Benar, kirim circushttpd stdout/stderr ke /dev/null.
(default: Salah)

· men-debug -- jika Benar, tambahkan banyak info debug di stdout (default: False)

· debug_gc -- jika Benar, apakah gc.set_debug(gc.DEBUG_LEAK) (default: False) ke sirkus
untuk menganalisis masalah (default: False)

· nama_proc -- nama proses arbiter

·

fqdn_prefix -- a awalan untuk itu unik identifier of itu sirkus
contoh pada cluster.

· titik akhir_pemilik -- pengguna unix untuk menentukan titik akhir jika menggunakan ipc.

· papa_titik akhir -- titik akhir kernel proses papa

add_watcher(*argumen, **kwarg)
Menambahkan pengamat.

Pilihan:

· nama: nama pengamat untuk ditambahkan

· cmd: perintah untuk menjalankan.

· semua opsi lain yang ditentukan dalam konstruktor Watcher.

get_watcher(nama)
Kembalikan pengamat nama.

jumlahproses()
Kembalikan jumlah proses yang berjalan di semua pengamat.

pengamat angka()
Kembalikan jumlah pengamat.

isi ulang(*args, **kwarg)
Muat ulang semuanya.

Jalankan isi ulang_fn() dapat dipanggil jika ada, lalu muat ulang semua pengamat dengan anggun.

mulai(*arg, **kwarg)
Mulai semua pengamat.

Jika ioloop telah disediakan selama panggilan __init__(), memulai semua pengamat
sebagai coroutine standar

Jika ioloop belum disediakan selama panggilan __init__() (default), dimulai
semua pengamat dan eventloop (dan blok di sini). Dalam mode ini metodenya
TIDAK HARUS menghasilkan apa pun karena ini disebut sebagai metode standar.

Parameters
cb -- Panggilan balik dipanggil setelah semua pengamat dimulai, ketika
loop belum disediakan.

Writing plugin
Circus hadir dengan sistem plugin yang memungkinkan Anda berinteraksi dengan sirkus.

CATATAN:
Kami mungkin menambahkan dukungan circusd-stats ke plugin nanti.

Plugin terdiri dari dua bagian:

· pelanggan ZMQ untuk semua acara yang diterbitkan oleh sirkus

· klien ZMQ untuk mengirim perintah ke sirkus

Setiap plugin dijalankan sebagai proses terpisah di bawah pengamat khusus.

Beberapa contoh plugin yang dapat Anda buat dengan sistem ini:

· sistem pemberitahuan yang mengirimkan peringatan email ketika seorang pengamat mengepak

· pencatat

· alat yang menambah atau menghapus proses tergantung pada beban

· dll.

Circus sendiri hadir dengan beberapa plugin bawaan.

Plugin Sirkus kelas
Circus menyediakan kelas dasar untuk membantu Anda mengimplementasikan plugin: sirkus.plugins.CircusPlugin

kelas circus.plugins.CircusPlugin(titik akhir, pubsub_endpoint, cek_delay, ssh_server=Tidak ada,
**konfigurasi)
Kelas dasar untuk menulis plugin.

Pilihan:

· konteks -- konteks ZMQ yang akan digunakan

· endpoint -- titik akhir sirkus ZMQ

· pubsub_endpoint -- titik akhir pub/sub sirkus ZMQ

· cek_delay -- penundaan pemeriksaan yang dikonfigurasi

· config -- pemetaan konfigurasi gratis

panggilan (perintah, **Atribut)
Mengirim perintah ke sirkus

Pilihan:

· Command -- perintah untuk memanggil

· props -- argumen kata kunci untuk ditambahkan ke panggilan

Mengembalikan pemetaan JSON yang dikirim kembali oleh sirkus

pemeran (perintah, **Atribut)
Api-dan-lupakan perintah untuk sirkus

Pilihan:

· Command -- perintah untuk memanggil

· props -- argumen kata kunci untuk ditambahkan ke panggilan

pegangan_init()
Dipanggil tepat sebelum plugin dimulai - dalam konteks utas.

handle_recv(data)
Menerima setiap acara yang diterbitkan oleh sirkus

Pilihan:

· data -- tuple yang berisi topik dan pesan.

pegangan_berhenti()
Dipanggil tepat sebelum plugin dihentikan oleh Circus.

Saat diinisialisasi oleh Circus, kelas ini membuat loop acaranya sendiri yang menerima semua
sirkus acara dan meneruskannya ke handle_recv(). Data yang diterima adalah sebuah tuple yang berisi
topik dan data itu sendiri.

handle_recv() harus diimplementasikan oleh plugin.

panggilan() dan Pemeran() metode dapat digunakan untuk berinteraksi dengan sirkus jika Anda sedang membangun
Plugin yang secara aktif berinteraksi dengan daemon.

pegangan_init() dan pegangan_berhenti() hanyalah metode praktis yang dapat Anda gunakan untuk menginisialisasi dan
bersihkan kode Anda. pegangan_init() disebut dalam utas yang baru saja dimulai.
pegangan_berhenti() dipanggil di utas utama tepat sebelum utas dihentikan dan digabungkan.

Writing a Plugin
Mari kita menulis sebuah plugin yang log in file setiap peristiwa yang terjadi di sirkus. Dibutuhkan satu
argumen yang merupakan nama file.

Plugin mungkin terlihat seperti ini:

dari circus.plugins impor CircusPlugin

kelas Logger (CircusPlugin):

nama = 'pencatat'

def __init__(diri, *args, **konfigurasi):
super(Logger, mandiri).__init__(*args, **config)
self.namafile = config.get('namafile')
self.file = Tidak ada

def handle_init(sendiri):
self.file = open(self.filename, 'a+', buffering=1)

def handle_stop(mandiri):
diri.file.close()

def handle_recv(sendiri, data):
nama_pengamat, tindakan, pesan = self.split_data(data)
pesan_dikt = self.load_message(pesan)
self.file.write('%s %s::%r\n' % (aksi, nama_pengamat, msg_dict))

Itu dia ! Kelas ini dapat disimpan dalam paket/modul apa saja, asalkan dapat dilihat oleh
Python

Sebagai contoh, Pencatat dapat ditemukan di plugin modul dalam a proyek saya paket.

Asinkron permintaan
Jika Anda ingin melakukan operasi asinkron (seperti panggilan Tornado atau menggunakan
periodikCall) pastikan Anda menggunakan loop yang benar. Loop yang selalu ingin Anda gunakan
adalah self.loop karena diatur oleh kelas dasar. Loop default seringkali tidak sama
dan karena itu kode mungkin tidak dieksekusi seperti yang diharapkan.

mencoba a Plugin
Anda dapat menjalankan plugin melalui baris perintah dengan sirkus-plugin perintah, oleh
menentukan nama plugin yang sepenuhnya memenuhi syarat:

$ circus-plugin --endpoint tcp://127.0.0.1:5555 --pubsub tcp://127.0.0.1:5556 --config nama file:circus-events.log proyek saya.plugins.Logger
[INFO] Memuat plugin...
[INFO] Titik akhir: 'tcp://127.0.0.1:5555'
[INFO] Pub/sub: 'tcp://127.0.0.1:5556'
[INFO] Mulai

Cara lain untuk menjalankan plugin adalah membiarkan Circus menangani inisialisasinya. Ini dilakukan oleh
menambahkan [pengaya:NAMA] bagian dalam file konfigurasi, di mana NAMA adalah nama yang unik untuk
plugin Anda:

[plugin: pencatat]
gunakan = myproject.plugins.Logger
nama file = /var/myproject/circus.log

menggunakan adalah wajib dan menunjuk ke nama plugin yang sepenuhnya memenuhi syarat.

Ketika Circus dimulai, ia menciptakan pengamat dengan satu proses yang menjalankan kelas runcing, dan
meneruskan variabel lain yang terdapat di bagian ke konstruktor plugin melalui config
pemetaan.

Anda juga dapat menambahkan plugin secara terprogram saat Anda membuat sirkus.arbiter.arbiter kelas
atau penggunaan sirkus.get_arbiter(), lihat perpustakaan.

Pertunjukan
Karena setiap plugin dimuat dalam prosesnya sendiri, seharusnya tidak memengaruhi keseluruhan
kinerja sistem selama pekerjaan yang dilakukan oleh plugin tidak terlalu banyak
panggilan ke sirkus proses.

kait
Circus menyediakan kait yang dapat digunakan untuk memicu tindakan pada acara pengamat. Tersedia
kait adalah:

· sebelum_mulai: dipanggil sebelum pengamat dimulai. Jika kaitnya kembali Salah itu
startup dibatalkan.

· setelah_mulai: dipanggil setelah pengamat dimulai. Jika kaitnya kembali Salah pengamat
segera dihentikan dan startup dibatalkan.

· sebelum_bertelur: dipanggil sebelum pengamat memunculkan proses baru. Jika kaitnya kembali Salah
pengamat segera dihentikan dan startup dibatalkan.

· setelah_bertelur: dipanggil setelah pengamat memunculkan proses baru. Jika kaitnya kembali Salah
pengamat segera dihentikan dan startup dibatalkan.

· sebelum_berhenti: dipanggil sebelum pengamat dihentikan. Hasil hook diabaikan.

· setelah_berhenti: dipanggil setelah pengamat dihentikan. Hasil hook diabaikan.

· sebelum_sinyal: dipanggil sebelum sinyal dikirim ke proses pengamat. Jika kaitnya
Pengembalian Salah sinyal tidak terkirim (kecuali SIGKILL yang selalu terkirim)

· setelah_sinyal: dipanggil setelah sinyal dikirim ke proses pengamat.

· diperpanjang_stats: dipanggil ketika statistik diminta dengan extended=True. Digunakan untuk menambahkan
statistik khusus proses ke output statistik biasa.

Example
Sebuah kasus penggunaan yang khas adalah untuk mengontrol bahwa semua kondisi terpenuhi untuk proses untuk memulai.
Katakanlah Anda memiliki pengamat yang berjalan Redis dan seorang pengamat yang menjalankan skrip Python yang
bekerja dengan Redis. Dengan Circus Anda dapat memesan startup dengan menggunakan prioritas opsi:

[pengamat: pekerja antrian]
cmd = python -u pekerja.py
prioritas = 1

[pengamat: redis]
cmd = redis-server
prioritas = 2

Dengan pengaturan ini, Circus akan dimulai Redis pertama dan kemudian akan memulai pekerja antrian.
Tapi Circus tidak benar-benar mengendalikan itu Redis sedang berjalan. Itu baru saja dimulai
proses itu diminta untuk memulai. Apa yang kita lewatkan di sini adalah cara untuk mengendalikannya Redis is
dimulai dan berfungsi penuh. Fungsi yang mengontrol ini dapat berupa:

impor redis
waktu impor

def check_redis(*args, **kw):
time.sleep(.5) # beri kesempatan untuk memulai
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
kembali r.get('foo') == 'bar'

Fungsi ini dapat dicolokkan ke Circus sebagai sebelum_mulai kait:

[pengamat: pekerja antrian]
cmd = python -u pekerja.py
hooks.before_start = mycoolapp.myplugins.check_redis
prioritas = 1

[pengamat: redis]
cmd = redis-server
prioritas = 2

Setelah Circus dimulai redis pengamat, itu akan memulai pekerja antrian pengamat, sejak
itu mengikuti prioritas Memerintah. Tepat sebelum memulai pengamat kedua, itu akan berjalan
itu cek_redis fungsi, dan jika itu kembali Salah akan membatalkan pengamat mulai
proses.

Menghubungkan tanda tangan
Sebuah hook harus mengikuti tanda tangan ini:

def hook(pengamat, wasit, hook_name, **kwargs):
...
# Jika Anda tidak mengembalikan True, hook dapat berubah
# perilaku sirkus (tergantung kailnya)
kembali Benar

Where pengintai adalah Pengintai contoh kelas, wasit itu Wasit satu, nama_kait kaitnya
nama dan kwarg beberapa parameter opsional tambahan (tergantung pada jenis kait).

setelah_bertelur hook menambahkan parameter pid:

def after_spawn(pengamat, arbiter, hook_name, pid, **kwargs):
...
# Jika Anda tidak mengembalikan True, sirkus akan mematikan prosesnya
kembali Benar

Where pid adalah PID dari proses yang sesuai.

Demikian juga, sebelum_sinyal dan setelah_sinyal kait tambahkan pid dan signum:

def before_signal_hook(pengamat, arbiter, hook_name, pid, signum, **kwargs):
...
# Jika Anda tidak mengembalikan True, sirkus tidak akan mengirim sinyal signum
# (SIGKILL selalu terkirim)
kembali Benar

Where pid adalah PID dari proses yang sesuai dan tanda tangan adalah sinyal yang sesuai.

Anda dapat mengabaikannya tetapi dapat menggunakan data dan metode pengamat dan/atau arbiter dapat
berguna dalam beberapa kait.

Perhatikan bahwa kait dipanggil dengan argumen bernama. Jadi gunakan tanda tangan kail tanpa
mengubah nama argumen.

diperpanjang_stats hook memiliki parameter tambahan sendiri di kwarg:

def extended_stats_hook(pengamat, wasit, hook_name, pid, statistik, **kwargs):
...

Where pid adalah PID dari proses yang sesuai dan statistik statistik reguler menjadi
dikembalikan. Tambahkan statistik Anda sendiri ke dalam statistik. Contohnya ada di
contoh/uwsgi_lossless_reload.py.

Sebagai contoh terakhir, berikut adalah super hook yang dapat menangani semua jenis sinyal:

def super_hook(pengamat, wasit, hook_name, **kwargs):
pid = Tidak ada
tanda = Tidak ada
jika hook_name di ('before_signal', 'after_signal'):
pid = kwargs['pid']
tanda = kwargs['tanda']
...
kembali Benar

Menghubungkan peristiwa
Setiap kali sebuah hook dijalankan, hasilnya akan diberitahukan sebagai sebuah event di Circus.

Ada dua event yang berhubungan dengan hook:

· hook_sukses: sebuah kait berhasil dipanggil. Kunci acara adalah nama namanya jika
acara, dan waktu: tanggal kejadian.

· hook_failure: sebuah kait telah gagal. Kunci acara adalah nama nama jika acara, waktu:
tanggal acara dan kesalahan: pengecualian yang terjadi dalam peristiwa tersebut, jika ada.

Menambahkan yang baru perintah
Kami mencoba membuat penambahan perintah baru sesederhana mungkin.

Anda perlu melakukan tiga hal:

1. buat perintah_Anda.py file di bawah sirkus/perintah/.

2. Implementasikan satu kelas di sana, dengan metode yang telah ditentukan sebelumnya

3. Tambahkan perintah baru di sirkus/perintah/__init__.py.

Katakanlah kita ingin menambahkan perintah yang mengembalikan jumlah pengamat yang sedang digunakan,
kami akan melakukan sesuatu seperti ini (berkomentar secara ekstensif untuk memungkinkan Anda mengikuti lebih banyak
dengan mudah):

dari perintah impor circus.commands.base
dari circus.exc impor ArgumentError, MessageError
kelas NumWatchers(Perintah):
"""Ini adalah praktik yang baik untuk menggambarkan apa yang dilakukan kelas di sini.

Lihat perintah lain untuk melihat bagaimana kita terbiasa memformat
teks ini. Ini akan secara otomatis dimasukkan dalam dokumentasi,
jadi jangan takut habis-habisan, itulah yang dibuat
untuk.
"" "
# semua perintah mewarisi dari `circus.commands.base.Command`

# Anda perlu menentukan nama sehingga kami menemukan kembali perintahnya
nama = "pengamat angka"

# Setel menunggu ke Benar atau Salah untuk menentukan perilaku default Anda
# - Jika waiting adalah True, perintah dijalankan secara sinkron, dan klien mungkin mendapatkan
# hasil kembali.
# - Jika menunggu salah, perintah dijalankan secara tidak sinkron di server dan klien segera
# mendapat balasan 'ok'
#
# Secara default, perintah diatur ke waiting = False
menunggu = Benar

# pilihan
pilihan = [('', 'optname', default_value, 'deskripsi')]

properti = ['foo', 'bar']
# properti mencantumkan argumen perintah yang wajib. Jika mereka adalah
# tidak disediakan, maka akan muncul kesalahan

def mengeksekusi (diri, arbiter, alat peraga):
# metode eksekusi adalah inti dari perintah: taruh di sini semua
# logika perintah dan kembalikan dict yang berisi nilai yang Anda
# ingin kembali, jika ada
kembali {"numwatchers": arbiter.numwatchers()}

def console_msg(sendiri, pesan):
# msg adalah apa yang dikembalikan oleh metode eksekusi.
# metode ini digunakan untuk memformat respons untuk konsol (ini adalah
# digunakan misalnya oleh circusctl untuk mencetak pesannya)
mengembalikan "string yang akan ditampilkan"

pesan def(self, *args, **opts):
# pesan menangani masukan konsol.
# metode ini digunakan untuk memetakan argumen konsol ke perintah
# pilihan. (ini digunakan misalnya saat memanggil perintah melalui
#sirkusctl)
# NotImplementedError akan dilempar jika fungsinya tidak ada
jumlahArgs = 1
jika tidak len(args) == numArgs:
raise ArgumentError('Jumlah argumen tidak valid.')
lain:
opts['optname'] = args[0]
kembalikan self.make_message(**opts)

def memvalidasi (diri, alat peraga):
# metode ini digunakan untuk memvalidasi bahwa argumen yang diteruskan ke
# perintah benar. ArgumentError harus dilemparkan untuk berjaga-jaga
# ada kesalahan dalam argumen yang diteruskan (misalnya jika mereka
# tidak cocok bersama.
# Jika ada masalah dengan konten mereka, MessageError
# harus dibuang. Metode ini dapat mengubah konten alat peraga
# dict, itu akan diteruskan untuk dieksekusi setelahnya.

penggunaan kasus contoh
Bab ini menyajikan beberapa kasus penggunaan, untuk memberi Anda gambaran tentang cara menggunakan Circus di
lingkungan.

Running a WSGI aplikasi
Menjalankan aplikasi WSGI dengan Circus cukup menarik karena Anda dapat menonton & mengelola
Tujuan jaringan pekerja menggunakan puncak sirkus, sirkus atau antarmuka Web.

Ini dimungkinkan dengan menggunakan soket Circus. Lihat mengapacircussocket.

Mari kita ambil contoh dengan minimal Piramida Aplikasi:

dari piramida.config impor Configurator
dari piramida.respon impor Respon

def hello_world(permintaan):
return Response('Halo %(nama)s!' % request.matchdict)

konfigurasi = Konfigurasi ()
config.add_route('halo', '/halo/{nama}')
config.add_view(hello_world, route_name='halo')
aplikasi = config.make_wsgi_app()

Simpan skrip ini ke dalam app.py file, lalu instal proyek-proyek itu:

$ pip menginstal Piramida
$pip menginstal chaussette

Selanjutnya, pastikan Anda dapat menjalankan aplikasi Pyramid Anda menggunakan kaus kaki skrip konsol:

$ aplikasi chaussette.aplikasi
Aplikasi adalah
Melayani di localhost: 8080
Menggunakan sebagai backend

Dan periksa apakah Anda dapat mencapainya dengan mengunjungi http://localhost:8080/halo/tarek

Sekarang setelah aplikasi Anda aktif dan berjalan, mari buat file konfigurasi Circus:

[sirkus]
cek_delay = 5
titik akhir = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[pengamat: pekerja web]
cmd = chaussette --fd $(circus.sockets.webapp) aplikasi.aplikasi
use_sockets = Benar
numproses = 3

[soket: aplikasi web]
tuan rumah = 127.0.0.1
pelabuhan = 8080

File ini memberitahu Circus untuk mengikat soket pada port 8080 dan lari kaus kaki pekerja itu
socket -- dengan melewatkan fd-nya.

Simpan ke server.ini dan coba jalankan menggunakan sirkus

$ sirkus server.ini
[INFO] Memulai master di pid 8971
Soket [INFO] dimulai
[INFO] statistik sirkus dimulai
[INFO] aplikasi web dimulai
[INFO] Arbiter sekarang menunggu perintah

Pastikan Anda masih mengaktifkan aplikasi http://localhost:8080/halo/tarek.

Selamat ! Anda memiliki aplikasi WSGI yang menjalankan 3 pekerja.

Anda dapat menjalankan circushttpd atau cli, dan menikmati manajemen Circus.

Running a Django aplikasi
Menjalankan aplikasi Django dilakukan persis seperti menjalankan aplikasi WSGI. Menggunakan
PYTHONPATH untuk mengimpor direktori tempat proyek berada, direktori yang berisi
direktori yang memiliki settings.py di dalamnya (dengan Django 1.4+ direktori ini memiliki manage.py di dalamnya)
:

[soket: dwebapp]
tuan rumah = 127.0.0.1
pelabuhan = 8080

[pengamat: dwebworker]
cmd = chaussette --fd $(circus.sockets.dwebapp) dproject.wsgi.application
use_sockets = Benar
numproses = 2

[env:dwebworker]
PYTHONPATH = /path/ke/parent-of-dproject

Jika Anda harus melewati Django_SETTINGS_MODULE untuk pekerja backend misalnya, Anda bisa
lulus itu juga meskipun env opsi konfigurasi:

[pengamat: dbackend]
cmd = /path/ke/script.py
jumlahproses=3

[env:dbackend]
PYTHONPATH = /path/ke/parent-of-dproject
Django_SETTINGS_MODULE=dproject.settings

Lihat http://chaussette.readthedocs.org untuk lebih lanjut tentang chaussette.

Mendesain keputusan
Secara keseluruhan arsitektur
[gambar]

Sirkus terdiri dari proses utama yang disebut sirkus yang mengurus menjalankan semua
proses. Setiap proses yang dikelola oleh Circus adalah proses anak dari sirkus.

Proses diatur dalam kelompok yang disebut pengamat. Sebuah pengintai pada dasarnya adalah perintah
sirkus berjalan di sistem Anda, dan untuk setiap perintah Anda dapat mengonfigurasi berapa banyak proses yang Anda
ingin lari.

Konsep pengintai berguna ketika Anda ingin mengelola semua proses yang menjalankan
perintah yang sama -- seperti restart, dll.

sirkus mengikat dua soket ZeroMQ:

· PERTANYAAN/PERNYATAAN -- soket yang digunakan untuk mengontrol sirkus menggunakan berbasis json perintah.

· PUB/SUB - soket di mana sirkus menerbitkan acara, seperti saat proses dimulai atau
berhenti.

CATATAN:
Terlepas dari namanya, ZeroMQ bukanlah sistem manajemen antrian. Anggap saja sebagai
perpustakaan komunikasi antar proses (IPC).

Proses lain yang disebut statistik sirkus dijalankan oleh sirkus saat opsi diaktifkan.
statistik sirkusTugasnya adalah mempublikasikan statistik penggunaan CPU/Memori secara khusus PUB/SUB
channel.

Saluran khusus ini digunakan oleh puncak sirkus dan sirkus-httpd untuk menampilkan streaming langsung
dari kegiatan.

puncak sirkus adalah skrip konsol yang meniru puncak untuk menampilkan semua penggunaan CPU dan Memori dari
proses yang dikelola oleh Circus.

sirkus-httpd adalah antarmuka manajemen web yang memungkinkan Anda berinteraksi dengan Circus. Dia
menampilkan streaming langsung menggunakan soket web dan statistik sirkus saluran, tetapi juga membiarkan Anda
berinteraksi dengan sirkus melalui nya PERTANYAAN/PERNYATAAN channel.

Last but not least, sirkus adalah alat baris perintah yang memungkinkan Anda mengemudi sirkus melalui nya
PERTANYAAN/PERNYATAAN channel.

Anda juga dapat memiliki plugin yang berlangganan sirkus's PUB/SUB saluran dan biarkan Anda mengirim
perintah kepada PERTANYAAN/PERNYATAAN saluran seperti sirkus akan.

Security
Circus dibangun di atas perpustakaan ZeroMQ dan tidak memiliki keamanan sama sekali di dalamnya
protokol. Namun, Anda dapat menjalankan sistem Circus di server dan mengatur terowongan SSH untuk
mengaksesnya dari komputer lain.

Bagian ini menjelaskan apa yang Circus lakukan pada sistem Anda saat Anda menjalankannya, dan akhirnya
menjelaskan cara menggunakan terowongan SSH.

Anda juga bisa membaca http://www.zeromq.org/area: faq#toc5

TCP port
Secara default, Circus membuka port TCP berikut di host lokal:

· 5555 -- port yang digunakan untuk mengontrol sirkus melalui sirkus

· 5556 -- port yang digunakan untuk saluran Penerbit/Pelanggan.

· 5557 -- port yang digunakan untuk saluran statistik -- jika diaktifkan.

· 8080 -- port yang digunakan oleh UI Web -- jika diaktifkan.

Port ini memungkinkan aplikasi klien berinteraksi dengan sistem Circus Anda, dan bergantung pada caranya
infrastruktur Anda terorganisir, Anda mungkin ingin melindungi port ini melalui firewall or
konfigurasikan Circus untuk dijalankan menggunakan IPC Port.

Berikut adalah contoh menjalankan Circus hanya menggunakan titik masuk IPC:

[sirkus]
cek_delay = 5
titik akhir = ipc:///var/circus/endpoint
pubsub_endpoint = ipc:///var/circus/pubsub
stats_endpoint = ipc:///var/circus/stats

Saat Dikonfigurasi menggunakan IPC, perintah harus dijalankan dari kotak yang sama, tetapi tidak ada yang bisa
mengaksesnya dari luar, tidak seperti menggunakan TCP. Perintah juga harus dijalankan sebagai pengguna yang
memiliki akses tulis ke jalur soket ipc. Anda dapat mengubah pemilik endpoint menggunakan
itu titik akhir_pemilik opsi konfigurasi. Ini memungkinkan Anda untuk menjalankan sirkus sebagai pengguna root, tetapi
izinkan proses non-root mengirim perintah ke sirkus. Perhatikan bahwa saat menggunakan titik akhir_pemilik,
untuk mencegah proses non-root agar tidak dapat memulai proses arbitrer yang
dijalankan dengan hak istimewa yang lebih besar, perintah add akan memberlakukan bahwa Watchers baru harus dijalankan sebagai
itu titik akhir_pemilik pengguna. Definisi pengamat dalam file konfigurasi lokal tidak akan
dibatasi dengan cara ini.

Tentu saja, jika Anda mengaktifkan UI Web, 8080 pelabuhan akan tetap terbuka.

sirkushttpd
Saat Anda berlari sirkushttpd secara manual, atau saat Anda menggunakan httpd opsi dalam file ini seperti
ini:

[sirkus]
cek_delay = 5
titik akhir = ipc:///var/circus/endpoint
pubsub_endpoint = ipc:///var/circus/pubsub
stats_endpoint = ipc:///var/circus/stats
httpd = 1

Aplikasi web akan berjalan di port 8080 dan akan membiarkan siapa pun mengakses halaman web
mengelola sirkus daemon.

Itu termasuk membuat pengamat baru yang dapat menjalankan perintah apa pun di sistem Anda!

Do tidak membuat it di depan umum tersedia

Jika Anda ingin melindungi akses ke panel web, Anda dapat menyajikannya di belakang Nginx atau
Apache atau server web berkemampuan proxy apa pun, yang dapat menjaga keamanan.

Pengguna dan Kelompok izin
Secara default, semua proses yang dimulai dengan Circus akan berjalan dengan pengguna dan grup yang sama
as sirkus. Bergantung pada hak istimewa yang dimiliki pengguna pada sistem, Anda mungkin tidak memilikinya
akses ke semua fitur yang disediakan Circus.

Misalnya, beberapa fitur statistik pada proses yang sedang berjalan memerlukan hak istimewa yang diperpanjang.
Biasanya, jika nomor penggunaan CPU yang Anda dapatkan menggunakan statistik perintah adalah N / A, itu berarti milik Anda
pengguna tidak dapat mengakses file proc. Ini akan menjadi kasus secara default di bawah Mac OS X.

Kamu bisa lari sirkus sebagai root untuk memperbaikinya, dan atur uid dan gid nilai untuk setiap pengamat
untuk mendapatkan semua fitur.

Tapi hati-hati berlari sirkus karena root menghadapkan Anda pada potensi eskalasi hak istimewa
bug. Sementara kami melakukan yang terbaik untuk menghindari bug, berjalan sebagai root dan menghadapi bug yang
melakukan tindakan yang tidak diinginkan pada sistem Anda mungkin berbahaya.

Cara terbaik untuk mencegahnya adalah dengan memastikan bahwa sistem yang menjalankan Circus benar-benar
terisolasi (seperti VM) or untuk menjalankan seluruh sistem di bawah pengguna yang dikendalikan.

SSH penerowongan
Klien dapat terhubung ke a sirkus contoh dengan membuat terowongan SSH. Untuk melakukannya, lewati
opsi baris perintah --ssh diikuti oleh pengguna@alamat, Di mana pemakai adalah pengguna pada remote
server dan alamat adalah alamat server seperti yang terlihat oleh klien. Protokol SSH akan
memerlukan kredensial untuk menyelesaikan login.

If sirkus seperti yang terlihat oleh server SSH tidak pada alamat titik akhir default localhost: 5555
kemudian tentukan sirkus alamat menggunakan opsi --titik akhir

Dijamin penyiapan contoh
Menyiapkan server Circus yang aman dapat dilakukan dengan:

· Menjalankan Server SSH

· Menjalankan Apache atau Nginx di 80 port, dan melakukan reverse-proxy pada 8080 pelabuhan.

· Memblokir 8080 port dari akses luar.

· Menjalankan semua port ZMQ Circusd menggunakan file IPC alih-alih port TCP, dan melakukan tunneling semua
panggilan melalui SSH.
[gambar]

Berkontribusi untuk Sirkus
Circus telah dimulai di Mozilla tetapi tujuannya tidak hanya untuk tetap di sana. Kami sedang mencoba
untuk membangun alat yang berguna bagi orang lain, dan mudah dikembangkan.

Kami sangat terbuka untuk kontribusi apapun, dalam bentuk kode, dokumentasi, diskusi,
proposal fitur dll.

Anda dapat memulai topik di milis kami: http://tech.groups.yahoo.com/group/circus-dev/

Atau tambahkan masalah di kami kesalahan pelacak

Pemasangan salah ketik dan meningkatkan itu dokumentasi
Sangat mungkin bahwa mata Anda berdarah saat membaca setengah bahasa Inggris ini
dokumentasi setengah bahasa Prancis, jangan ragu untuk berkontribusi dalam penyusunan ulang / peningkatan apa pun di
formulir dalam dokumentasi. Anda mungkin bahkan tidak perlu memahami cara kerja Circus
di bawah tenda untuk melakukan itu.

Menambahkan yang baru fitur
Fitur-fitur baru tentu sangat dihargai. Jika Anda memiliki kebutuhan dan waktu untuk
mengerjakan fitur baru, menambahkannya ke Circus seharusnya tidak terlalu rumit. Kami mencoba sangat
sulit untuk memiliki API yang bersih dan dapat dimengerti, semoga sesuai dengan tujuannya.

Anda perlu menambahkan dokumentasi dan pengujian bersama dengan kode fitur baru.
Jika tidak, kami tidak akan dapat menerima tambalan.

Seterpercayaapakah Olymp Trade? Kesimpulan untuk menyerahkan Tujuan perubahan
Kami menggunakan git sebagai DVCS. Cara terbaik untuk mengusulkan perubahan adalah dengan membuat cabang di . Anda
samping (melalui git pemeriksaan -b nama cabang) dan komit perubahan Anda di sana. Setelah Anda memiliki
sesuatu yang siap untuk prime-time, mengeluarkan permintaan tarik terhadap cabang ini.

Kami mengikuti model ini untuk memungkinkan sambungan rendah di antara fitur-fitur Anda
melamar. Misalnya, kami dapat menerima satu permintaan tarik saat masih dalam diskusi
untuk satu lagi.

Sebelum mengusulkan perubahan Anda, periksa kembali apakah mereka tidak melanggar apa pun! Kamu bisa
gunakan Tox perintah untuk memastikan ini, itu akan menjalankan testsuite di bawah yang berbeda
versi python yang didukung.

Mohon gunakan : http://issue2pr.herokuapp.com/ untuk mereferensikan komit ke sirkus yang ada
masalah, jika ada.

Menghindari bergabung melakukan
Menghindari penggabungan komit memungkinkan untuk memiliki riwayat yang bersih dan dapat dibaca. Untuk melakukannya, alih-alih
melakukan "git pull" dan membiarkan git menangani penggabungan untuk Anda, menggunakan git pull --rebase will
letakkan perubahan Anda setelah perubahan yang dilakukan di cabang, atau saat mengerjakan
menguasai.

Artinya, bagi kami pengembang inti, tidak mungkin lagi menggunakan github green yang praktis
tombol pada permintaan tarik jika pengembang tidak membuat ulang pekerjaan mereka sendiri atau jika kami menunggu
terlalu banyak waktu antara permintaan dan penggabungan yang sebenarnya. Sebaliknya, alirannya terlihat seperti ini:

git remote tambahkan nama repo-url
git ambil nama
git checkout cabang fitur
git rebase master

# periksa apakah semuanya berfungsi dengan baik lalu gabungkan di master
tuan git checkout
git merge fitur-cabang

Sedang berdiskusi
Jika Anda membutuhkan bantuan saat melihat kode Circus, Anda bisa pergi
dan temukan kami di irc at #tenda sirkus on irc.freenode.org (atau jika Anda tidak memiliki IRC
klien, gunakan itu percakapan web)

Anda juga dapat memulai utas di milis kami -
http://tech.groups.yahoo.com/group/circus-dev

Sering Ditanyakan Pertanyaan
Berikut adalah daftar pertanyaan yang sering diajukan tentang Circus:

Seterpercayaapakah Olymp Trade? Kesimpulan tidak Sirkus tumpukan membandingkan untuk a klasik tumpukan?
Dalam tumpukan WSGI klasik, Anda memiliki server seperti Gunicorn yang melayani pada port atau
soket unix dan biasanya digunakan di belakang server web seperti Nginx: [image]

Klien memanggil Nginx, yang membalikkan semua panggilan ke Gunicorn.

Jika Anda ingin memastikan proses Gunicorn tetap berjalan, Anda harus menggunakan a
program seperti Supervisord atau pemula.

Gunicorn pada gilirannya mengawasi prosesnya ("pekerja").

Dengan kata lain Anda menggunakan dua tingkat manajemen proses. Salah satu yang Anda kelola dan
kontrol (pengawas), dan yang kedua yang harus Anda kelola di UI yang berbeda, dengan a
filosofi yang berbeda dan kontrol yang lebih sedikit atas apa yang terjadi (salah satu server wsgi)

Ini berlaku untuk Gunicorn dan sebagian besar server WSGI multi-proses di luar sana yang saya ketahui.
uWsgi sedikit berbeda karena menawarkan banyak pilihan.

Tetapi jika Anda ingin menambahkan server Redis di tumpukan Anda, Anda akan berakhir dengan mengelola
tumpukan proses di dua tempat yang berbeda.

Pendekatan sirkus dalam hal ini adalah mengelola proses dan soket.

Tumpukan Circus dapat terlihat seperti ini: [image]

Jadi, seperti Gunicorn, Circus mampu mengikat soket yang akan diproksi oleh Nginx. Sirkus
jangan berurusan dengan permintaan tetapi cukup ikat soket. Terserah pekerja web
proses untuk menerima koneksi pada soket dan melakukan pekerjaan.

Ini menyediakan fitur yang setara dari Supervisord tetapi juga akan membiarkan Anda mengelola semua
proses pada tingkat yang sama, apakah mereka adalah pekerja web atau Redis atau apa pun. Menambahkan
pekerja web baru dilakukan persis seperti menambahkan proses Redis baru.

Bangku
Kami melakukan beberapa bangku untuk membandingkan Circus & Chaussette dengan Gunicorn. Untuk meringkas, Circus adalah
tidak menambahkan overhead dan Anda dapat mengambil banyak backend yang berbeda untuk pekerja web Anda.

Lihat:

· http://blog.ziade.org/2012/06/28/wgsi-web-servers-bench

· http://blog.ziade.org/2012/07/03/wsgi-web-servers-bench-part-2

Seterpercayaapakah Olymp Trade? Kesimpulan untuk memecahkan Sirkus?
Secara default, sirkus menyimpan log-nya ke stdout agak jarang. Kurangnya output ini dapat
membuat hal-hal sulit untuk memecahkan masalah ketika proses tampaknya mengalami kesulitan memulai.

Untuk meningkatkan logging sirkus menyediakan, coba tingkatkan level log. Untuk melihat
level log yang tersedia cukup gunakan --membantu bendera.

$ sirkus --tes debug tingkat log.ini

Satu kata peringatan. Jika suatu proses mengepak dan tingkat log debug diaktifkan, Anda
akan melihat pesan untuk setiap upaya awal. Mungkin berguna untuk mengonfigurasi aplikasi yang
mengepak untuk menggunakan a pemanasan_penundaan untuk memperlambat pesan ke kecepatan yang dapat diatur.

[pengamat: webapp]
cmd = python -m aplikasi saya.wsgi
pemanasan_penundaan = 5

Secara default, stdout dan stderr ditangkap oleh sirkus proses. Jika Anda menguji
config dan ingin melihat output sesuai dengan output sirkus, Anda dapat mengkonfigurasi
pengamat untuk menggunakan StdoutStream kelas.

[pengamat: webapp]
cmd = python -m aplikasi saya.wsgi
stdout_stream.kelas = StdoutStream
stderr_stream.kelas = StdoutStream

Jika aplikasi Anda menghasilkan traceback atau kesalahan saat mencoba memulai Anda
harus bisa melihatnya di output.

changelog sejarah
0.12.1 - 2015-08-05
· Perbaiki kesalahan saat memulai ulang pengamat dengan aliran keluaran - #913

· Perubahan kecil pada dokumen

0.12 - 2015-06-02
Rilis ini membawa dukungan Python 3.4, Tornado 4 dan Windows, di antara beberapa yang menarik
fitur dan perbaikan.

Dukungan Windows masih eksperimental, dan tidak menangani streaming.

Perubahan besar:

· Kompatibilitas dengan Python 3.4 - #768

· Dukungan Windows Eksperimental - #788

· Kompatibilitas dengan Tornado 4 - #872

· Kemasan Debian yang dirubah - #896 - #903

· Tambahkan dukungan untuk kernel proses Papa - #850

· Tambahkan pencocokan globing dan regex untuk memulai, menghentikan, dan memulai ulang pengamat - #829 -
#902

Lebih banyak perubahan:

· Optimalisasi shutdown - #784 - #842

· Tambahkan kemungkinan untuk menentukan versi virtualenv untuk pengamat - #805

· Tambahkan opsi --nostop ke perintah rmwatcher - #777

· Tambahkan panggilan balik ke Arbiter.start - #840

· Perbaiki reload pengamat dengan huruf besar - #823

· Hapus soket bocor di daemon statistik - #843

· Perbaiki multicast di SunOS - #876

· Tutup aliran keluaran saat menghentikan pengamat - #885

· Perbaiki pengiriman sinyal ke cucu dengan --recursive - #888

0.11.1 - 2014-05-22
· Memperbaiki regresi yang merusak Circus pada 2.6 - #782

0.11 - 2014-05-21
Rilis ini tidak memperkenalkan banyak fitur, dan fokus untuk membuat Circus lebih banyak
kuat & stabil.

Perubahan/perbaikan besar:

· Pastikan kita tidak dapat menjalankan dua perintah yang bertentangan pada arbiter secara bersamaan.

· kami memiliki 2 kelas aliran baru: TimedRotatingFileStream, WatchedFileStream

· kami memiliki satu kait baru: kait after_spawn

· CircusPlugin lebih mudah digunakan

· perbaiki autostart = Pengamat palsu selama start (regresi)

Lebih banyak perubahan:

· pesan sirkus dapat dialihkan ke syslog sekarang - #748

· opsi endpoint_owner ditambahkan sehingga kami dapat menentukan pengguna mana yang memiliki file soket ipc yang dibuat oleh
sirkus.

· Memulai dukungan Windows (hanya circusctl untuk saat ini)

· memperbaiki banyak kebocoran dalam pengujian

· Izinkan variabel lingkungan peka huruf besar/kecil

· Plugin sumber daya sekarang menerima nilai memori absolut - #609

· Tambahkan dukungan ke perintah add untuk opsi 'lajang' - #767

· Izinkan pengiriman sinyal sewenang-wenang ke procs anak melalui pengamat sumber daya - #756

· Izinkan konfigurasi INI/JSON/YAML untuk logging

· Pastikan kami kompatibel dengan psutil 2.x dan 3.x

· Menambahkan lebih banyak metrik ke penyedia statsd - #698

· Memperbaiki penemuan multicast - #731

· Mulai, mulai ulang, dan muat ulang lebih seragam - #673

· Inisialisasi semua grup penggunaan dengan benar - #635

· peningkatan stabilitas tes

· banyak, banyak hal lagi ....

0.10 - 2013-11-04
Perubahan besar:

· Sekarang kompatibel dengan Python 3.2 & 3.3 - #586

· Memindahkan inti ke model yang sepenuhnya asinkron - #569

· Peningkatan dokumentasi - #622

Lebih banyak perubahan:

· Menambahkan stop_signal & stop_children - #594

· Pastikan plugin pengawas menutup soket - #588

· Beralih ke pengurai ZMQ JSON

· IN tidak didukung di semua platform - #573

· Izinkan penggantian lingkungan global di bagian konfigurasi apa pun - #560

· Izinkan tanda hubung dalam nama bagian - #546

· Sekarang variabel diperluas di mana-mana di konfigurasi - #554

· Menambahkan plugin CommandReloader

· Menambahkan kait before_signal & after_signal

· Izinkan plugin mengepak untuk mencoba lagi tanpa batas

· Jangan respawn procs saat pengamat berhenti - #529 - #536

· Menambahkan id unik untuk setiap pesan klien - #517

· id pekerja sekarang "slot" -

· Memperbaiki perilaku shutdown yang anggun - #515

· Pastikan kami dapat menambahkan pengamat bahkan jika arbiter tidak dimulai - #503

· Pastikan kami mengeluarkan proses kedaluwarsa - #510

· Pastikan perintah set dapat mengatur beberapa kait

· Mendukung soket ipv6 dengan benar - #507

· Izinkan opsi khusus untuk stdout_stream dan stderr_stream - #495

· Menambahkan format_waktu untuk FileStream - #493

· Menambahkan opsi konfigurasi soket baru untuk mengikat ke antarmuka tertentu dengan nama

0.9.3 - 2013-09-04
· Pastikan kami dapat menambahkan pengamat bahkan jika arbiter tidak dimulai

· Pastikan kami mengeluarkan proses kedaluwarsa

· Pastikan perintah set dapat mengatur satu atau beberapa kait

· Mendukung soket ipv6 dengan benar dan peningkatan CircusSockets

· Berikan nilai default jalur untuk mencegah UnboundLocalError

· Menambahkan tes untuk keberadaan multicast_endpoint di inisialisasi Pengontrol

· Tidak lagi mengonversi setiap string digit menjadi int

· Tambahkan tes

· Tidak perlu kasus khusus saat mengonversi opsi stdout_stream

· juga menerima umask sebagai argumen untuk konsistensi

· Izinkan opsi khusus untuk stdout_stream dan stderr_stream.

· Tambahkan opsi konfigurasi soket baru untuk mengikat ke antarmuka tertentu dengan nama

· Tambahkan format_waktu untuk FileStream + tes

· Perbarui circus.upstart

0.9.2 - 2013-07-17
· Ketika PYTHONPATH didefinisikan dalam file konfigurasi, itu dimuat di sys.path sehingga kait dapat
terletak di sana - #477, #481

· Gunakan argumen tunggal untuk add_callback sehingga berfungsi dengan PyZMQ < 13.1.x - lihat #478

0.9 - 2013-07-16
· menambahkan [env] bagian wildcard

· menambahkan bagian [env] global

· memperbaiki pengecualian tersembunyi saat web sirkus tidak diinstal - #424

· pastikan perintah incr/decr benar-benar kami opsi nb - #421

· Perbaiki paket situs virtualenv pengamat tidak di PYTHONPATH

· pastikan kami tidak mencoba menghapus lebih banyak proses daripada 0 - #429

· bootstrap.py yang diperbarui - #436

· pemisah multiplatform tetap di pythonpath virtualenv watcher

· fungsi tutup soket refactored

· Pastikan bagian env diterapkan ke semua pengamat - #437

· menambahkan perintah reloadconfig

· menambahkan circus.green dan menghapus gevent dari inti - #441, #452

· membungkam stdout palsu & peringatan dalam tes - #438

· $(circus.env.*) dapat digunakan untuk semua opsi dalam konfigurasi sekarang

· menambahkan kait before_spawn

· perbaiki jalur sirkus di file layanan systemd - #450

· pastikan kami dapat mengubah kait dan mengatur aliran melalui CLI - #455

· ditingkatkan dok

· menambahkan status spawn_count di pengamat

· menambahkan parameter min_cpu dan min_mem di plugin ResourceWatcher

· menambahkan informasi FQDN ke arbiter.

0.8.1 - 2013-05-28
· circusd-stats tersedak pada soket unix - #415

· circusd-stats & proses anak circushttpd stdout/stderr sekarang dibiarkan terbuka secara default.
Python <= 2.7.5 akan tersedak di modul logging jika 2/3 fds ditutup - #415

· Sekarang mengarahkan ke /dev/null dalam proses anak alih-alih menutup. #417

0.8 - 2013-05-24
· Penangan log terintegrasi ke dalam loop zmq io.

· Jadikan redirector dapat di-restart dan selanjutnya lebih kuat.

· Menggunakan zmq.green.eventloop ketika gevent terdeteksi

· Menambahkan dukungan untuk variabel lingkungan CIRCUSCTL_ENDPOINT ke circusctl - #396

· util: perbaiki bug di fungsi to_uid - #397

· Hapus handler pada kesalahan ioloop - #398.

· Peningkatan cakupan tes

· Menghentikan opsi 'layanan' untuk plugin ResourceWatcher - #404

· menghapus penggunaan psutil.error

· Menambahkan penemuan UDP di sirkus - #407

· Sekarang memungkinkan gumpalan di tingkat direktori sewenang-wenang - #388

· Menambahkan opsi konfigurasi 'statd' - #408

· Tambahkan opsi pidfile, logoutput, dan loglevel ke file konfigurasi sirkus - #379

· Menambahkan tutorial di dokumen.

· pastikan kami menggabungkan semua bagian saat menggunakan include - #414

· menambahkan opsi pipe_stdout, pipe_stderr, close_child_stderr & close_child_stdout ke
Kelas proses

· menambahkan opsi close_child_stderr & close_child_stdout ke pengamat

0.7.1 - 2013-05-02
· Memperbaiki opsi respawn - #382

· Pastikan kita menggunakan int untuk batas waktu - #380

· tampilkan soket unix juga - #381

· Pastikan itu berfungsi dengan pyzmq terbaru

· memperkenalkan sintaks kedua untuk notasi fd

0.7 - 2013-04-08
· Perbaiki contoh get_arbiter untuk menggunakan dict untuk argumen pengamat. #304

· Tambahkan beberapa dokumentasi pemecahan masalah #323

· Tambahkan dukungan pembangunan python

· Menghapus gevent dan redirector thread. sekarang menggunakan ioloop - perbaikan #346.
Terkait #340

· circus.web sekarang menjadi proyeknya sendiri

· menghapus tambalan pyzmq

· Izinkan pengamat untuk dikonfigurasi tetapi tidak dimulai #283

· Tambahkan opsi untuk memuat direktori situs virtualenv

· menambahkan pengamat sesuai permintaan

· menambahkan dokumen tentang nginx+websockets #371

· sekarang menguraikan dengan benar daftar opsi dari setiap perintah #369

· Memperbaiki acara circusd-stats yang menangani #372

· memperbaiki masalah luapan di circus-top #378

· banyak hal lagi...

0.6 - 2012-12-18
· Menambal nama protokol untuk soket - #248

· Jangan membuat skala otomatis pada grafik. #240

· circusctl: tambahkan bantuan per perintah, dari docstrings #217

· Menambahkan kait pekerja

· Menambahkan paket Debian - #227

· Menambahkan Redis, Pengamat HTTP, Statistik lengkap & plugin Sumber Daya

· Sekarang proses dapat memiliki judul

· Ditambahkan pelengkapan otomatis

· Menambahkan usia proses/pengamat di webui

· Menambahkan dukungan terowongan SSH

· Sekarang menggunakan pyzmq.green

· Menambahkan skrip pemula & dokumen Varnish

· Menambahkan variabel & bagian lingkungan

· Menambahkan dukungan soket unix

· Menambahkan respawn opsi untuk memiliki pengamat sekali jalan

· Sekarang menggunakan racun dalam tes

· Izinkan penggantian soket di args

· Tema dokumen baru

· Opsi rotasi baru untuk streaming: max_bytes/backup_count

0.5.2 - 2012-07-26
· sekarang menambal modul utas dari stdlib untuk menghindari beberapa bug Python - #203

· layar bantuan circusctl yang lebih baik

· menggunakan pustil get_nice() saat tersedia (bagus sudah tidak digunakan lagi) - #208

· menambahkan dukungan max_age - #221

· hanya panggil listen() pada soket SOCK_STREAM atau SOCK_SEQPACKET

· pastikan pengontrol mengosongkan daftar plugin di update_watchers() - #220

· menambahkan --log-level dan --log-output ke circushttpd

· perbaiki proses pembunuhan melalui UI web - #219

· sekarang sirkus kompatibel dengan zc.buildout untuk skrip.

· bersihkan soket web saat klien terputus - #225

· memperbaiki nilai default untuk titik akhir - #199

· sirkushttpd terbelah dalam modul logis

0.5.1 - 2012-07-11
· Memperbaiki banyak kesalahan ketik dalam dokumentasi

· Menambahkan opsi debug

· Kemas web-requirements.txt dengan benar

· Menambahkan kode kesalahan errno dalam pesan - perbaikan # 111

0.5 - 2012-07-06
· menambahkan dukungan soket

· menambahkan perintah listocket

· soket memiliki statistik juga!

· memperbaiki banyak bug kecil

· menghapus wid - sekarang menggunakan pid di mana-mana

· tes lebih cepat

· mengubah sintaks variabel

· gunakan ioloop pyzmq di lebih banyak tempat

· sekarang menggunakan iowait untuk semua panggilan pilih ()

· perintah incr/decr sekarang memiliki parameter nbprocess

· Tambahkan opsi reproduksi_env ke pengamat

· Tambahkan status TIDAK ADA baru ke proses

· Menambahkan global httpd opsi untuk menjalankan circushttpd sebagai pengamat

0.4 - 2012-06-12
· Menambahkan sistem plugin

· Menambahkan opsi "lajang" untuk pengamat

· Memperbaiki kedipan layar sirkus atas

· Menghapus utas dari circus.stats demi panggilan balik berkala zmq

· Meningkatkan dokumentasi

· Klien sirkus sekarang memiliki api send_message

· Fitur mengepak sekarang menjadi plugin

· Setiap alat baris perintah memiliki opsi --version

· Menambahkan plugin statsd (mengirim acara dari sirkus ke statsd)

· UI web sekarang menggunakan soket web (melalui socketio) untuk mendapatkan statistik

· UI web sekarang menggunakan sesi untuk "pesan flash" di ui web

0.3.4 - 2012-05-30
· Memperbaiki kondisi balapan yang mencegah pengontrol untuk menuai proses yang sudah selesai dengan bersih.

· Sekarang check_flapping dapat dikontrol dalam konfigurasi. Dan diaktifkan/dinonaktifkan
per pengamat.

0.3.3 - 2012-05-29
· Memperbaiki regresi pada penanganan uid

0.3.2 - 2012-05-24
· memungkinkan properti args opsional untuk perintah add_watcher.

· menambahkan circushttpd, circus-top dan circusd-stats

· memungkinkan Arbiter.add_watcher() untuk mengatur semua opsi Watcher

· pastikan redirector dibuat ulang saat restart

0.3.1 - 2012-04-18
· perbaiki: pastikan default pengamat tidak ditimpa

· menambahkan kelas StdoutStream.

0.3 - 2012-04-18
· menambahkan fitur streaming

· sekarang menampilkan liputan di dokumen Sphinx

· memperbaiki cara proses dimatikan (tidak ada lagi SIGQUIT)

· konfigurasi telah diperhitungkan

· dukungan setproctitle

0.2 - 2012-04-04
· Menghapus Menunjukkan nama. digantikan oleh pengintai.

· Dukungan tambahan untuk proses pengaturan batas.

· Dukungan tambahan untuk menyertakan direktori dalam file konfigurasi.

· Memperbaiki beberapa deskriptor file yang bocor.

· Memperbaiki dump inti di flapping

· Perbaikan dokumen

· Pastikan circusd error dengan benar ketika circusd lain berjalan pada socket yang sama.

· get_arbiter sekarang menerima beberapa pengamat.

· Memperbaiki cmd vs args vs executable dalam proses init.

· Memperbaiki --mulai di circusctl add

0.1 - 2012-03-20
· Peluncuran pertama

pria halaman
sirkus pria halaman
ringkasan
sirkus [opsi] [konfigurasi]

Description
circusd adalah proses utama dari arsitektur Circus. Dibutuhkan perawatan untuk menjalankan semua
proses. Setiap proses yang dikelola oleh Circus adalah proses anak dari sirkus.

kasus
config file konfigurasi

Opsi
-H, --membantu
Tampilkan pesan bantuan dan keluar

--tingkat log TINGKAT
Tentukan tingkat log. TINGKAT dapat Info, men-debug, kritis, peringatan or kesalahan.

--log-keluaran LOGOUT
Lokasi di mana log akan ditulis. Perilaku default adalah menulis ke
stdout (Anda dapat memaksanya dengan meneruskan '-' ke opsi ini). Mengambil nama file
jika tidak.

--logger-config KONFIGURASI LOGGER
Lokasi di mana file konfigurasi logger Python standar INI, JSON atau YAML
dapat ditemukan. Ini dapat digunakan untuk mengganti konfigurasi logging default untuk
wasit.

--daemon
Mulai sirkus di latar belakang.

--pidfile FILE PID
Lokasi file PID.

--Versi: kapan
Menampilkan versi Circus dan keluar.

Lihat juga
sirkus (1) sirkus (1) statistik sirkus (1) sirkus-plugin (1) puncak sirkus (1).

Dokumentasi Lengkap tersedia di http://circus.readthedocs.org

sirkus pria halaman
ringkasan
circusctl [opsi] perintah [args]

Description
circusctl adalah ujung depan untuk mengontrol daemon Circus. Hal ini dirancang untuk membantu
administrator mengontrol fungsi Circud sirkus daemon.

Perintah
menambahkan Tambahkan pengamat

dek Kurangi jumlah proses di watcher

dstat Dapatkan statistik sirkus

mendapatkan Dapatkan nilai opsi pengamat tertentu

pilihan global
Dapatkan opsi arbiter

termasuk Tingkatkan jumlah proses dalam watcher

ular piton
Buat shell menjadi proses sirkus

daftar Dapatkan daftar pengamat atau proses di pengamat

mendengarkan Berlangganan acara pengamat

daftar soket
Dapatkan daftar soket

proses bilangan
Dapatkan jumlah proses

pengamat angka
Dapatkan jumlah pengamat

Pilihan
Dapatkan nilai dari semua opsi untuk seorang pengamat

berhenti Keluar dari arbiter segera

kembali Muat ulang wasit atau pengamat

isi ulang konfigurasi
Muat ulang file konfigurasi

Restart
Mulai ulang arbiter atau pengamat

rm Hapus pengamat

set Setel opsi pengamat

sinyal Kirim sinyal

awal Mulai wasit atau pengamat

statistik Dapatkan info proses

status Dapatkan status pengamat atau semua pengamat

berhenti Hentikan pengamat

Opsi
--titik akhir POIN AKHIR
titik akhir koneksi

-H, --membantu
Tampilkan pesan bantuan dan keluar

--json keluaran ke JSON

--mendandani
mempercantik keluaran

--ssh SSH
Server SSH dalam format pengguna@host:port

--ssh_keyfile SSH_KEYFILE
path ke keyfile untuk mengotorisasi pengguna

--waktu habis TIMEOUT
waktu koneksi habis

--Versi: kapan
Menampilkan versi Circus dan keluar.

Lihat Juga
sirkus (1) sirkus (1) statistik sirkus (1) sirkus-plugin (1) puncak sirkus (1).

Dokumentasi Lengkap tersedia di http://circus.readthedocs.org

sirkus-plugin pria halaman
ringkasan
sirkus-plugin [opsi] [plugin]

Description
circus-plugin memungkinkan untuk meluncurkan plugin dari daemon Circus yang sedang berjalan.

kasus
Plugin Nama kelas plugin yang sepenuhnya memenuhi syarat.

Opsi
--titik akhir POIN AKHIR
Titik akhir koneksi.

--pubsub PUBSUB
Soket pub/sub circusd ZeroMQ untuk disambungkan.

--konfigurasi KONFIG
File konfigurasi plugin.

--cek-tunda CHECK_DELAY
Periksa penundaan.

--tingkat log TINGKAT
Tentukan tingkat log. TINGKAT dapat Info, men-debug, kritis, peringatan or kesalahan.

--log-keluaran LOGOUT
Lokasi di mana log akan ditulis. Perilaku default adalah menulis ke
stdout (Anda dapat memaksanya dengan meneruskan '-' ke opsi ini). Mengambil nama file
jika tidak.

--ssh SSH
Server SSH dalam format pengguna@host:port.

-H, --membantu
Tampilkan pesan bantuan dan keluar.

--Versi: kapan
Menampilkan versi Circus dan keluar.

Lihat juga
sirkus (1) sirkus (1) sirkus (1) statistik sirkus (1) puncak sirkus (1).

Dokumentasi Lengkap tersedia di http://circus.readthedocs.org

puncak sirkus pria halaman
ringkasan
sirkus-top [opsi]

Description
circus-top adalah puncak-seperti perintah untuk menampilkan daemon Circus dan proses yang dikelola oleh
sirkus.

Opsi
--titik akhir POIN AKHIR
Titik akhir koneksi.

--ssh SSH
Server SSH dalam format pengguna@host:port.

--proses-waktu habis PROSES_TIMEOUT
Setelah penundaan tidak aktif ini, sebuah proses akan dihapus.

-H, --membantu
Tampilkan pesan bantuan dan keluar.

--Versi: kapan
Menampilkan versi Circus dan keluar.

Lihat juga
sirkus (1) sirkus (1) sirkus (1) statistik sirkus (1) sirkus-plugin (1).

Dokumentasi Lengkap tersedia di http://circus.readthedocs.org

statistik sirkus pria halaman
ringkasan
circusd-stats [opsi]

Description
circusd-stats menjalankan agregator statistik untuk Circus.

Opsi
--titik akhir POIN AKHIR
Titik akhir koneksi.

--pubsub PUBSUB
Soket pub/sub circusd ZeroMQ untuk disambungkan.

--titik statistik POIN STATISTIK
Soket pub/sub ZeroMQ untuk mengirim data.

--tingkat log TINGKAT
Tentukan tingkat log. TINGKAT dapat Info, men-debug, kritis, peringatan or kesalahan.

--log-keluaran LOGOUT
Lokasi di mana log akan ditulis. Perilaku default adalah menulis ke
stdout (Anda dapat memaksanya dengan meneruskan '-' ke opsi ini). Mengambil nama file
jika tidak.

--ssh SSH
Server SSH dalam format pengguna@host:port.

-H, --membantu
Tampilkan pesan bantuan dan keluar.

--Versi: kapan
Menampilkan versi Circus dan keluar.

Lihat juga
sirkus (1) sirkus (1) sirkus (1) sirkus-plugin (1) puncak sirkus (1).

Dokumentasi Lengkap tersedia di http://circus.readthedocs.org

Glosarium: Khusus sirkus istilah
wasit
wasit bertanggung jawab untuk mengelola semua pengamat dalam sirkus, memastikan
semua proses berjalan dengan benar.

pengawas
A pengawas berisi serangkaian tindakan yang dapat dilakukan pada arbiter.

mengepak
mengepak deteksi berlangganan acara dan mendeteksi ketika beberapa proses
terus-menerus restart.

pub/sub
Sirkus memiliki pubsub yang menerima acara dari para pengamat dan mengirimkannya ke
semua pelanggan.

terpencil pengawas
terpencil pengawas memungkinkan Anda untuk berkomunikasi dengan pengontrol melalui ZMQ untuk
mengendalikan Sirkus.

pengintai, pengamat
A pengintai adalah program yang Anda perintahkan untuk dijalankan Circus. Sebuah instance Circus dapat dijalankan
satu atau lebih pengamat.

pekerja, pekerja, proses, proses
A proses adalah contoh proses OS independen dari program Anda. Seorang pengamat tunggal
dapat menjalankan satu atau lebih proses. Kami juga menyebut mereka pekerja.

Hak Cipta
Circus diprakarsai oleh Tarek Ziade dan dilisensikan di bawah APLv2

Benoit Chesneau adalah kontributor awal dan melakukan banyak hal, seperti kebanyakan dari
circus.commands bekerja.

lisensi
Hak Cipta 2012 - Mozilla Foundation
Hak Cipta 2012 - Benoit Chesneau

Dilisensikan di bawah Lisensi Apache, Versi 2.0 ("Lisensi");
Anda tidak boleh menggunakan file ini kecuali sesuai dengan Lisensi.
Anda dapat memperoleh salinan Lisensi di

http://www.apache.org/licenses/LICENSE-2.0

Kecuali diminta oleh hukum yang berlaku atau disetujui secara tertulis, perangkat lunak
didistribusikan di bawah Lisensi didistribusikan "SEBAGAIMANA ADANYA",
TANPA JAMINAN ATAU KETENTUAN APA PUN, APAPUN tersurat maupun tersirat.
Lihat Lisensi untuk bahasa spesifik yang mengatur izin dan
batasan di bawah Lisensi.

Kontributor
Lihat daftar lengkapnya di https://github.com/circus-tent/circus/blob/master/CONTRIBUTORS.txt

Gunakan sirkus online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

Perintah Linux

Ad