Centos Linux dağıtımını sunucu olarak kullanıyoruz ve bir dosyanın çalıştırılmasına ihtiyacımız var. Bir kaç farklı alternatifle çalıştırabiliriz.
Diyelim bir php betiğimiz var ve arka planda bu dosyanın sürekli çalışmasını istiyoruz.
Arka planda çalışması için (background process) prosesi background da çalıştırabiliriz.
Bu yazıda neler var?
Background process:
php dosya.php &
veya
nohup php dosya.php &
Bu şekilde dosyamız arka planda çalışacaktır. Fakat bu sağlıklı bir yöntem değildir ve terminalden (SSH) çıktığımızda dosya çalışmayı bırakacaktır.
Cron olarak çalıştırma
Dosyayı crontab’a ekleyip çıktığımızda da çalışmasını sağlayabiliriz. Fakat bu şekilde de dosya birden fazla kez çalışabilir (çalışıp çalışmadığını kontrol etmiyorsanız) ve sürekli gereksiz kaynak yiyecektir. Ve dosya bir şekilde çalışmayı bırakırsa tekrar çalışması için cron’u beklemek zorunda kalacaktır.
Centos sunucuda nasıl servis yazılır?
Dosyanın çalışmasını en iyi servis yazarak sağlayabiliriz. Dosya sonlansa dahi (kill ile süreç öldürülse dahi) otomatik olarak yeniden başlayacaktır.
Servis betiğimizi yazalım
Servis betiğimizi /etc/systemd/system/ klasörü altında çalıştıracağız.
cd /etc/systemd/system/
nano servisismi
Diyelim ve aşağıdakileri kopyalayalım;
[Unit]
Description=Live
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=test.service
[Service]
User=root
Group=wheel
Restart=always
RestartSec=1
ExecStart=/usr/bin/php /var/www/html/dosya.php
ExecStop=/bin/kill ${MAINPID}
# Execute pre and post scripts as root
PermissionsStartOnly=true
TimeoutSec=600
Restart=always
PrivateTmp=false
Description = Servis açıklaması
After = Hangi servisin daha önce çalışması gerektiğini söyler. Bu örnekte network ve syslog servisleri çalışıyor olması gerekiyor.
Alias = Servisin ismi
User=root Group=wheel : Hangi kullanıcı ve gruptan çalışacağı
Restart : Servis bir şekilde kapanırsa ne zaman restart edileceği biz her zaman (always) etsin diyoruz
RestartSec : Eğer yazılmazsa, sistem default 100ms sonra yeniden başlatmayı dener, biz 1 saniye sonra başlat dedik
ExecStart : Çalıştırmak istediğimiz binary(php) ve dosya adı (dosya.php)
StartLimitIntervalSec=10 : Servis kapanırsa, ve yeniden başlattığında başarılı olamıyorsa, systemde 10 saniyelik bir süre ile 5 defa yeniden dener, başlatamazsa bir daha denemez.
Servisin sistem başlangıcında çalışmasını istiyorsak;
systemctl enable servis.ismi
Servisi başlatma;
systemctl start servis.ismi
Servisi durdurma;
systemctl stop servis.ismi
Eğer servis dosyasında bir değişiklik yaparsanız daemon servisini yeniden başlatmanız gerekecektir.
systemctl daemon-reload
İşlemler bu kadar.
Add Comment