Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX Konsol Uygulamasını Hizmet Gibi Arka Planda Çalıştırma
#1
Bu yazı biraz makale değil de ipucu gibi olabilir. Kendi tecrübemi anlatıyorum. İhtiyaç duyabilecek kişilerin kolayca işini çözmesi adına bu yazıyı yazıyorum.

İhtiyaç oldu ve bir TCP Socket uygulaması istenildi bende bu uygulamayı iki(Windows ve Linux) platformda da çalışacak şekilde olması için FMX ile konsol uygulaması oluşturdum.
Geliştirme süreçleri bitip projenin sonuna gelindi. Windows ve Linux ortamlarında uygulama testlerini yapıldı ve sorun yok.

Buradan sonra anlatacaklarım Linux ortamı için geçerli.

Linux için projeye 
{$IFDEF LINUX}Posix.Unistd,{$ENDIF}
şekilde bir Unit ekledim. Bunu da ayrıca belirtmek isterim.

FMX ile hazırlanmış Konsol uygulamasını Linux(Ubuntu) içinde konsol gibi değilde hizmet gibi arka planda çalıştırabilir miyiz? Sorusuna cevap almak için yazıyorum.

Uygulama konsol uygulaması olduğu için bir şekilde bu uygulamanın başlatılması gerekiyor.
Bu çalıştırma işini sistemin ilk açılışında Windows' da olduğu Linux sistem açılışına ekleyerek aşabilirim. Fakat çeşitli sebeplerle bu uygulama kapanmış olabilir.

Bu durumu da "crontab"(Linux ortamında zamanlanmış görev çalıştırma mekanizması) ile aşabilirim. Fakat zamanlanmış görev ile herhangi bir kontrol eklemeden çalıştırma işlemini yaparsam uygulama birden fazla kopyası ile açılmış olur.

Bu durumu kontrollü bir şekilde yapmalıyız. Uygulama kapalı yani çalışmıyorsa uygulamayı aç, eğer uygulama açıksa tekrardan açma ve işlem yapma bir bash(kabuk) script ile aşabiliriz. Yine zamanlanmış görevlere çalıştırılacak olan bash script gösterilir ve belirli periyotlarla çalıştırılması sağlanabilir.

komut satırında bu komut ile zamanlanmış görevler penceresini açıyoruz.
crontab -e
yukarıdaki komuttan sonra açılan pencerede en alta bu satıra aşağıdaki satırı ekliyoruz. Burada her 1 dakika da bir bu Script çalıştırılsın demiş oluyoruz.
*/1 * * * * /path/to/script_name.sh

Bu script dosyasının içeriği de aşağıdaki gibi olacak

#comment
#uygulama adi aşagidaki gibi tirnak arasinda olacak

if pgrep -x "uygulamaAdi" > /dev/null
then
#uygulama zaten calisiyor
  echo "a"
else
#calisan uygulama yok
  /path/to/uygulamaAdi
fi

Ayrıca kod içindeki <br> yazan ibareler olmayacak ben eklemedim ama bir şekilde buraya geliyor.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#2
*/1 * * * * /path/to/script_name.sh

sonuna & koyun yoksa o scprit bitene kadar askıda kalır diğer crontab görevleri.
ayrıca */1 * * * * sistemusername /path/t belirtmekde önemlidir.

*/1 * * * * root /path/to/script_name.sh &

chmod +x /path/to/script_name.sh

bu yol pek etik değil kanımca, çökmelerde işe yarar.

crontab;
@restart ile scprit 1 kez crontab ile sistem başlangıcında çalıştırılabilir.

@restart /path/to/script_name.sh &
@restart root /path/to/script_name.sh &

https://www.cyberciti.biz/faq/linux-exec...em-reboot/
Cevapla
#3
(30-01-2020, Saat: 13:53)tavin44 Adlı Kullanıcıdan Alıntı: */1 * * * * /path/to/script_name.sh

sonuna & koyun yoksa o scprit bitene kadar askıda kalır diğer crontab görevleri.
ayrıca */1 * * * * sistemusername /path/t belirtmekde önemlidir.

*/1 * * * * root /path/to/script_name.sh &

chmod +x /path/to/script_name.sh

bu yol pek etik değil kanımca, çökmelerde işe yarar.

crontab;
@restart ile scprit 1 kez crontab ile sistem başlangıcında çalıştırılabilir.

@restart /path/to/script_name.sh &
@restart root /path/to/script_name.sh &

https://www.cyberciti.biz/faq/linux-exec...em-reboot/

Yorum için teşekkürler. Evet yazarken eksik yazmışım ben hep işlemleri aynı kullanıcı üzerinde ve gerekli yetkileri verip yaptığım için kullanıcıları eklemeden yazmışım.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#4
Linux'ta Supervisor kullanıyorum. Tavsiye ederim.

Delphi ile Linux daemon(servis) yazmak:
http://blog.paolorossi.net/2017/07/11/bu...-part-1-2/
There's no place like 127.0.0.1
WWW
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi