Systemd: Servis dosyası örneği
Ç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.oneshot – simple 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.dbus – simple 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.idle – simple 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