Centos

Centos Servis Yazma

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.

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.