05/03/2017 - LINUX, SUPERVISOR
Supervisor, UNIX tabanlı işletim sistemlerinde çalışan işlemleri gözlem altında tutup kontrol eden bir sistemdir. Belirlenen işlemleri gözlem altına alır ve herhangi bir nedenden dolayı duran işlemleri tekrar otomatik olarak çalıştırır. Daha fazla bilgi için Supervisor: A Process Control System sayfasını okuyabilirsiniz.
Sisteminizde uzun süreli çalışması gereken bir servisiniz veya kodunuz (e.g. RabbitMQ, Beanstalkd etc.) var ise, bunların gerçekten çalışıyor olmalarına emin olmak istersiniz. Bildiğimiz gibi bilinmeyen nedenlerden dolayı, her an bir servisimiz veya kodumuz durabilir. Bu gibi durumlarda servisimiz veya kodumuz, hiç bir şekilde insan eli deymeden tekrar çalışmalılar. İşte böyle durumlarda supervisor kullanırız.
$ sudo apt-get install supervisor
--- Version
$ supervisord -v
3.0b2
Daha fazla bilgi için Running Supervisor ve Running Supervisorctl sayfalarını okuyabilirsiniz..
$ sudo service supervisor {start|stop|restart|force-reload|status|force-stop}
$ sudo supervisorctl # Lists all processes and lets you use internal commands
Ana log dosyası /var/log/supervisor/supervisord.log
yolundadır. Bu bizim kendi servis/kod konfigürasyon log dosyalarımızdan bağımsızdır.
Konfigürasyon dosyası /etc/supervisor/supervisord.conf
yolundadır. Dosyayı açarsanız, en altta aşağıdaki bölümü göreceksiniz.
[include]
files = /etc/supervisor/conf.d/*.conf
Bu demek oluyor ki, sonu *.conf
uzantısıyla biten dosyaları /etc/supervisor/conf.d/
klasörüne koyarsanız, supervisord bunları yükleyip çalıştıracaktır. Servis veya kodunuz için yeni bir tane konfigürasyon dosyası yarattığınızda, dosyayı aynı klasöre yerleştirmelisiniz. Örnek: /etc/supervisor/conf.d/hello-world.conf
Daha fazla bilgi için Configuration sayfasını okuyabilirsiniz.
[program:*]
: Servis veya kodunuzun ismi. e.g. [program:symfony-prod-cache-clear]
command
: Servis veya kodunuzu çalıştıracak olan komut. e.g. command=/usr/bin/php /var/www/html/symfony app/console cache:clear --env=prod -DFOREGROUND
. Önemli: Komutunuza her zaman -DFOREGROUND
ekini ekleyin ki işleyicileriniz daha güvenilir bir şekilde çalışsınlar. Daha fazla bilgi için Nondaemonizing of Subprocesses sayfasını okuyun.directory
: Servis veya kodunuzun bulunduğu klasör. e.g. directory=/var/www/html/symfony
autostart
: Sistemin yeniden başlatılması durumunda servis veya kodunuzunda yeniden başlatılmasını isterseniz, "true" olarak ayarlayın. e.g. autostart=true
autorestart
: Servis veya kodunuzun beklenmedik bir hatadan dolayı durması durumunda, servis veya kodunuzunda yeniden başlatılmasını isterseniz, "true" olarak ayarlayın. e.g. autorestart=true
startretries
: Servis veya kodunuzun yeniden başlatılması işleminin en fazla deneme sayısı. e.g. startretries=5
user
: Servis veya kodunuzu çalıştıracak olan kullanıcı. e.g. user=deploy
numprocs
: Servis veya kodunuzun toplam çalıştırılacak kopyası. e.g. numprocs=5
startsecs
: Bir işleyicinin başarıyla çalıştırıldığını varsaymak için geçmesi gereken süre. Her zaman startsecs=0
olarak ayarlayın. Bu çok önemli bir şeydir! Daha fazla bilgi için startsecs sayfasını okuyun.process_name
Servis veya kodunuzun işlem ismi. e.g. process_name=%(program_name)s_%(process_num)02d
stderr_logfile
: Hataların yazılacağı dosya. e.g. stderr_logfile /home/logs/app/symfony/cache-clear_stderr.log
stderr_logfile_maxbytes
: Hataların yazılacağı dosyanın stderr_logfile
büyüklük sınırı. e.g. stderr_logfile_maxbytes=10MB
stdout_logfile
: Normal mesajların yazılacağı dosya. e.g. stdout_logfile /home/logs/app/symfony/cache-clear_stdout.log
stdout_logfile_maxbytes
: Normal mesajların yazılacağı dosyanın stdout_logfile
büyüklük sınırı. e.g. stdout_logfile_maxbytes=10MB
Her zaman -DFOREGROUND
ekini ve startsecs=0
seçeneğini kullandığınıza emin olun. Bunlar işleyicilerin daha güvenilir bir şekilde çalışmalarını sağlayacaktır. Aksi taktirde # INFO gave up: ... entered FATAL state, too many start retries too quickly
veya Exited too quickly (process log may have details)
gibi hatalar alabilirsiniz.
Servis veya kodunuz için yeni bir tane konfigürasyon dosyası yarattıysanız, aşağıdaki komutlar ile supervisoru bilgilendirmeniz gerekir.
$ sudo supervisorctl reread
$ sudo supervisorctl update
Daha fazla bilgi için Running Supervisorctl sayfasını okuyabilirsiniz.
$ sudo supervisorctl
supervisor>
Tüm yerel komutların listesi için help
komutunu kullanabilirsiniz.
supervisor> help
default commands (type help):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version
Aşağıdaki bilgiyi sudo nano /etc/supervisor/supervisord.conf
konfigürasyon dosyasına ekleyin.
[inet_http_server]
port = 9001
username = admin
password = admin
Supervisor'u yeniden başlatın.
$ sudo service supervisor restart
Tarayıcıdan http://192.168.50.30:9001/
adresine gidin.