Belge

Systemd ile Linux hizmetleri oluşturmaya yönelik bir başlangıç ​​kılavuzu

Bir Linux sistem yöneticisi olarak, modern Linux dağıtımlarında sistem ve hizmet yöneticisi olan systemd’yi iyi anlamak çok önemlidir. Bu yazıda, systemd ile bir Linux hizmetinin nasıl oluşturulacağını keşfedeceğiz.

Systemd, arka planda çalışan ve web sunucusu, veritabanı sunucusu veya e-posta sunucusu gibi belirli bir işlev sağlayan programlar olan sistem hizmetlerini yönetmekten sorumludur. Systemd, hizmetleri başlatmayı, durdurmayı, yeniden başlatmayı ve yönetmeyi kolaylaştırır.

systemd nedir?

systemd, Linux işletim sistemleri için bir sistem ve hizmet yöneticisidir. Geleneksel SysVinit ve diğer init sistemlerinin yerini alması için üretilmiştir. Artık Fedora, Debian ve Ubuntu dahil olmak üzere birçok popüler Linux dağıtımı için varsayılan başlatma sistemidir.

systemd, aşağıdakiler gibi çeşitli sistem bileşenlerinin ve hizmetlerinin başlatılmasından ve yönetiminden sorumludur:

  • Önyükleme işlemi: systemd, önyükleme işlemi sırasında sistem hizmetlerini başlatır ve yöneterek her şeyin doğru sırada başlatılmasını sağlar.
  • Hizmet denetimi: systemd, gerektiğinde başlatma, durdurma ve yeniden başlatma da dahil olmak üzere sistem hizmetlerinin yaşam döngüsünü izler ve yönetir.
  • Bağımlılık yönetimi: systemd, hizmetler arasındaki bağımlılıkları izleyerek doğru sırayla başlatılıp durdurulmalarını sağlar.
  • Günlüğe kaydetme: systemd, sistem bileşenleri için merkezi günlük kaydı sağlayan “journald” hizmetini içerir.
  • Kaynak yönetimi: systemd, bireysel hizmetler için CPU ve bellek kullanımı gibi sistem kaynaklarını çok fazla sistem kaynağı tüketmemelerini sağlayarak yönetebilir.

systemd, mevcut SysVinit betikleriyle uyumlu olacak şekilde tasarlanmıştır ve mevcut sistemlerin systemd’ye taşınmasını nispeten kolaylaştırır. Özellikleri ve tasarımı, onu geleneksel init sistemlerine kıyasla daha verimli, güvenilir ve ölçeklenebilir hale getirir.

Linux’un varsayılan systemd hizmetlerine örnekler

İşte Ubuntu’daki popüler systemd hizmetlerine ve bunların işlevlerine ilişkin üç örnek:

NetworkManager.service: NetworkManager, bir Linux sistemindeki ağ bağlantılarını yönetmekten sorumludur. Kullanılabilir ağ cihazlarını algılar ve yapılandırır, kablolu ve kablosuz bağlantıları yönetir ve farklı konumlar için ağ profillerini yönetir. NetworkManager, ağları yönetmek için kullanıcı dostu bir arayüz sağlar ve komut satırı, masaüstü uygulamaları veya grafik kullanıcı arayüzleri aracılığıyla kontrol edilebilir.

Systemd kullanan bir Linux sisteminde NetworkManager.service durumunu görüntülemek için bir terminal açın ve aşağıdaki komutu çalıştırın:

sudo systemctl status NetworkManager.service

checking networkmanager service

Bu komut, etkin olup olmadığı, mevcut durum ve hizmetle ilgili tüm son günlük girişleri dahil olmak üzere NetworkManager.service hakkındaki bilgileri görüntüler.

udev.service: Udev hizmeti, /dev dizinindeki aygıt düğümlerini yönetmekten sorumludur. Donanım cihazları sisteme bağlandığında veya sistemden ayrıldığında bu cihaz düğümlerini dinamik olarak oluşturur, kaldırır ve bakımını yapar. Udev hizmeti, cihazların sistem ve uygulamalar tarafından doğru bir şekilde tanınmasını ve erişilebilir olmasını sağlar.

