RDP Monster

systemctl ile Linux servislerini listelemenin tüm yolları

systemctl ile Linux servislerini listelemenin tüm yolları

Bilinmesi gereken tek komut: systemctl list-units --type=service

systemd çalıştıran her dağıtımda — 15.04'ten beri Ubuntu, 8'den beri Debian, 7'den beri RHEL ve CentOS, ayrıca Fedora, Arch ve openSUSE — her servis bir systemd birimidir (unit) ve bunları listeleyen araç systemctl'dir:

systemctl list-units --type=service

Varsayılan olarak bu komut, systemd'nin o anda bellekte tuttuğu tüm servis birimlerini yazdırır: etkin olanlar, kuyruğa alınmış işleri bulunanlar veya başarısız olanlar. Kurulu olup hiç başlatılmamış servisleri göstermez. Çıktı terminalinizden uzun olduğunda systemctl onu bir sayfalayıcıya (less) aktarır — çıkmak için q tuşuna basın veya doğrudan stdout'a yazdırmak için --no-pager ekleyin.

Her satırda beş kolon bulunur:

  • UNIT — birim adı, örneğin ssh.service. Bu, systemctl status, start ve stop komutlarına verdiğiniz tam addır.
  • LOAD — birim dosyasının doğru ayrıştırılıp ayrıştırılmadığı: loaded, not-found, bad-setting, error veya masked.
  • ACTIVE — üst düzey durum: active, inactive, activating, deactivating veya failed.
  • SUB — birim tipine özgü alt düzey durum: bir servis running, exited, dead ve benzeri olabilir.
  • DESCRIPTION — birim dosyasındaki, insanların okuyabileceği açıklama metni.

ACTIVE/SUB ikilisini birlikte okuyun: active (running) şu anda canlı bir süreç olduğu anlamına gelir, active (exited) ise bir oneshot servisin başarıyla çalışıp bittiğini gösterir — kurulum görevleri için normaldir, düzeltilmesi gereken bir sorun değildir.

Filtreleme: çalışanlar, başarısız olanlar veya hepsi

--state= bayrağı herhangi bir LOAD, ACTIVE veya SUB değerine göre filtreler ve virgülle ayrılmış listeleri kabul eder:

# Only services with a live process
systemctl list-units --type=service --state=running

# Everything loaded, including stopped and dead services
systemctl list-units --type=service --all

# Only failures
systemctl list-units --type=service --state=failed

# Combine states
systemctl list-units --type=service --state=running,exited

systemctl --failed, başarısız filtresinin yerleşik kısayoludur ve giriş yaptığınız her makinede refleks olarak çalıştırmaya değer. Makine tarafından okunabilir çıktı için --no-legend başlık ve özet satırlarını, --plain ise madde işaretlerini kaldırır; böylece kolonlar awk veya cut için kararlı kalır. Ada göre arama yapmak için grep'e aktarın: systemctl list-units --type=service --all --no-pager | grep ssh.

Açılışta ne başlıyor: systemctl list-unit-files

list-units "şu anda ne çalışıyor?" sorusunu yanıtlar. "Açılışta ne başlayacak?" sorusunu yanıtlamak için bunun yerine diskte kurulu birim dosyalarını listeleyin:

systemctl list-unit-files --type=service
systemctl list-unit-files --type=service --state=enabled

Burada STATE kolonu çalışma zamanı durumunu değil, açılış yapılandırmasını tanımlar:

  • enabled — açılışta otomatik olarak başlar (veya socket/timer ile tetiklenen servislerde tetikleyicisiyle).
  • disabled — kurulu, ancak onu otomatik olarak başlatan hiçbir şey yok.
  • static[Install] bölümü yok; yalnızca başka bir birimin bağımlılığı olarak çalışır ve doğrudan etkinleştirilemez.
  • masked/dev/null hedefine sembolik bağ verilmiş; systemd onu başlatmayı tamamen reddeder.
  • generated — çalışma zamanında bir generator tarafından, genellikle eski bir init betiğinden oluşturulmuş.

Güncel systemd sürümleri ayrıca dağıtımın varsayılanının ne olacağını gösteren bir preset kolonu da yazdırır (sürüme göre VENDOR PRESET veya PRESET). Kaçınılması gereken tuzak: enabled çalışıyor demek değildir, disabled da durdurulmuş demek değildir. Bir servis devre dışı olduğu hâlde biri onu elle başlattığı için çalışıyor olabilir; ya da etkin olduğu hâlde çöktüğü için ölü olabilir. Önemli olduğunda her iki listeyi karşılaştırın.

Tek tek servisler: status, is-active, is-enabled

Bir servis dikkatinizi çektiğinde yakınlaştırın:

systemctl status nginx
systemctl is-active nginx    # prints: active | inactive | failed
systemctl is-enabled nginx   # prints: enabled | disabled | static | masked
systemctl is-failed nginx

