Skip to content

Latest commit

 

History

History
 
 

No 11 - .Net Core Worker Services

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Basit Bir .Net Core Worker Servisi (Linux Daemon Olarak)

.Net Core worker service'ler ile planlanmış görevlerin arka planda icra edilmesi de mümkün. Mesela belirli aralıklarla sistemden veri toplayıp kullanan bir Windows Service'i bu şekilde geliştirebiliriz. Lakin o zaman .Net Core kullanmanın bir esprisi olmaz :) Bunun yerine bir Linux servisi geliştirmeyi deneyebiliriz. Benim amacım Heimdall (Ubuntu 20.04) üzerinde Linux Daemon olarak çalışacak bir servis geliştirmek. Örneğin günlük hava durumu bilgilerini 24 satte bir toplayıp Redis üzerinde saklayan bir servis. Dokuzuncu örnekte kullandığım Redis Docker Container'ını bu örnek için de değerlendirebilirim. Kodları da hazır.

Hazırlıklar

Projenin oluşturulması ve gerekli hazırlıklar.

dotnet new worker -o WeatherCollector
cd WeatherCollector
dotnet add package Microsoft.Extensions.Hosting.Systemd
dotnet add package Microsoft.Extensions.Caching.Redis       

Systemd modülü Linux Daemon kullanımı için eklenmiştir. Redis tahmin edileceği üzere...

Daemon Kurulumu için Hazırlıklar

Uygulama kodu tamamlandıktan ve dotnet run sonrası düzgün bir şekilde çalıştığı izlendikten sonra uygulamanın publish edilmesi gerekiyor.

dotnet publish -o artifact

Ardından .service uzantılı bir Unit dosyası hazırlanmalı. (src klasöründeki WeatherCollector.service dosyası) Bu dosya /etc/systemd/system altına alınmalı. Normalde dosya systemd/system klasörüne atılır atılmaz etkinleşiyor ama etkinleşmezse dameon-reload çağrımı denenebilir. Durum kontrolü için status komutundan yararlanmak önemli.

sudo cp WeatherCollector.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl status WeatherCollector

Servisi yeniden başlatmak, durdurmak veya sistemden kaldırmak için systemctl aracının belli başlı komutlarını bilmekte yarar var.

sudo systemctl daemon-reload
sudo systemctl status WeatherCollector
sudo systemctl restart WeatherCollector
sudo systemctl stop WeatherCollector
sudo systemctl disable WeatherCollector
sudo rm WeatherCollector.service    

İlk komut servis dosyasında değişiklik olduysa demaon'ı yeniden yüklemek için. İkinci komut servisin güncel durumunu görmek, üçüncüsü yeniden başlatmak, dördüncüsü durdurmak ve beşincisi pasif hale çekmek için. Son komut ile de servis dosyasını kaldırıyoruz.

Bu bir öğreti çalışması olduğu için servisi içerde unutmamak lazım. Yoksa üç dakikada bir... :D

Screenshot_1.png

Screenshot_2.png

Uygulamayı servis olarak daemon'a eklemeden dotnet run ile çalıştırıp sonuçları görebiliriz. Önce doğru çalıştığından emin olmakta sonra system'e yüklemekte yarar var.