Bu görünür systemd sıcak yeni init blokta sistem, aynı sonradan görme bir kaç yıl önce oldu. Her biri için artıları / eksileri nelerdir? Ayrıca, her biri diğer init sistemleriyle nasıl karşılaştırılır?
Bu görünür systemd sıcak yeni init blokta sistem, aynı sonradan görme bir kaç yıl önce oldu. Her biri için artıları / eksileri nelerdir? Ayrıca, her biri diğer init sistemleriyle nasıl karşılaştırılır?
Yanıtlar:
Buradaki çoğu cevap beş yaşında, bu yüzden bazı güncellemelerin zamanı geldi.
Ubuntu başlangıçta varsayılan olarak kullanıyordu, ancak geçen yıl systemd lehine terk ettiler - bkz:
Bu nedenle Ubuntu wiki'de Upstart Users için güzel bir Systemd makalesi var - upstart ve systemd ile upstart'tan systemd'e geçiş rehberi arasında çok detaylı bir karşılaştırma yapıldı.
( Ubuntu wiki'sine göre, Ubuntu'nun geçerli sürümlerinde varsayılan olarak hala yükleyerek upstart-sysv
ve çalıştırarak çalıştırabilirsiniz, sudo update-initramfs -u
ancak systemd projesinin kapsamını göz önünde bulundurarak pratikte nasıl çalıştığını veya systemd olup olmadığını bilmiyorum. kaldırmak mümkün.)
Aşağıdaki Komutlar ve Komut Dosyaları bölümlerindeki bilgilerin çoğu, bu makalede kullanılan bazı örneklerden uyarlanmıştır (bu, yalnızca Creative Commons Attribution-ShareAlike 3.0 Lisansı altındaki Stack Exchange kullanıcı katkıları gibi uygun şekilde lisanslanmıştır ).
Yaygın komutların ve basit komut dosyalarının hızlıca karşılaştırılması, ayrıntılı açıklama için aşağıdaki bölümlere bakın. Bu cevap, Upstart tabanlı sistemlerin eski davranışlarını, soruda belirtildiği gibi, systemd tabanlı sistemlerin yeni davranışlarıyla karşılaştırıyor, ancak "Upstart" olarak etiketlenen komutların mutlaka Upstart'a özgü olmadığını unutmayın - genellikle komutlardır. her sistem dışı Linux ve Unix sistemi için ortaktır.
su
machinectl shell
(aşağıdaki "su komutu değiştirme" bölümüne bakın)
screen
systemd-run --user --scope screen
(aşağıdaki "Beklenmeyen arka plan işlemlerinin öldürülmesi" bölümüne bakın)
tmux
systemd-run --user --scope tmux
(aşağıdaki "Beklenmeyen arka plan işlemlerinin öldürülmesi" bölümüne bakın)
start foo
systemctl start foo
stop foo
systemctl stop foo
restart foo
systemctl restart foo
initctl list
systemctl status
init-checkconf /etc/init/foo.conf
systemd-analyze verify /lib/systemd/system/foo.service
initctl list-env
systemctl show-environment
initctl set-env foo=bar
systemctl set-environment foo=bar
initctl unset-env foo
systemctl unset-environment foo
Başlangıçta, günlükler / var / log / upstart dizinindeki normal metin dosyalarıdır, böylece onları her zamanki gibi işleyebilirsiniz:
cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log
Sistemd'de günlükler dahili bir ikili formatta (metin dosyaları olarak değil) saklanır, bu nedenle journalctl
bunlara erişmek için komut kullanmanız gerekir:
sudo journalctl -u foo
sudo journalctl -u foo -f
Yazılan örnek başlangıç betiği/etc/init/foo.conf
:
description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir
Örnek systemd senaryo yazılmış /lib/systemd/system/foo.service
:
[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target
su
# 1022 çekme isteğinde bir komut değiştirme sistemde birleşti:
Çünkü, Lennart Poettering’e göre “su gerçekten kırılmış bir kavram” .
O açıklıyor "Daha önce olarak su ve sudo kullanabilirsiniz, ancak bunun tam olarak çalışacağını sanmıyoruz " .
Bir su
benzeri davranış elde etmenin resmi yolu şudur:
machinectl shell
Bundan başka edilmiş Lennart Pöttering ile açıklanabilir # 825 sorunu tartışmada:
“Eh, bu konuda uzun tartışmalar oldu, ama sorun şu ki, su ne yapması gereken çok net değil. […] Uzun lafın kısası: su gerçekten kırılmış bir kavram. , ve bunun için kullanmak iyidir, ancak bu tam bir giriş değildir ve bunun için yanlış olmamalıdır. " - Lennart Poettering
Ayrıca bakınız:
Gibi komutlar:
artık beklendiği gibi çalışmıyor . Örneğin, nohup
oturumunuzdan çıktıktan sonra işlemin devam etmesini sağlamak için bir POSIX komutudur. Artık systemd üzerinde çalışmıyor . Ayrıca gibi programlar screen
ve tmux
özel bir şekilde çağrılacak veya başka ihtiyaç onlarla koşmak süreçleri öldürdü alacak (ilk etapta ekranı veya tmux çalışan ana nedeni genellikle ölenlerin süreçleri almıyor iken).
Bu bir hata değil, bilinçli bir karardır, bu nedenle gelecekte düzeltilmesi muhtemel değildir. Lennart Poettering'in bu konuda söylediği şey:
Benim görüşüme göre, UNIX'in varsayılan olarak oturumu kapattıktan sonra keyfi kullanıcı kodunun sınırsız kalmasına izin vermesi oldukça garipti. Günümüzde birçok işletim sistemi çalışanı arasında, bunun mümkün olması, ancak kesinlikle varsayılan olmaması gerektiği tartışılmıştır, ancak şimdiye kadar hiç kimse anahtarı bir varsayılandan bir seçeneğe çevirmek için düğmeyi çevirmeye cesaret edemedi. Oturumu kapattıktan sonra kullanıcı oturumlarını temizlememek sadece çirkin ve biraz da rahatsız edici değil, aynı zamanda bir güvenlik sorunudur. systemd 230 şimdi nihayet anahtarı çevirdi ve nihayet varsayılan olarak kullanıcı oturumu kapattığında her şeyi doğru temizledi.
Daha fazla bilgi için bakınız:
Bir şekilde systemd geriye doğru çalışır - başlangıçta işler olabildiğince çabuk başlar ve sistemd'de işler gerektiğinde başlar. Günün sonunda aynı işler her iki sistem tarafından ve hemen hemen aynı sırayla başlatılabilir, ancak konuşmak için ters yönden bakmayı düşünürsünüz.
İşte Başlangıcı Kullanıcıları için Systemd şöyle açıklıyor:
Sonradan görme süreçleri (iş) başlama 'ın modeli 'açgözlü olay tabanlı' dir, kimin başlangıç olaylar meydana olabildiğince erken başlatılır yani mevcut tüm işler. Önyükleme sırasında upstart, başlangıç veya rcS gibi bazı başlangıç olaylarını "ağaç kökü" olarak sentezler, erken hizmetler bunlar üzerinde başlar ve daha sonra eski hizmetler çalışır. Yeni bir işin aktif olabilmesi için yapılandırma dosyasını / etc / init / içine yüklemesi yeterlidir.
sistemin başlangıç işlemleri için sistemi (birimler) "tembel bağımlılığa dayalı" dır, yani bir birim ancak başka bir başlangıç biriminin buna bağlı olması durumunda başlayacaktır. Önyükleme sırasında, systemd "root unit" (varsayılan.target, grubun içinde geçersiz kılınabilir) başlatır, bu daha sonra geçişsel olarak genişler ve bağımlılıklarına başlar. Yeni bir ünitenin aktif olabilmesi için kendini önyükleme sırasının bir birimine (genellikle multi-user.target) bağımlı olarak eklemesi gerekir.
Şimdi Wikipedia'ya göre bazı yeni veriler:
( En güncel bilgiler için Wikipedia'ya bakın )
Geçmişte , sistemin önüne geçmek için bir Debian çatalı önerildi . Devuan GNU + Linux yaratıldı - systemd olmadan Debian bir çatal (sayesinde fpmurphy1 yorumlar kısmında işaret için).
Bu tartışma hakkında daha fazla bilgi için, bakınız:
Birçoğunuzun zaten bildiği gibi, Ian Jackson tarafından teşvik edilen Init GR Debian oyları, Debian'ın mirasını ve kullanıcılarını sistemdeki çığdan korumakta yardımcı olmadı.
Bu durum, kalkınma özgürlüğünü fiilen tehdit eden fiili olan ve Debian, yukarı havası ve aşağı havası için ciddi sonuçları olan sistem bağımlılıklarında kilitlenme beklemektedir.
CTTE, bir bağımlılığı değiştirmeyi başardı ve bize svinvinit üzerindeki ince bir sistem kurulumunda bize zaman kazandırdı, ancak bu süreç bile yorucu ve drama dolu idi. Sonuçta, bir hafta önce, Ian Jackson istifa etti. [...]
Derhal yürürlüğe girerek Teknik Komiteden istifa ediyorum.
Benimle aynı fikirde olan projenin% 30-40'ının görüşlerinin TC'de temsil edilmeye devam etmesi önemli olsa da, bu noktada bunu yapmak için kesinlikle tartışmalıyım. Projenin yönetimi hakkındaki konuşmaların ne ölçüde kişiselleştirileceğini azaltmaya çalışmak için kenara çekilmeliyim. [...]
Devuan, Debian için varsayılan init sistemi olarak kullanma kararı konusundaki tartışmalardan doğdu. Sistemdeki resmi Debian pozisyonu, başkalarının borçlarını aldıklarını iddia ediyor . İlgilenen okuyucular, bu tartışmalı konu başlıklarını sistem tartışması bölümünde tartışmaya devam edebilir . Ancak, kafanızı serin ve sesinizi sivil tutmanız için teşvik ediyoruz. Devuan'da geriye dönüp bakmak yerine yanlış programlama yapmakla ilgileniyoruz. [...]
Sistem tartışmasına adanmış bazı web siteleri ve makaleler oluşturuldu:
Orada bir sürü Hacker News ilginç tartışma:
Diğer dağıtımlardaki benzer eğilimler de gözlemlenebilir:
upstart , DOTADIW'ın Unix felsefesini izliyor - "Bir Şey Yap ve İyi Yap." Geleneksel init daemonunun yerine geçmiştir. Hizmetleri başlatmak ve durdurmaktan başka bir şey yapmaz. Diğer görevler diğer uzmanlaşmış alt sistemlere devredilmiştir.
systemd bundan daha fazlasını yapar. Hizmetlerin başlatılması ve durdurulmasının yanı sıra, parolaları, girişleri, terminalleri, güç yönetimini, fabrika sıfırlamalarını, günlük işlemlerini, dosya sistemi bağlama noktalarını, ağları ve daha fazlasını da yönetir - bazı özellikler için NEWS dosyasına bakın .
Göre Elde ve What Lies Ahead Has Been Ne systemd için bir Perspektif GNOME.asia de 2014 yılında Lennart Pöttering tarafından sunum, burada systemd ana hedefleri, zaten kapalı ve halen devam edildi olanlar edilen alanlar;
Hedeflerimiz
- Bir bit torbasından Linux'u rekabetçi bir Genel Amaçlı İşletim Sistemine dönüştürmek.
- İnternetin Yeni Nesil İşletim Sistemini Kurmak Dağıtımlar arasındaki anlamsız farkları birleştirmek
Yeniliğin temel işletim sistemine geri getirilmesi
Masaüstü, Sunucu, Konteyner, Gömülü, Mobil, Bulut, Küme,. . . Bu alanlar birlikte düşündüğünüzden daha yakın
- Yönetici karmaşıklığını azaltmak, gözetim olmadan güvenilirlik
- Her şey içilemez
- Otomatik keşif, tak ve çalıştır özelliği anahtardır
- Kırıldıkları şeyleri düzeltiriz, asla bantlanmadık
Zaten neyi koruduğumuz:
init sistemi, günlük kaydı, giriş yönetimi, cihaz yönetimi, geçici ve geçici dosya yönetimi, ikili format kaydı, arka ışık kaydet / geri yükle, rfkill kaydet / geri yükle, bootchart, yeniden okuma, şifreli depolama ayarları, EFI / GPT bölüm bulma, sanal makine / konteyner kayıt, minimum kap yönetimi, ana bilgisayar adı yönetimi, yerel yönetim, zaman yönetimi, rastgele tohum yönetimi, sysctl değişken yönetimi, konsol yönetimi. . .
Ne üzerinde çalışıyoruz:
- ağ yönetimi
- systemd-networkd
- Yerel DNS önbelleği, mDNS yanıtlayıcısı, LLMNR yanıtlayıcısı, DNSSEC doğrulaması
- Çekirdekte IPC
- kdbus, sd-bus
- NTP ile zaman senkronizasyonu
- systemd-timesyncd
- Konteynerlerle daha fazla entegrasyon
- Hizmetlerin Sanallaştırılması
- Apps Sandboxing
- Os görüntü formatı
- Konteyner görüntü formatı
- Uygulama görüntü formatı
- Otomatik keşif özellikli GPT
- Vatansız sistemler, anlık sistemler, fabrika ayarlarına sıfırlama
- / usr işletim sistemidir
- / etc (isteğe bağlı) yapılandırma
- / var (isteğe bağlı) durum
- Atomik düğüm başlangıcı ve güncellemeleri
- Bulut ile entegrasyon
- Düğümler arasında servis yönetimi
- Doğrulanabilir işletim sistemi görüntüleri
- Firmware'e kadar
- Önyükleme Yükleniyor
Fpmurphy1'in yorumlarında belirttiği gibi , " Sistemdinin çalışma alanını yıllar içinde, sistemin başlamasından çok daha fazla genişlettiğine işaret edilmelidir."
İlgili bilgilerin çoğunu buraya eklemeye çalıştım. Burada, Upstart ile systemd'in ortak özelliklerini karşılaştırarak, soruda init sistemler olarak kullanıyorum ve sadece init sistemlerin kapsamının ötesine geçen systemd özelliklerinden bahsettim, çünkü bunlar Startup ile karşılaştırılamaz, ancak bunların varlığı önemlidir. Bu iki proje arasındaki farkı anlamak. Daha fazla bilgi için ilgili dokümantasyon kontrol edilmelidir.
Daha fazla bilgi bulunabilir:
LinOxide Takım bir yarattı SysV Init Linux Pardus vs systemd .
service <foo> start/stop/restart/status
hala iyi çalışıyor. Çoğu unix yazılımı gibi, systemd de bilinen varsayılanlara komut uyumluluğu sağlar.
Hem start-up hem de systemd, geleneksel SysV init sisteminin sınırlamaları ile bazı problemleri çözme girişimleridir. Örneğin, bazı servislerin diğer servislerden sonra başlaması gerekir (örneğin, ağ çalışana kadar NFS dosya sistemlerini bağlayamazsınız), ancak SysV'de işlemek için tek yol, bağlantıları rc # .d dizininde ayarlamaktır. öyle ki biri diğerinden önce. Buna ek olarak, bağımlılıklar eklendiğinde veya değiştirildiğinde, her şeyi daha sonra yeniden numaralandırmanız gerekebilir. Upstart ve Systemd, gereksinimleri tanımlamak için daha akıllı ayarlara sahiptir. Ayrıca, her şeyin bir tür kabuk betiği olduğu ve herkesin en iyi init betiğini yazmamasıyla ilgili bir sorun var. Bu aynı zamanda başlangıç hızını da etkiler.
Gördüğüm sistemin avantajlarından bazıları:
Bildiğim bir dezavantaj, sistem soketinin / FH ön tahsisatının avantajlarından yararlanmak için, FH'nin sistemd tarafından kendilerine geçmesi için birçok daemonun yamalanması gerekmesidir.
Testere systemd
belirtilen Arch Genel ML bugün. Bu yüzden okumaya devam et. H Online , Linux Teknolojisi için harika bir kaynak ve SysV Init ve Upstart alternatifi olarak Systemd'i araştırmaya başlamak için yerimi bulduğum yer . Bununla birlikte, H Online makalesi (bu durumda) çok kullanışlı bir okuma değildir, arkasındaki asıl kullanım faydalı okumalara bağlantılar vermesidir.
Asıl cevap sisteme duyuruda . SysV initd'de neyin yanlış olduğu ve hangi yeni sistemlerin yapılması gerektiğine dair çok önemli noktalar
Daha az başlamak için.
Ve daha paralel olarak başlamak için.
Bunu yapmanın asıl planı, hizmetleri yalnızca gerektiği gibi başlatmak ve bu hizmet için bir soket başlatmak gibi görünmesidir; böylece, ihtiyacı olan hizmet, arka plan programı tam olarak çevrimiçi olmadan önce oluşturulan sokete bağlanabilir. Görünüşe göre bir soket az miktarda tamponlanmış veri tutacaktır, bu da gecikme sırasında hiçbir veri kaybı olmayacak, arka plan programı çevrimiçi olur olmaz ele alınacaktır.
Planın diğer kısmı, sizinle ilgili bekleyen değiliz bu şekilde dosya sisteminin seri, ancak bunun yerine de talep üzerine bu monte değil gibi görünüyor /home/
, vb (ile karıştırılmamalıdır /etc
monte etmek) ve / veya fsck
size olabilecekken start damononları /
ve /var/
etc, zaten monte edildi. Bu amaçla autofs kullanacağını söyledi.
Ayrıca .desktop
betiklerin yerine stil init tanımlayıcıları oluşturma hedefine sahiptir . Bu yavaş ton önleyecektir sh
süreçler ve benzeri şeylerden süreçlerin daha çatalları sed
ve grep
sık sık kabuk komut kullanılır.
Ayrıca, istenene kadar bazı hizmetleri başlatmamayı planlıyorlar ve belki de artık gerekmediğinde belki de onları kapatıyorlar, bluetooth modülü ve arka plan programı yalnızca örneğin bir bluetooth cihazı kullanırken gereklidir. Verilen başka bir örnek ssh daemon. Bu inetd yetenekli bir şeydir. Şahsen, bundan hoşlandığımdan emin değilim, çünkü ihtiyaç duyduğumda gecikme süresi anlamına gelebilir ve ssh söz konusu olduğunda, eğer sisteme girdiğimde tüm sistem tehlikeye girerse, olası bir güvenlik açığı anlamına gelir. Ancak, bu sistemi ihlal etmek için kullanmanın olanaksız olduğu ve eğer istersem bu özelliği hizmet başına ve başka şekillerde devre dışı bırakabileceğim konusunda bilgilendirildim.
Diğer bir özellik, zamana bağlı olarak, düzenli aralıklarla ya da belirli bir zamanda başlayabilmektir. Bu şimdi ne yapmak crond
ve atd
yapmak benzer . Bana kullanıcı "cron" desteklemeyeceği söylenmişti. Şahsen bu en anlamsız şey gibi geliyor. Bunun çok kullanıcılı ortamlarda çalışmayan insanlar tarafından yazılmış / düşünülmüş olduğunu düşünüyorum, sistemde root olarak çalışmama dışında tek kullanıcı sizseniz, kullanıcı cronunun çok fazla amacı yoktur. Günlük çok kullanıcılı sistemlerde çalışıyorum ve kural her zaman kullanıcı komut dosyalarını kullanıcı olarak çalıştırıyor. Ama belki onların yaptıkları tahminlere sahip değilim, ve hiçbir şekilde koşamayamamı sağlayacak şekilde yapamayacak , crond
ya da atd
sanırım geliştiricilerin dışında kimseye zarar vermeyecek.
Sistemin en büyük dezavantajı, tüm avantajlardan tam anlamıyla yararlanabilmek için bazı ödemelerin değiştirilmesi gerekmesidir. Şimdi çalışacaklar, ancak özellikle soket modeli için yazılmışlarsa daha iyi çalışırlar.
Sistem halklarının başlangıçta yaşadıkları problemin olay sistemi olduğu ve bunun anlamsız ya da gereksiz olduğuna inandıkları anlaşılıyor. Belki onların sözleri en iyisidir.
Ya da daha basit hale getirmek için: kullanıcının D-Bus'ı yeni başlatmış olması, hiçbir şekilde NetworkManager'ın da başlatılması gerektiğinin bir göstergesi değildir (ancak Upstart'ın yapacağı şey budur). Tam tersi doğrudur: kullanıcı NetworkManager'ı sorduğunda, bu kesinlikle D-Bus'ın da başlatılması gerektiğinin bir göstergesidir (kesinlikle çoğu kullanıcının beklediği şey nedir?).
İyi bir init sistemi sadece ihtiyaç duyulan ve talep üzerine başlamalıdır. Tembel ya da paralelleştirilmiş ve önceden. Bununla birlikte, gerekenden daha fazla başlamamalıdır, özellikle bu servisi kullanabilecek her şey kurulmamalı.
Daha önce de söylediğim gibi, bu sistemd'in ilanında çok daha kapsamlı bir şekilde tartışılmaktadır .
Pek çoğunuzun unuttuğu şey, gruplardaki süreçlerin organizasyonu .
Yani eğer sistemd bir şeyi başlattıysa, bu şeyi kendi grubuna koyacaktır ve sürecin bu gruptan kaçması için (imtiyazsız) bir araç yoktur. İşte bunun sonuçları:
İlk taslak taslaklardan başlayarak (ve başlangıç da dahil olmak üzere mevcut init sistemlerinin eleştirisi ve sistemin nasıl düzeltmeyi önerdiği) sisteme çok detaylı bir bakış için ana sayfasına gidin . Zamanla, LWN'de yayınlanan başlangıçta birçok makale olmuştur . Sadece sistemd (veya pulseaudio) sözlerinin bitmeyen flamewarları tetiklediğini unutmayın.
IMVHO (ve bir Fedora kullanıcısı olarak) Bundan çok memnunum. Bu satırdaki bir şey, mevcut Linux sistemlerinin karmaşıklığını ele almak için çoktan gecikmişti. Fedora bir süre daha yeni bir başlangıç yaptı, ancak çoğunlukla değişmeyen init senaryoları yayınlayan sysvinit için süslü bir oyuncu olma aşamasından hiç çıkmadı. Önyükleme yapılandırmasını basitleştirme vaadi yine pahasına geliyormanuel olarak bağımlılıkları ayarlama ve bu işe yaramadı. systemd, bağımlılıkları kendi kendine çözer (ya da bağımlılıkları gözetmeden bir şeyler başlatmaya izin verir, kendilerini sıralarlar). Bir diğer büyük avantaj (bazıları ciddi bir dezavantaj olduğunu söylüyor) Linux'a özgü özelliklerin tepeden yararlanmasıdır (özellikle de gruplar cemaatin ve tüm soydaşlarının izole edilmesine izin verir, bu nedenle kaynakları izlemek ya da sınırlandırmak kolaydır. bir grup; diğerleri var).
Günlük Kaydı - Systemd tam anlamıyla WinSXS klasörü gibi, günlükleri kaydetme konusunda, sürücünüzde yemeye devam edeceği dosya boyutunu el ile silmediğiniz veya küçültmediğiniz sürece kopyaların kopyalarını oluşturur. Önyükleyici çerezleri diyorum.