sudo systemctl status udev.service

udev service running in ubuntu 22.04

cron.service: Cron hizmeti, bir Linux sisteminde zamanlanmış görevleri yönetir. Görevleri saatlik, günlük veya haftalık gibi belirli aralıklarla çalıştırmaktan sorumludur. Cron, günlük dosyalarını döndürme, veritabanlarını güncelleme veya yedeklemeleri çalıştırma gibi sistem bakım görevlerini otomatikleştirmek için yaygın olarak kullanılır.

sudo systemctl status cron.service

cron service running in ubuntu 22.04

Bu hizmetler, Ubuntu’nun çeşitli sistem bileşenlerini ve uygulamalarını yönetmek için kullandığı birçok sistemd hizmetinden yalnızca birkaç örnektir. Bu servislerin durumlarını görebilir veya systemctl komutunu kullanarak kontrol edebilirsiniz.

systemd ile bir Linux hizmeti oluşturma

Özel bir systemd hizmeti oluşturmak, hizmeti ve davranışını tanımlayan bir hizmet birimi dosyası oluşturmayı ve ardından systemctl komutunu kullanarak hizmeti etkinleştirmeyi ve başlatmayı içerir. İşte basit bir systemd hizmeti oluşturmak için adım adım bir kılavuz:

1. Adım: Bir komut dosyası oluşturun

Bir terminal açın: Bir terminal penceresi açmak için Ctrl + Alt + T tuşlarına basın.

Yeni bir dosya oluştur: Belirtilen konumda yeni bir dosya oluşturmak için nano gibi bir metin düzenleyici kullanın:

sudo nano /usr/local/bin/Hello_FOSSLinux.sh

Not: /usr/local/bin dizini, yerel sisteme özgü özel betiklerin ve yürütülebilir dosyaların yüklenmesi için standart bir konumdur. Hello_FOSSLinux.sh betiğini /usr/local/bin dizinine yerleştirerek, betiği çalıştırırken tam yolu belirtmeye gerek kalmadan sistemdeki kullanıcılar için erişilebilir hale getirirsiniz.

Komut dosyası içeriğini girin: Aşağıdaki içeriği metin düzenleyiciye yapıştırın:

#!/bin/bash
echo "Hello, FOSSLinux!"

using nano editor to create a script file

Kaydet ve çık: Ctrl + O ve ardından Enter tuşlarına basarak dosyayı kaydedin. Ctrl + X tuşlarına basarak metin düzenleyiciden çıkın.

2. Adım: Komut dosyasını çalıştırılabilir yapın

Komut dosyasını çalıştırılabilir yapmak için aşağıdaki komutu çalıştırın:

sudo chmod +x /usr/local/bin/Hello_FOSSLinux.sh

make script executable

Step 3: Create a systemd unit file

The next step is to create a systemd unit file that describes the service. Use a text editor like nano to create a new file at the specified location:

sudo nano /etc/systemd/system/FOSSLinux.service

Birim dosya içeriğini girin: Aşağıdaki içeriği metin düzenleyiciye yapıştırın:

[Unit]
Description=FOSSLinux Service

[Service]
ExecStart=/usr/local/bin/Hello_FOSSLinux.sh

[Install]
WantedBy=multi-user.target

creating a systemd unit file using nano editor

Birim bölümü, hizmetin bir açıklamasını sağlar. Hizmet bölümü, hizmetin nasıl başlatılması, durdurulması ve yeniden başlatılması gerektiğini tanımlar. ExecStart yönergesi, hizmeti başlatma komutunu belirtir. Kurulum bölümü, hizmetin ne zaman başlatılması gerektiğini belirtir.

Kaydet ve çık: Ctrl + O ve ardından Enter tuşlarına basarak dosyayı kaydedin. Ctrl + X tuşlarına basarak metin düzenleyiciden çıkın.

4. Adım: systemd’yi yeniden yükleyin

systemd’yi yeniden yükleyin: systemd’yi yeni hizmetten haberdar etmek için şunu çalıştırın:

sudo systemctl daemon-reload

reload systemd

5. Adım: Hizmeti başlatın

