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/symfonyautostart: Sistemin yeniden başlatılması durumunda servis veya kodunuzunda yeniden başlatılmasını isterseniz, "true" olarak ayarlayın. e.g. autostart=trueautorestart: 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=truestartretries: Servis veya kodunuzun yeniden başlatılması işleminin en fazla deneme sayısı. e.g. startretries=5user: Servis veya kodunuzu çalıştıracak olan kullanıcı. e.g. user=deploynumprocs: 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)02dstderr_logfile: Hataların yazılacağı dosya. e.g. stderr_logfile /home/logs/app/symfony/cache-clear_stderr.logstderr_logfile_maxbytes: Hataların yazılacağı dosyanın stderr_logfile büyüklük sınırı. e.g. stderr_logfile_maxbytes=10MBstdout_logfile: Normal mesajların yazılacağı dosya. e.g. stdout_logfile /home/logs/app/symfony/cache-clear_stdout.logstdout_logfile_maxbytes: Normal mesajların yazılacağı dosyanın stdout_logfile büyüklük sınırı. e.g. stdout_logfile_maxbytes=10MBHer 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.
