Ödeme Yöntemleri Abuse

SuperVisor nasıl kurulur

18.04.2022, 23:02

Linux'ta işlemcileri yönetmek için systemd gibi başlatma sistemleri vardır. Daha basit bir çözüme ihtiyacınız varsa, uygulamanızın süreçlerini sistem üzerinde ya da bir Docker konteynerinde yönetebilecek bir program kullanabilirsiniz. Böyle bir program mevcuttur - bu supervisor'dır. Python ile yazılmış, bir sürecin gerektiği kadar kopyasını çalıştırmak ve durumlarını izlemek için kullanılabilen, işlevsel olarak basit, açık kaynaklı bir süreç yöneticisidir. Aşağıda örnek olarak Ubuntu 20.04 kullanarak Supervisor'ı nasıl kuracağınızı ve yapılandıracağınızı göstereceğiz.

Supervisor kurulumu

Programı edinmenin en kolay yolu resmi depolardan yüklemektir. Bunu yapmak için komutu çalıştırmanız gerekir:

$ sudo apt install supervisor

SuperVisor nasıl kurulur

Programın her zaman çalışmasını istiyorsanız, otomatik yükleyicinize eklemeniz ve çalıştırmanız gerekir. Çalıştırın:

$ sudo systemctl enable supervisor --now

SuperVisor nasıl kurulur

Ardından, komutu kullanarak durumu görüntüleyebilirsiniz:

$ sudo systemctl status supervisor

SuperVisor nasıl kurulur

Yapılandırma süreci

Yapılandırma dosyası /etc/supervisor/supervisord.conf adresinde bulunur. Bu aynı zamanda temel ayarların bulunduğu yerdir. Çalışan süreçleri yapılandırmak için /etc/supervisor/conf.d/ dizinini kullanmak daha iyidir. Ana yapılandırma dosyası varsayılan olarak bırakılabilir. Programlar için yapılandırma dosyalarının nasıl oluşturulacağını görelim. Tek bir süreç için bir bölümün sözdizimi aşağıdaki gibidir:

değişken adı değer

Her işlemin otomatik olarak başlaması ve bir çökme sonrasında kurtarılması için bu tür değişkenlerin geçilmesi gerekir:

  • directory - çalışma dizini;
  • command - süreci başlatmak için komut;
  • user- sürecin adına başlatılacağı kullanıcı;
  • autostart - sürecin otomatik olarak başlatılıp başlatılmayacağı;
  • autorestart- sürecin yeniden başlatılıp başlatılmayacağı;

Bununla birlikte, daha birçok ayar mevcuttur, işte bu makalede ele alınacak olan bazıları:

  • öncelik - başlatılacak sürecin önceliği;
  • environment - sürece aktarılacak ortam değişkenleri;
  • stdout_logfile - süreç stdout çıktısının nereye yönlendirileceği;
  • stderr_logfile - süreç stderr çıktısının yönlendirileceği yer;
  • process_name- kopya numarası yerine kullanılabilen süreç adı;
  • numprocs - başlatılacak sürecin kopya sayısı;
  • startretries - programı başlatmak için deneme sayısı;
  • redirect_stderr - süreç hata çıktısını denetçi çıktısına yönlendirir;
  • redirect_stdout - süreç çıktısını gözetmen çıktısına yönlendirir.

Daha iyi anlamak ve örneklemek için, sadece arka planda asılı kalacak bir PHP betiği çalıştıralım:

$ sudo vi /home/sergiy/program/process.php

<?php
echo "Started...";
while(true){
  sleep(5);
}

Süreç için ayrı bir süpervizör yapılandırma dosyası oluşturabilirsiniz. Yapılandırmayı ana yapılandırma dosyasının hemen sonuna ekleyebilirsiniz, ancak bunu yapmamak daha iyidir. Her program için /etc/supervisor/conf.d/ içinde *.conf adıyla ayrı bir yapılandırma dosyası oluşturmak daha iyidir. Örneğin, bu program için bu dosya şöyle görünecektir:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true

Daha sonra supervisor'ı yeniden başlatmanız gerekir, bu systemctl ile yapılabilir:

$ sudo systemctl restart supervisor

Ya da supervisorctl yardımcı programı ile yapılabilir:

$ sudo supervisorctl reload

SuperVisor nasıl kurulur

Komutunu kullanarak yapılandırılmış işlemlerin durumunu da görebilirsiniz:

SuperVisor nasıl kurulur

Eğer süreç RUNNING durumundaysa, her şey yolunda demektir ve başarıyla başlatılmıştır. Ancak bu durumda süreç tek bir örnekte çalışmaktadır ve çoğu zaman aynı sürecin birden fazla kopyasını çalıştırmanız gerekir. Bu amaçla process_name ve numprocs parametrelerini kullanabiliriz. Birincisi, süreç adını kopya numarasını içerecek şekilde değiştirmenize, ikincisi ise kaç kopya çalıştırılması gerektiğini belirtmenize olanak tanır.

process_name değişkeni genellikle program adını ve işlem numarasını içeren bir python dize biçimlendirme kalıbı içerir: %(program_name)s_%(process_num)02d. Burada değişken adı parantez içinde yer alır ve ardından türü gelir. Örneğin, aynı programı dört iş parçacığında çalıştırmak için yapılandırma dosyası bu şekilde ayarlanmalıdır:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4

Şimdi supervisorctl 'ı tekrar yüklemeliyiz ve 4 süreç çalışıyor olacaktır:

$ sudo supervisorctl status

SuperVisor nasıl kurulur

Aynı zamanda programın tüm veri çıktısını günlük dosyasına kaydetmek mümkündür. Bu amaçla stdout_logfile ve stderr_logfile parametreleri kullanılır. Örneğin, programın yürütülmesine ilişkin günlük dosyasının çıktısını doğrudan programın bulunduğu klasöre alabilirsiniz.

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4


stdout_logfile=/home/sergiy/program/process.log


stderr_logfile=/home/sergiy/program/process.log.error

Hizmeti yeniden başlattıktan sonra, günlükler programın bulunduğu klasörde görünecektir:

SuperVisor nasıl kurulur

Benzer şekilde, işlemlerinizin çıktısını standart denetçi çıktısına yönlendirmek istiyorsanız, redirect_stderr ve redirect_stdout parametrelerini kullanmalısınız. Programınızın herhangi bir ortam değişkenine ihtiyacı varsa, bunları ortam parametresini kullanarak aktarabilirsiniz. Değişkenler virgül ile yazılmalıdır. Örneğin:

$ environment=DISPLAY=":1",HOME="/root"

Her yapılandırma değişikliğinden sonra, değişiklikleri uygulamak için supervisor'ı yeniden başlatmayı unutmayın. supervisorctl yardımcı programı süreçleri kontrol etmek için kullanılabilir. Daha önce fark ettiğiniz gibi, süreçlerin listesini görmek için çalıştırmanız gerekir:

$ sudo supervisorctl status

Daha sonra, sürecin adını bilerek, onu yeniden başlatabilirsiniz, örneğin process :process_00:

$ sudo supervisorctl restart process:process_00

SuperVisor nasıl kurulur

Durdur:

$ sudo supervisorctl stop process:process_00

Veya başlatabilirsiniz:

$ sudo supervisorctl start process:process_00

Alternatif olarak, sürece bağlanabilir ve fg komutunu kullanarak stdout/stderr 'a ne çıktı verdiğini görebilirsiniz:

$ sudo supervisorctl fg process:process_00

Supervisor'ın nasıl yapılandırıldığını ve süreç yönetim yazılımının nasıl kullanıldığını inceledik.