systemd birim dosyasını oluşturduktan sonra aşağıdaki komutu kullanarak servisi başlatabilirsiniz:

systemctl start FOSSLinux

Bu, hizmeti başlatacak ve FOSSLinux.sh betiğini çalıştıracaktır. Şifrenizi girmeniz gerekebilir.

6. Adım: Hizmeti etkinleştirin

Hizmetin sistem açıldığında otomatik olarak başlamasını istiyorsanız, aşağıdaki komutu kullanarak hizmeti etkinleştirebilirsiniz:

systemctl enable FOSSLinux

Bu, /etc/systemd/system/multi-user.target.wants/ dizininden hizmet dosyasına bir sembolik bağlantı oluşturacaktır.

7. Adım: Durumu kontrol edin

Hizmetin durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

systemctl status FOSSLinux

Bu, çalışıp çalışmadığı da dahil olmak üzere hizmetin mevcut durumunu gösterecektir.

starting and checking a systemd service

Tebrikler! Az önce kendi systemd hizmetinizi yarattınız!

İpuçları & Hileler

Bu ipuçlarını ve püf noktalarını izleyerek, farklı senaryoları işlemek ve sisteminizin sorunsuz çalışmasını sağlamak için daha donanımlı, daha sağlam ve verimli sistem hizmetleri oluşturabilirsiniz.

Hizmetin doğru çalıştığından emin olmak için her zaman systemd birim dosyanızda mutlak yollar kullanın: Systemd birim dosyaları, yürütülebilir dosyalar ve yapılandırma dosyaları veya betikler gibi diğer gerekli dosyalar için her zaman mutlak yollar kullanmalıdır. Bunun nedeni, systemd’nin dosyaları bulmak için $PATH gibi kullanıcının ortam değişkenlerine güvenmemesidir. Mutlak yolları kullanmak, hizmetin çalıştığı kullanıcı veya ortam bağlamından bağımsız olarak systemd’nin doğru dosyaları bulmasını ve yürütmesini sağlar.

Hizmet yeniden yüklendiğinde çalıştırılacak komutu belirtmek için Hizmet bölümündeki ExecReload yönergesini kullanın: ExecReload yönergesi, systemctl reload komutu kullanılarak hizmet yeniden yüklendiğinde yürütülmesi gereken belirli bir komut tanımlamanıza olanak tanır. Bu, tamamen yeniden başlatmaya ihtiyaç duymadan yapılandırmalarını dinamik olarak yeniden yükleyebilen hizmetler için kullanışlıdır. ExecReload yönergesini tanımlarken, çalıştırmak istediğiniz komut veya komut dosyası için mutlak bir yol kullandığınızdan emin olun. Örneğin:

[Service]
ExecStart=/path/to/executable
ExecReload=/path/to/reload-script

Bir hatadan sonra hizmeti yeniden başlatmadan önce beklenecek saniye sayısını belirtmek için Hizmet bölümündeki RestartSec yönergesini kullanın: RestartSec yönergesi, bir hatadan sonra hizmet yeniden başlatılmadan önce bir gecikme (saniye cinsinden) tanımlamanıza olanak tanır. Bu, kaynakları serbest bırakmak için belirli bir süre gerektiren hizmetler için veya yüksek sistem yüküne neden olabilecek hızlı yeniden başlatma döngülerini önlemek için yararlı olabilir. RestartSec yönergesini ayarlayarak yeniden başlatma davranışını kontrol edebilir ve olası sorunlardan kaçınabilirsiniz. Örneğin:

[Service]
ExecStart=/path/to/executable
Restart=on-failure
RestartSec=5

Bu örnekte, hizmet bir hatayla (sıfır olmayan durum) çıkarsa 5 saniyelik bir gecikmenin ardından yeniden başlatılacaktır.

Sorun giderme ipuçları

Bu sorun giderme ipuçlarını kullanarak, sistem servisleriyle ilgili sorunları daha etkin bir şekilde belirleyip çözebilir ve sisteminizin sorunsuz çalışmasını sağlayabilirsiniz.

systemd-analyze doğrulama komutunu kullanarak systemd birim dosyanızın sözdizimini kontrol edin: Bir systemd hizmetini başlatmadan veya etkinleştirmeden önce, hata olmadığından emin olmak için birim dosyasının sözdizimini kontrol etmek iyi bir uygulamadır. Bu kontrolü gerçekleştirmek için systemd-analyze doğrulama komutunu kullanabilirsiniz. Örneğin, hizmetiniz my-custom-service.service olarak adlandırılırsa şunları çalıştırabilirsiniz:

systemd-analyze verify /etc/systemd/system/my-custom-service.service

Bu komut, birim dosyasını analiz edecek ve sözdizimi hatalarını, eksik dosyaları veya diğer sorunları bildirecektir. Hizmeti etkinleştirmeden ve başlatmadan önce bildirilen sorunları düzeltin.

Journalctl -u <hizmet-adı> komutunu kullanarak hizmetinizin günlüklerini kontrol edin: Bir systemd hizmetiyle ilgili sorunlar yaşıyorsanız, ipuçlarını arayacağınız ilk yer hizmetin günlüğüdür. Belirli bir hizmetin günlüklerini görüntülemek için journalctl komutunu kullanabilirsiniz. Örneğin, my-custom-service.service günlüklerini görüntülemek için şunu çalıştırın:

journalctl -u my-custom-service.service

Bu komut, herhangi bir hata mesajı, uyarı veya diğer ilgili bilgiler dahil olmak üzere belirtilen hizmet için günlükleri görüntüler. Hizmetle ilgili sorunları belirlemek ve gidermek için bu günlükleri kullanabilirsiniz.

Önyükleme sürecini görselleştirmek ve sorunları belirlemek için systemd-analyze plot komutunu kullanın: Bir hizmetin önyükleme işlemi sırasında sorunlara neden olduğundan şüpheleniyorsanız, systemd-analyze plot komutu, önyükleme işlemini görselleştirmenize ve olası sorunları belirlemenize yardımcı olabilir. Önyükleme işleminin bir grafiğini oluşturmak için şunu çalıştırın:

systemd-analyze plot > boot-plot.svg

Bu komut, her hizmetin başlangıç ​​ve bitiş zamanları da dahil olmak üzere önyükleme işleminin grafiksel bir temsilini içeren boot-plot.svg adlı bir SVG dosyası oluşturur. Önyükleme sürecini analiz etmek ve sorunlara neden olabilecek hizmetleri belirlemek için bu dosyayı SVG uyumlu bir resim görüntüleyicide veya web tarayıcısında açabilirsiniz.

Sonuç olarak

systemd ile bir Linux hizmeti oluşturmak, bir betik oluşturmayı, bir systemd birim dosyası oluşturmayı, hizmeti başlatmayı ve otomatik olarak başlamasını sağlamayı içeren basit bir işlemdir. Bu makalede verilen ipuçlarını ve püf noktalarını ve sorun giderme ipuçlarını izleyerek, sistem gereksinimlerinizi karşılayan güvenilir ve sağlam hizmetler oluşturabilirsiniz. Linux sisteminizdeki hizmetleri etkili bir şekilde yönetmek için systemd ve onun yetenekleri hakkında iyi bir anlayışa sahip olmak çok önemlidir.

Hizmetleri oluşturmaya ve yönetmeye ek olarak systemd ayrıca günlük kaydı, kaynak yönetimi ve ağ yapılandırması gibi başka kullanışlı özellikler de sağlar. Bu özelliklerden yararlanarak, sisteminizin ihtiyaçlarını karşılayan daha sağlam ve ölçeklenebilir hizmetler oluşturabilirsiniz.

systemd’nin karmaşık bir sistem olduğunu ve sorun gidermenin gerekli olduğu durumlar olabileceğini akılda tutmak önemlidir. Bu makalede sağlanan sorun giderme ipuçlarını izleyerek ve sistem belgeleri ve çevrimiçi topluluklar gibi kaynaklardan yararlanarak sorunları çözebilir ve hizmetlerinizin sorunsuz çalışmasını sağlayabilirsiniz.

Yazının orjnalini buradan okuyabilirsiniz.