Yeni Nesil GNU -Linux OS Sistemlerinde Systemd Kullanım Kılavuzu

GNU/Linux & UNIX türevi işletim sistemleri/dağıtımlar hakkında her türlü bilgiyi bulabileceğiniz bölümümüz.
Cevapla
Kullanıcı avatarı
TRWE_2012
Mesaj Panosu Yöneticisi
Mesaj Panosu Yöneticisi
Mesajlar: 575
Kayıt: 30 Ağu 2022 21:59
Konum: BERTUNA/Orion Takım Yıldızı
Meslek: MADEN MÜHENDİSİ
Teşekkür etti: 123 kez
Teşekkür edildi: 419 kez

Yeni Nesil GNU -Linux OS Sistemlerinde Systemd Kullanım Kılavuzu

Mesaj gönderen TRWE_2012 »

Not:

Gerçek Bir Alıntı (bu makale yüzden forumdan uzaklaştırılmıştım.Çünkü bu tür uzun yazılar yeni nesil pc kullanıcılarının sıkılmasına yol açar.Kaynağı talep etmiştim ama bu yazının sahibi kaynak göstermekten itina etmiş bende ağır bir eleştiride bulunmuştum.Sonuç forumdan(başka) şutlanmakla sonuçlanmıştır.

Yeni Nesil GNU -Linux OS Sistemlerinde Systemd Kullanım Kılavuzu (başlık SEO açısından tarafımdan değiştirilmiştir.)

Servis Yönetimi

Init sistem olarak adlandırılan başlatıcı sisteminin temel işlevi, boot esnasında Linux çekirdeğinin (kernel) yüklenmesinden sonra gerçekleştirilen kullanıcı safhası (userland) elemanlarının başlatılması ve kullanımının yönetilmesidir. Linux işletim sisteminiz çalışırken de servisler systemd tarafından yönetilmeye devam eder. Bu konuyu ifade ettikten sonra bir takım basit işlemlere geçebiliriz.

Systemd için gerçekleştirilecek işlemlerin çoğu unit adı verilen elemanlarla ilgilidir. Unit elemanları, systemd nin anlayacağı şekilde yapılandırılmış dosyalardır. Her bir unit elemanı, sonuna . nokta işaretinden sonra verilen uzantı kullanılarak gruplandırılır. Bu sayede bir unit elemanının hangi işlev ile ilgili olduğu temsil edilir.

Örneğin, mysqld.service unit elemanı MySQL hizmeti ile ilgilidir. tmp.mount unite elemanı ise tmp disk bölümünün mount edilmesi ile ilgili bir elemandır. Komutları kullanırken sonu .service ile biten elemanların .service kısmını yazmasanız da systemd bunu anlayacaktır. Ancak .mount veya .path vb. unit elemanların uzantısını mutlaka yazmanız gerekir. Konvansiyonu takip etme açısından her zaman .service kısmını da yazmanızı tavsiye ediyoruz. TAB otomatik tamamlama işlevi zaten baş kısmını yazdığınız unit elemanının gerisini kendisi tamamlayacaktır.

Servisleri Başlatma ve Durdurma

Servisi Başlatma

Bir systemd servisini başlatmak ve o servise ait unit dosyasında bulunan kuralları çalıştırmak için start komutunu kullanıyoruz. Verdiğimiz komut sistemin çalışma durumunu etkileyeceğinden başına sudo eklemek gerekecektir. Zaten root kulanıcısı ile oturum açtıysanız sudo ifadesine gerek yoktur.

Kod: Tümünü seç

sudo systemctl start application.service
Yukarıda bahsettiğimiz konuyu tekrar hatırlatalım. Buradaki örnekte görülen application.service ifadesindeki .service kısmını yazmasanızda komut çalışacaktır.

Kod: Tümünü seç

sudo systemctl start application
Servisi Durdurma

Sisteminizde mevcut durumda halen çalışan bir servisi durdurmak için stop komutunu kullanıyoruz.

Kod: Tümünü seç

sudo systemctl stop application.service
Tekrar Başlatma (Restarting) ve Tekrar Yükleme (Reloading)

Bir servis mevcut durumda çalışıyorsa ve tekrar başlatmak istersek restart komutunu kullanabilirsiniz.

Kod: Tümünü seç

sudo systemctl restart application.service
Çalışan bir servis ile ilgili ayar dosyalarında bir değişiklik yaptınız ancak servisi tamamen yeniden başlatmaya gerek kalmadan, ayarların etkin olmasını isterseniz reload komutunu kulanabilirsiniz.

Kod: Tümünü seç

sudo systemctl reload application.service
Yeniden başlatacağınız servisin reload kabiliyeti olmayabilir. Reload işe yaramaz ve restart yapmanız gerekebilir. Bu durumdan emin değilseniz reload-or-restart komutunu da kullanabilirsiniz. Bu durumda servis reload yapabiliyorsa yapar. Böyle bir durum yoksa o zaman otomatik olarak restart yapar.

Kod: Tümünü seç

sudo systemctl reload-or-restart application.service
Servisi Aktif ve Pasif Duruma Getirme

Bir önceki başlıkta açıklanan start, stop, restart, reload komutları bir servisi o anda açık bulunan oturum için açma ve kapamaya yarar. Bu komutlar, servisin bilgisayar açılırken başlayıp başlamayacağı ile ilgilenmez. Bilgisayar başlangıcı için ayrı komutlar bulunmaktadır.

Aktif Duruma Getirme

Öncelikle, bir servisin sisteminiz açılırken başlamamaya ayarlandığını farz edelim. Bu servisi, bilgisayar her açıldığında başlayacak şekilde ayarlamak için enable komutu kullanabiliriz. Yani aktif hale getiririz. Aktif hale getirmek, her sistem açıldığında başlaması anlamına gelmektedir. Aşağıda bu duruma örnek verilmiştir.

Kod: Tümünü seç

sudo systemctl enable application.service
İLERİ DÜZEY:

Yukarıdaki komut aslında ne yapıyor? Başlatmak istediğiniz servisin unit elemanı pasif halde de olsa genellikle ( /lib/systemd/system veya /etc/systemd/system) klasöründe duruyordur. İşte bu konumun symbolic link olarak adlandırdığımız kısayolunu, systemd nin başlangıçta otomatik başlatılacak servisler için baktığı adrese /etc/systemd/system/application.service.wants.wants şeklinde oluştur.

Pasif Duruma Getirme

Bir servisi, bilgisayar başlangıcında çalışmaması için ayarlamak istediğimizde ise disable komutunu kullanırız.

Kod: Tümünü seç

sudo systemctl disable application.service

Bu komut, enable komutu ile oluşturulan symbolic link dosyasını silecek ve servisi pasif hale getirecektir.


Hatırlatma: enable ve disable komutları, sistem başlangıcı ile ilgili olduğundan, halen açık bulunan oturumda servisi başlatmaz veya durdurmaz. Bunun için start veya stop komutları kullanılmaktadır ve birbirlerinden farklı işlevleri olan komutlardır.


Servisin Durumunu Kontrol Etme

Kod: Tümünü seç

status

Bir servisin durumunu, çalışıp çalışmadığını status komutunu kullanarak kontrol edebilirsiniz.

Kod: Tümünü seç

systemctl status application.service

Bu komut size servisle ilgili durum bilgisi ve en son olay log bilgilerini verecektir. Herhangi bir problem varsa, yine bu çıktı sayesinde görebilirsiniz.

Aşağıdaki örnekte nginx.service çıktısı görülmektedir.

Kod: Tümünü seç

● nginx.service - A high performance web server and a reverse proxy server

   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

   Active: active (running) since Tue 2015-01-27 19:41:23 EST; 22h ago

 Main PID: 495 (nginx)

   CGroup: /system.slice/nginx.service

           ├─495 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr;

           └─496 nginx: worker process


Jan 27 19:41:23 desktop systemd[1]: Starting A high performance web server and a reverse proxy server...

Jan 27 19:41:23 desktop systemd[1]: Started A high performance web server and a reverse proxy server.

is-active

Şu an çalışılan oturumda, bir servisin çalışıp çalışmadığını is-active parametresini kullanarak görebilirsiniz. Yukarıdaki status komutu kadar detaylı bilgi vermez.

Kod: Tümünü seç

systemctl is-active application.service

Kod: Tümünü seç

is-enabled

Bir servisin, bilgisayar açılırken başlayıp başlamadığını öğrenmek isterseniz is-enabled parametresini kullanabilirsiniz.

Kod: Tümünü seç

systemctl is-enabled application.service

Kod: Tümünü seç

is-failed

Bir servisin hata verip vermediğini anlamak için is-failed parametresini de kullanmanız mümkündür.

Kod: Tümünü seç

systemctl is-failed application.service
Sistem Genel Durumunu Gözden Geçirme

Yazımızda buraya kadar, tek bir servisin durumu ve başlangıç işlemleri ile ilgili komutları gördük. Sistemin tamamıyla ilgili bilgileri gözden geçireceğimiz bir takım systemctl komutlarına bakma zamanı geldi.

Çalışan Tüm Üniteler

Sistemimizde şu an için çalışan ve yüklenmiş servisleri görmek için aşağıdaki komutu kullanabilirsiniz.

Kod: Tümünü seç

systemctl list-units

Bu komut ile, systemd tarafından başlatılmış olan hizmetlerin özet bilgisini görebilirsiniz. Aşağıda örnek çıktı ve sütun açıklamaları bulunmaktadır.

Kod: Tümünü seç

UNIT                                      LOAD   ACTIVE SUB     DESCRIPTION

atd.service                               loaded active running ATD daemon

avahi-daemon.service                      loaded active running Avahi mDNS/DNS-SD Stack

dbus.service                              loaded active running D-Bus System Message Bus

dcron.service                             loaded active running Periodic Command Scheduler

dkms.service                              loaded active exited  Dynamic Kernel Modules System

getty@tty1.service                        loaded active running Getty on tty1

. . .

Sütunlar Açıklamalar

UNIT: Systemd unit elemanının adını belirtir.

LOAD: Unit elemanının sistem hafızasına yüklenip yüklenmediğini gösterir.

ACTIVE: Bir unit elemanının başarıyla başlatılıp başlatılmadığını gösterir.

SUB: Alt seviye durum bilgisidir. Bazı servisler bilgisayar başlangıçında çalışıp otomatik kapanabilirler. Bu tür servisleri exited (çalıştı ve çıkış yapıldı) olarak görebilirsiniz. Halen çalışıyorsa running ifadesiyle gösterilirler.

DESCRIPTION: Durumu gösterilen ünitenin kısaca ne işe yaradığını özetler.

İLERİ DÜZEY AÇIKLAMA:

Yukarıdaki komut (systemctl list-units) sadece aktif halde olan servisleri gösterdiğinden doğal olarak LOAD sütunu daima loaded bilgisini gösterecektir. Loaded yani yüklenmiş servisler haricinde diğer servisleri görmek için demek ki ayrıca bir takım parametreler daha belirtmemiz gerekmektedir. Bunun için ayrı parametre belirtmek gerektiğinden aslında varsayılan durum list-units parametresini kullanmaya gerek bile yoktur. Sadece systemctl komutunu vermek ile systemctl list-units komutunu vermek aynı işe yarar. Kafanız karıştıysa endişelenmeyin, bu bilgi programcılar için gerekli olup çok büyük bir değişiklik ifade etmez.

Çalışan veya Çalışmayan Tüm Üniteler

systemctl komutuna sistemimizde bulunan, ister çalışsın ister çalışmasın, systemd tarafından işlem yapılan tüm ünite elemanlarını listelemesini söylemek için –all parametresini verebiliriz.

systemctl list-units --all

Kod: Tümünü seç

–state

Karşımıza gelecek çıktıyı filtrelemek için bir kaç parametre daha kullanabiliriz. Bunlardan bir tanesi --state filtresidir. Aşağıdaki örnekte, state yani durum bilgisi inactive (pasif) olan tüm elemanlar gösterilmektedir. --state parametresine, LOAD, ACTIVE ve SUB sütunlarının alabildiği durumları kriter olarak girebilirsiniz. Burada --all kriterinin daima var olduğuna dikkat edin. Önce hepsi ele alınıp bu liste üzerinden filtreleme yapılmaktadır.

systemctl list-units --all --state=inactive

systemctl list-units --all --state=active

systemctl list-units --all --state=running

systemctl list-units --all --state=exited

Kod: Tümünü seç

–type
Başka bir filtreleme yöntemi ise --type filtresidir. Tipi service olan ünite elemanları listelemek için --type=service kriteri girilebilir.

Kod: Tümünü seç

systemctl list-units --type=service

Tüm Unit Elemanları Dosyaları


Burada açıklanacak olan list-unit-files ile list-units bazen karıştırılabilir. Öncelikle aralarındaki farkı açıklayalım sonra bir örnek verelim.


list-units: systemd tarafından bilgisayarın başlangıcından itibaren işleme tabi tutulmuş (parse edilmiş) tüm unite elemanları ile ilgilenir.


list-unit-files: Systemd envanterinde bir ünite elemanı olarak ayar dosyası var olan ve sizin sisteminiz için çalışmayanlarla birlikte çalışanlarında içinde bulunduğu tüm elemanlarla ilgilidir. Örneğin systemd dosyaları içerisinde bluetooth.service ünite elemanı vardır. Sizin sisteminizde bluetooth özelliği olmasa da o servis elemanı dosyası bulunur. İşte list-unit-files bu tip dosyalar da dahil hepsiyle ilgilidir. İşin özeti, list-unit-files içerisinde ayarların bulunduğu dosyalarla ilgilenir. list-units servislerin durumlarıyla ilgilenir diyebiliriz.

Kod: Tümünü seç

systemctl list-unit-files

Yukarıdaki komutun çıktısı iki sütundan oluşur. UNIT FILE ve STATE sütunları. State sütunu, “enabled” “disabled” “static” veya “masked” değerlerini alır.

Kod: Tümünü seç

UNIT FILE                                  STATE  

proc-sys-fs-binfmt_misc.automount          static 

dev-hugepages.mount                        static 

dev-mqueue.mount                           static 

proc-fs-nfsd.mount                         static 

proc-sys-fs-binfmt_misc.mount              static 

sys-fs-fuse-connections.mount              static 

sys-kernel-config.mount                    static 

sys-kernel-debug.mount                     static 

tmp.mount                                  static 

var-lib-nfs-rpc_pipefs.mount               static 

org.cups.cupsd.path                        enabled

. . .

“static” durumu: Sistemde kurulum için herhangi bir program bulunmadığını veya doğrudan çalışmayıp başka bir program tarafından bağımlılık (dependency) olarak kullanıldığını bildirmek için kullanılır.

“masked” durumu: Sistemde var olan bir servisin tamamen yasaklandığını belirtir. Bilgisayar başladığında başlayıp başlamayacağını “enable” ve “disable” ile ayarladığımızı hatırlayın. “masked” durumunda olan bir servis, otomatik veya elle dahi olsa “enable” edilemez. Tamamen yasaklanmıştır diyebiliriz.

Son notlar:

Yukarıda bulunan örneklerde application.service yerine sisteminizde bulunan bir service yazılmalıdır. Sistemde application.service diye bir servis yoktur. Doğrudan örneği kopyalayıp yapıştırmayın. Örneğin sudo systemctl stop application.service yerine sudo systemctl stop ufw.service . Peki biz bu servisleri nereden bileceğiz? systemctl komut çıktısı size yol gösterecektir.
Verily We have granted thee a manifest Victory
Fetih Suresi - 1.Ayet

Etiketler:
Cevapla

“GNU/Linux & UNIX / Dağıtımlar” sayfasına dön