status tüm tabloyu gösterir: ACTIVE/SUB durumu, ana PID, çalışma süresi, bellek kullanımı, cgroup süreç ağacı ve son on günlük satırı. On satır yetmediğinde doğrudan günlüğe gidin: journalctl -xeu nginx (-u birime göre filtreler, -e sona atlar, -x açıklayıcı metin ekler).

is-* komutları betik yazmak için tasarlanmıştır: tek bir kelime yazdırır ve çıkış kodunu buna göre ayarlar — is-active yalnızca birim etkin olduğunda 0 ile çıkar, is-enabled ise devre dışı veya maskelenmiş birimler için sıfır dışı bir değerle çıkar. Çıktıyı bastırıp yalnızca çıkış kodunu tutmak için --quiet ekleyin.

Yukarıdaki tüm listeleme komutları yetkisiz bir kullanıcı olarak çalışır. Servisleri gerçekten yönetmek — start, stop, enable, disable — root gerektirir; bu nedenle durum okumanın ötesine geçmeden önce Ubuntu'da sudo ve kullanıcı değiştirmenin nasıl çalıştığını anlamak isteyeceksiniz. Ayrıca kullanıcı düzeyindeki birimlerin ayrı bir yöneticide yaşadığını unutmayın: systemctl --user list-units --type=service kendi oturumunuzda çalışan servisleri listeler; bazı servislerin sistem listesinde "eksik" görünmesinin nedeni budur.

Kopya kâğıdı: gerçekten kullanacağınız listelemeler

KomutNe gösterir
systemctl list-units --type=serviceBellekte bulunan etkin ve başarısız servisler
systemctl list-units --type=service --allEtkin olmayanlar dahil, yüklü her servis
systemctl list-units --type=service --state=runningYalnızca canlı bir süreci olan servisler
systemctl --failedYalnızca başarısız birimler — günlük sağlık kontrolü
systemctl list-unit-files --type=serviceKurulu her servis ve açılış ayarı
systemctl list-unit-files --state=enabledAçılışta otomatik başlayan birimler
systemctl status nameTek bir servis için tüm ayrıntılar ve son günlük satırları
systemctl is-active nameTek kelimelik durum ve betik dostu çıkış kodu
systemctl is-enabled nameTek bir servisin açılış yapılandırması
service --status-all/etc/init.d betiklerinin SysV tarzı listesi (uyumluluk)

Gerçek hayattan iş akışları

1. Sürekli başarısız olan servisi bulun

systemctl --failed
systemctl status myapp.service --no-pager -l
journalctl -xeu myapp.service
systemctl reset-failed myapp.service

--failed ile geniş başlayın, ardından çıkış kodu ve son günlük satırları için status çıktısını okuyun, sonra tam izleme için günlüğe inin. Kök neden düzeltilip servis yeniden ayağa kalktığında, reset-failed eski başarısız kaydını temizler; böylece sonraki sağlık kontrolünüz temiz başlar.

2. Sonraki açılışta neyin başlayacağını denetleyin

systemctl list-unit-files --type=service --state=enabled --no-legend | awk '{print $1}'
systemd-analyze blame

İlk komut otomatik başlayacak her şeyin temiz bir listesini verir — bir sunucuyu sıkılaştırmadan önce veya aylar önce kurup unuttuğunuz bir şeyi ararken işe yarar. systemd-analyze blame ise son açılışta her birimin ne kadar sürdüğünü gösterir; yavaş başlayan servisler burada anında öne çıkar.

3. Betikler ve izleme için tek satırlıklar

systemctl is-active --quiet nginx && echo up || echo down
systemctl list-units --type=service --state=running --no-legend --plain | awk '{print $1}'
systemctl show -p ActiveState,SubState nginx
systemctl list-units --type=service -o json   # systemd 246 or newer

show -p, sürümler arasında biçimi hiç değişmeyen Key=Value çiftleri yazdırır ve JSON çıktısı doğrudan jq'ya beslenir. Aynı kontrolleri her girişte tekrar tekrar çalıştırdığınızı fark ederseniz, bunları küçük bir betiğe sarın — .sh dosyaları ve kabuk betikleri rehberimiz tam olarak bu tür parçacıkları yeniden kullanılabilir bir araca dönüştürmeyi anlatıyor.

systemd yok mu? service --status-all ve OpenRC

systemctl'in var olduğunu varsaymadan önce makinenin gerçekte ne çalıştırdığını doğrulayın — işletim sistemini ve sürümünü komut satırından kontrol etmek on saniye sürer ve size hiç systemd tabanlı bir dağıtımda olup olmadığınızı söyler. systemctl yoksa SysV init veya OpenRC üzerindesiniz:

service --status-all

