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.
Programı edinmenin en kolay yolu resmi depolardan yüklemektir. Bunu yapmak için komutu çalıştırmanız gerekir:
$ sudo apt install supervisor
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
Ardından, komutu kullanarak durumu görüntüleyebilirsiniz:
$ sudo systemctl status supervisor
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
Komutunu kullanarak yapılandırılmış işlemlerin durumunu da görebilirsiniz:
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
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:
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
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.
Apply the discount by inserting the promo code in the special field at checkout:
Apply the discount by inserting the promo code in the special field at checkout: