Cum. Oca 24th, 2020

Özgürlük İçin

Systemd: Servis dosyası örneği

5 min read

Çoğu Linux dağıtımı systemd’yi bir sistem ve servis yöneticisi olarak kullanır.

systemctl , hizmetleri kontrol etmek için kullanılan systemd içindeki ana komuttur.

Bu yazıda, systemctl komutunu kullanarak hizmetinizi kontrol etmenizi sağlayacak bir systemd hizmet dosyasının nasıl oluşturulacağını, birim dosyalarını yeniden yüklemek için yeniden başlatmadan systemd nasıl yeniden başlatılacağını ve yeni hizmetinizi nasıl etkinleştireceğinizi göstereceğim.

Ayrıca en önemli systemd hizmet dosyası seçeneklerini sistemd hizmet dosyalarının canlı örnekleriyle göstereceğim ve açıklayacağım.

Systemd Hizmet Dosyası Oluşturma

/Etc/systemd/system/servis-daemon.service bir systemd hizmet dosyası oluşturun ( servis-daemon servis adınızla değiştirin):

$ sudo touch /etc/systemd/system/servis-daemon.service
 $ sudo chmod 664 /etc/systemd/system/servis-daemon.service

servis-daemon.service dosyasını açın ve bu hizmetin systemctl aracılığıyla denetlenmesine izin veren en az hizmet yapılandırma seçeneklerini systemctl :

[Unit]
Description=Servis

[Service]
ExecStart=/usr/sbin/servis-daemon

[Install]
WantedBy=multi-user.target

Arka Plana Giden Yol: Bir arka plan programının tam yolunu bilmiyorsanız, which servis-daemon deneyin.

Hizmet dosyası değiştirildikten sonra, systemd yapılandırmasını yeniden yüklemesi gerekir:

 $ sudo systemctl daemon-reload

Artık servis status start , stop , restart ve kontrol edebilirsiniz.

 $ sudo systemctl start servis-daemon
 $ sudo systemctl stop servis-daemon
 $ sudo systemctl restart servis-daemon
 $ systemctl status servis-daemon

Bir hizmeti önyüklemede otomatik olarak başlayacak şekilde yapılandırmak için, hizmeti enable gerekir:

  $ sudo systemctl enable servis-daemon

Hizmet günlüklerini kontrol etmek için şunu çalıştırın:

  $ journalctl -u servis-daemon

Systemd Hizmet Dosyası Seçenekleri

Systemd hizmet dosyaları genellikle üç bölümden oluşur.

Ortak yapılandırma öğeleri genel [Unit] ve [Install] bölümlerinde yapılandırılır.

Servise özgü yapılandırma seçenekleri [Service] bölümünde yapılandırılır.

Önemli [Unit] Bölüm Seçenekleri

seçenek Açıklama
Description   Birimin kısa bir açıklaması.
Documentation Belgelere referans veren URI’lerin listesi.
Before , After Birimlerin başlatıldığı sıra.
Requires Bu birim etkinleştirilirse, burada listelenen birimler de etkinleştirilir. Diğer birimlerden biri devre dışı kalır veya arızalanırsa, bu birim devre dışı bırakılır.
Wants Requires daha zayıf bağımlılıkları yapılandırır. Listelenen birimlerden herhangi biri başarıyla başlamazsa, ünitenin etkinleştirilmesi üzerinde herhangi bir etkisi yoktur. Özel birim bağımlılıkları oluşturmanın önerilen yolu budur.
Conflicts Bir birimin başka bir birimde Conflicts ayarı varsa, birincinin başlatılması ikinciyi durdurur veya tersi de geçerlidir.

[Unit] bölüm seçeneklerinin tam listesi:

  $ man Instagram Hesabındaki Resim ve Videoları systemd.unit

Önemli [Install] Bölüm Seçenekleri

seçenek Açıklama
Alias Birim için boşlukla ayrılmış ek ad listesi. systemctl enable komutu hariç çoğu systemctl komutu, gerçek birim adı yerine takma ad kullanabilir.
RequiredBy , WantedBy Geçerli hizmet, listelenen hizmetler başlatıldığında başlatılır. Ayrıntılar için [Unit] bölümündeki Wants ve Requires açıklamasına bakın.
Also Bir kullanıcı systemctl enable veya systemctl disable systemctl enable çalıştırdığında bu birim ile birlikte etkinleştirilecek veya devre dışı bırakılacak birimlerin listesini belirtir.

[Install] bölüm seçeneklerinin tam listesi:

  $ man Instagram Hesabındaki Resim ve Videoları systemd.unit

Önemli [Service] Bölüm Seçenekleri

seçenek Açıklama
Type İşlem başlatma türünü yapılandırır. Biri:
simple (varsayılan) – hizmeti hemen başlatır. Hizmetin ana işleminin ExecStart tanımlanması ExecStart .
forking – işlem çatalları ve ebeveyn çıktıktan sonra hizmetin başlatıldığını düşünür.
oneshotsimple oneshot benzer, ancak sistemd takip birimlerine başlamadan önce işlemin çıkması beklenir (tek bir iş yapan ve daha sonra çıkan komut dosyaları için yararlıdır). RemainAfterExit=yes de ayarlamak isteyebilirsiniz, böylece RemainAfterExit=yes işlemden çıktıktan sonra hizmeti hala etkin olarak görür.
dbussimple dbus benzer, ancak ana işlem bir D-Bus adı kazandığında hizmetin başladığını düşünür.
notify – basitlere benzer, ancak hizmetin yalnızca sistemd’e özel bir sinyal gönderdikten sonra başlatıldığını düşünür.
idlesimple olana benzer, ancak tüm işler tamamlanıncaya kadar servis ikili dosyasının gerçek yürütülmesi ertelenir.
ExecStart Hizmet başlatıldığında yürütülecek bağımsız değişkenlere sahip komutlar. Type=oneshot , daha sonra sırayla yürütülen birden fazla özel komutun belirtilmesini sağlar. ExecStartPre ve ExecStartPost önce ve sonra yürütülecek özel komutları ExecStart .
ExecStop ExecStart başlatılan hizmeti durdurmak için yürütülecek komutlar.
ExecReload Hizmette bir yapılandırma yeniden yüklemesini tetiklemek için yürütülecek komutlar.
Restart Bu seçenek etkinleştirildiğinde, systemctl stop komutu tarafından normal bir durdurma haricinde servis işlemi systemctl stop , systemctl stop veya zaman aşımına ulaşıldığında servis yeniden başlatılacaktır.
RemainAfterExit True ayarlanırsa, tüm süreçlerden çıkılsa bile hizmet etkin kabul edilir. Type=oneshot ile Type=oneshot . Varsayılan değer False .

[Service] bölüm seçeneklerinin tam listesi:

  $ man systemd.service

Systemd Hizmet Dosyası Örnekleri

[Unit]
 Description=NGINX HTTP ve ters proxy sunucusu
 After=syslog.target network.target remote-fs.target nss-lookup.target 
[Service]
 Type=forking
 PIDFile=/run/nginx.pid
 ExecStartPre=/usr/sbin/nginx -t
 ExecStart=/usr/sbin/nginx
 ExecReload=/bin/kill -s HUP $MAINPID
 ExecStop=/bin/kill -s QUIT $MAINPID
 PrivateTmp=true

[Install]
WantedBy=multi-user.target
[Unit] Description=Apache HTTP Sunucu
 After=network.target remote-fs.target nss-lookup.target
[Service] 
 Type=notify EnvironmentFile=/etc/sysconfig/httpd 
 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful 
 ExecStop=/bin/kill -WINCH ${MAINPID} KillSignal=SIGCONT PrivateTmp=true 
[Install]
 WantedBy=multi-user.target
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
ExecStart=/usr/bin/redis-server /etc/redis.conf --daemonize no
ExecStop=/usr/bin/redis-shutdown
User=redis
Group=redis

[Install]
WantedBy=multi-user.target

Daha fazla örnek için systemd.service ve systemd.unit man sayfalarına bakın.

 

 

 

 

 

Kaynak: Shellhaks

Copyright © All rights reserved. | Newsphere by AF themes.
Translate »