Debian ve Ubuntu'da bu komut /etc/init.d dizinini gezer ve çalışanlar için [ + ], durdurulmuşlar için [ - ], status komutu olmayan betikler için [ ? ] yazdırır. systemd dağıtımlarında da bir uyumluluk katmanı üzerinden çalışır, ancak yalnızca init betiklerini gördüğü için orada systemctl'i tercih edin. Alpine ve Gentoo'da init sistemi OpenRC'dir: rc-status geçerli çalışma seviyesindeki servisleri, rc-update show ise her çalışma seviyesinin neyi başlattığını listeler.

Yukarıdaki her şey, root yetkisine sahip olduğunuz ve servisleri özgürce başlatıp bozup düzeltebileceğiniz bir Linux makineniz olduğunu varsayar. Alıştırma yapmak için birine ihtiyacınız varsa — ya da gerçek iş yüklerini barındıracak temiz bir makine için — rdp.monster'dan alacağınız tam root erişimli bir Linux VPS ayrılmış CPU ve RAM, sınırsız (fair-use) bant genişliği ve KYC gerektirmeyen bir kayıtla gelir; ödeme onaylandıktan yaklaşık 10 saniye sonra teslim edilir, yani bir dakika içinde kendi sunucunuzda systemctl list-units çalıştırabilirsiniz.

Sık sorulan sorular

Bir servis neden active (running) yerine active (exited) gösteriyor?

Başarıyla çalışıp biten bir oneshot servistir — hata değildir.
Type=oneshot (veya RemainAfterExit=yes) olan servisler bir görevi bir kez çalıştırır — bağlama, güvenlik duvarı kurulumu, temizlik — ve çıkar. systemd sonrasında active (exited) bildirir: birim başarılı olmuştur ve "açık" sayılır, ancak arkada çalışan bir süreç kalmaz. Yalnızca nginx veya sshd gibi arka plan servisleri active (running) gösterir. Arka plan servisi olmasını beklediğiniz bir servis exited gösteriyorsa, nasıl tanımlandığını görmek için birim dosyasını systemctl cat name.service ile inceleyin.

systemctl çıktısındaki renkli noktalar ne anlama gelir?

Yeşil etkin, beyaz etkin değil, kırmızı ise başarısız veya hatalı anlamına gelir.
systemctl status ve systemctl list-units çıktısında birim adından önce gelen madde işareti hızlı bir durum göstergesidir: etkin için yeşil, etkin değil veya kapanmakta için beyaz, başarısız veya hata durumları için kırmızı. Başarısız satırlar listelerde de kırmızıyla vurgulanır; bu da systemctl --failed çıktısını taramayı kolaylaştırır. Renk kodlarının engel olduğu betiklerde veya günlüklerde --plain ekleyin ya da çıktıyı aktarın; süslemeler kaybolur.

chkconfig --list komutunun systemctl karşılığı var mı?

Evet — systemctl list-unit-files --type=service, chkconfig --list yerine geçer.
RHEL ve CentOS 7 veya daha yeni sürümlerde chkconfig --list yerini systemctl list-unit-files --type=service komutuna bırakır; bu komut kurulu her servisi ve enabled, disabled, static ya da masked olup olmadığını gösterir. Tek bir servis için systemctl is-enabled name, chkconfig name yerine geçer; systemctl enable name ise chkconfig name on yerine geçer. Eski komut bir uyumluluk katmanı olarak hâlâ bulunabilir, ancak yalnızca eski SysV betiklerini kapsar.

Bir servisin açılışta başlamasını nasıl engellerim?

Açılıştan kaldırmak için systemctl disable, tamamen engellemek için mask kullanın.
Açılış sembolik bağını kaldırmak için sudo systemctl disable name çalıştırın; hemen durdurmak için --now ekleyin. Devre dışı bırakılmış bir servis yine elle başlatılabilir veya başka bir birimin bağımlılığı olarak devreye alınabilir. Hiç başlamamasını istiyorsanız sudo systemctl mask name kullanın; bu, birimi /dev/null hedefine bağlar ve her başlatma denemesi başarısız olur. Daha sonra systemctl unmask ile geri alın. Sonucu systemctl is-enabled name ile doğrulayın.

Adrien Roche — Altyapı ve Hosting Editörü

Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.

Bayilik programımıza kaydolun

Bilgileriniz

Bir sorunuz varsa, contact us by clicking here !
Ad Soyad(Zorunlu)
E-posta adresinizi girin, şu adreste bir hesabınız olmalı: manager.rdp.monster !

Şirketiniz

Varsa web sitenizin adresini girin
Hizmetleri müşterilerinize nasıl satacağınızı kısaca açıklayın. Örneğin, forumlarda insanlarla konuşmak gibi.

Çerez kullanıyoruz !

Tarama deneyiminizi geliştirmek, kişiselleştirilmiş reklam veya içerik sunmak ve trafiğimizi analiz etmek için çerez kullanıyoruz. «Kabul Et»'e tıklayarak çerez kullanımımızı onaylarsınız.