Bir Linux sunucusunu indirmek için bu komutlar arasındaki fark nedir?


65

Okuma "Dur ve Kapatma komutları arasındaki fark nedir?" , Genellikle kapatma komutunun ne yaptığı, -h / -r seçenekleri olan veya olmayan bir fikrim var.

"Dur" komutu, sistemin çalışmasını 0 seviyesine kadar kapatır.

"Shutdown" komutu, -h veya -r komutu olmadan seviye 1'i çalıştırmak için sistemin gücünü kapatır.

Peki ya "poweroff" komutu çalışma seviyesi 0 veya 1'e giriyor? Bu üç komut arasındaki tek fark bu mu?



Solaris ve FreeBSD gibi önemli olan şeylerden bazıları budur. (Orada genellikle (hemen hemen) hemen önce sunucuyu durdurur / kapatır, ilk önce işleri kapatmak için çalışma seviyelerini değiştirmeden)
Gert van den Berg

Yanıtlar:


120

Ve şimdi, sistem cevap veriyor.

Sorunuzdaki etikete göre, Red Hat Enterprise Linux kullanıyorsunuz. Sürüm 7'den beri, systemd kullandı. Diğer cevapların hiçbiri sistem dünyası için doğru değildir; hatta sorunuzdaki bazı varsayımlar bile yoktur.

  • Çalışma seviyelerini unut ; Onlar var, ancak yalnızca uyumluluk azaldıkça. Sistem dokümantasyonu, kavramın "eski" olduğunu belirtir. Bu şeyleri bir sistem işletim sisteminde öğrenmeye başlıyorsanız, oradan başlamayın.
  • Alıntılanan marcelm manuel sayfasını unut; Bu kesinlikle doğru araçlardan değil ve sistem araçlarına uygun olmayan başka bir araç komutunun açıklamasıdır. Bu bir tane var haltvan Smoorenburg "Sistem 5" komutunu initkamu hizmetleri.
  • /sbin/haltSembolik bir bağlantı olan ifadeleri yoksay /sbin/reboot; bu systemd için doğru değil. Ayrı bir rebootprogram yok .
  • Açıklamaların ardı olduğunu haltveya rebootbir çağırmak shutdownkomut satırı argümanları ile programı; onlar da systemd için doğru değildir. Ayrı bir shutdownprogram yok .

Her sistem yönetimi araç takımı bu araçların kendi sürümüne sahiptir. systemd, starttart , nosh , van Smoorenburg initve BSD'nin inithepsinin kendine ait halt, poweroffvb. Her birinde onların mekaniği biraz farklı. Yani onların el ile sayfaları.

Systemd araç seti içinde halt, poweroff,reboot , telinit, ve shutdownvardır her sembolik bağlantılar için /bin/systemctl. Bunlar hepsi sadece systemd birincil komut satırı arayüzü çağırma için kestirme olan geriye dönük uyumluluk levhaları,: systemctl. (Ve aslında) aynı üzere hepsi harita tek bir program. (Kurallara göre, kabuk kendisine hangi adın çağrıldığını söyler.)

hedefler, çalışma seviyeleri değil

Bu komutların çoğu systemctl, belirli bir hedefi izole etmek için kullanarak , sisteme söylemekte kullanılan kısa yollardır . Yalıtım, kılavuz sayfasında (qv) açıklanmıştır, ancak bu cevabın amaçları doğrultusunda, bir hedef başlatmak ve diğerlerini durdurmak gibi düşünilebilir. Sistemd'de kullanılan standart hedefler (8) kılavuz sayfasında listelenmiştir .systemctlsystemd.special

bootupSystemd araç setindeki (7) kılavuz sayfasındaki şemalar, özellikle sonuncusu, burada ilgili olan üç "nihai" hedefin olduğunu göstermektedir:

  • halt.target- Sistem bu hedefi tamamen izole etme durumuna ulaştığında, reboot(RB_HALT_SYSTEM)sistem çağrısı olarak adlandırılır. Çekirdek, bir ROM izleme programına girme girişiminde bulunmuş veya CPU'yu durdurmuştur (bunun için uygun olan mekanizmaları kullanarak).
  • reboot.target- Sistem bu hedefi tamamen izole etme durumuna ulaştığında, reboot(RB_AUTOBOOT)sistem çağrısı (veya sihirli komut satırıyla eşdeğer) olarak adlandırılır. Çekirdek yeniden başlatmayı tetiklemeye çalışmış olacak.
  • poweroff.target- Sistem bu hedefi tamamen izole etme durumuna ulaştığında, reboot(RB_POWER_OFF)sistem çağrısı olarak adlandırılır. Eğer mümkünse, çekirdek sistemden gücü kesmeye çalışmış olacak.

Bunlar , son sistemin belirttiği gibi düşünmeniz gereken şeyler, çalışma seviyelerinin değil. Sistemin hedef sisteminin kendisinin kendisinin diğer sistemlerde açık ve net olmayan şeyleri kodladığı şemasına dikkat edin: Örneğin, bu son hedeflerin her birinin hedefi kapsadığı shutdown.target, böylece kapatılmadan önce durdurulması gereken hizmetleri tanımladığı gibi onları sahip çakışabilirshutdown.target hedefe.

systemctlsystemd-logindarayan kullanıcı süper kullanıcı olmadığında istek göndermeye çalışır . Ayrıca gecikmeli kapatmalar da üzerinden geçer systemd-shutdownd. Ve bazı kısa yol wallbildirimleri tetikler . Şu anda süper kullanıcı olduğunuzu ve programlanmış bir işlem istemediğinizi varsayarak, bu cevabı birkaç kez daha uzun yapan bu karmaşıklıklar:

  • systemctl isolate halt.target kısaltmaları var:
    • shutdown -H now
    • systemctl halt
    • düz olmayan süslemeli halt
  • systemctl isolate reboot.target kısaltmaları var:
    • shutdown -r now
    • telinit 6
    • systemctl reboot
    • düz olmayan süslemeli reboot
  • systemctl isolate poweroff.target kısaltmaları var:
    • shutdown -P now
    • telinit 0
    • shutdown now
    • systemctl poweroff
    • düz olmayan süslemeli poweroff
  • systemctl isolate rescue.target kısaltmaları var:
    • telinit 1
    • systemctl rescue
  • systemctl isolate multi-user.target kısaltmaları var:
    • telinit 2
    • telinit 3
    • telinit 4
  • systemctl isolate graphical.target Kısaca:
    • telinit 5

Çeşitli farklı komut satırı sözdizimlerini ayrıştırdıktan sonra, bunlar sonunda systemctlprogramın içindeki aynı kod yollarına girer .

Notlar:

  • Daha az seçenek olan geleneksel davranış tek kullanıcılı modashutdown now geçmek olmuştur . Bu systemd ile durum böyle değil. - tek kullanıcılı modun sistemd'deki kurtarma modu yeniden adlandırılıyor - komutla erişilemiyor .rescue.targetshutdown
  • telinit Gerçekten yok tamamen olanların hepsi görmezden ve manuel sayfaları tanımlamak dosya sistemindeki sembolik bağlantıları. Yukarıda belirtilen eşlemeler bir tablodaki programa bağlanmıştır .runlevelN.targetdefault.targetsystemctl
  • systemd'nin geçerli bir çalışma seviyesi hakkında hiçbir fikri yok . Bu komutların çalışması “eğer N çalışma seviyesindeyseniz” şartlı değildir .
  • --forceSeçeneği halt, rebootve poweroffkomutlar söyleyerek aynıdır --force --forceiçin systemctl halt, systemctl rebootve systemctl poweroffkomutlar. Bu doğrudan systemctlaramayı dener reboot(). Normalde sadece hedefleri izole etmeye çalışır.
  • telinitaynı değil init. Bunlar sistem dünyasında farklı programlardır, ikincisi systemdprogram için değil program için başka bir addır systemctl. systemdProgram zorunlu olarak hiç bir van Smoorenburg uyumluluğu derlenmiş ve bazı systemd işletim sistemlerinde yanlış çalışıyor bir girişimi çağrılmakta şikayet değildir .init N

daha fazla okuma


1
Bu, çoğu modern Linux sistemleri için çok geneldir, bu nedenle örneğin cevaplar wiert.me/2012/12/30/… Tüm bu yıllar boyunca merak ettikten sonra, neyin olup bittiğini anladım.
Jeroen Wiert Pluimers 10:16

systemctl rebooteşdeğer olmalıdır systemctl start reboot.target --job-mode=replace-irreversible. Başka herhangi bir iş modunu kullanmak daha az sağlamdır. unix.stackexchange.com/questions/381739/…
sourcejedi

1
Bütün cevabını okudum ve elimden geleni yaptım. Bir soru var, buraya geldiğimde de, systemctl rebootyeniden başlatmanın "güvenli" yolu var; örneğin init 6, başka türlü güvenli bir şekilde yeniden başlayacağımız yol hangisi?
Brian Thomas

25
  • haltdonanıma tüm CPU işlevlerini durdurması talimatını verir , ancak açık konumda bırakıyor. Bu genellikle birisinin daha sonra güç düğmesine basarak makineyi manuel olarak yeniden başlatması veya kapatması gerektiği anlamına gelir. Bunu başarmanın spesifik yolu mimariye özgüdür, ancak örneğin x86 komut seti HLT, bir sonraki dış kesme işlemi ateşlenene kadar merkezi işlem birimini (CPU) durduran talimatları sağlar .

  • poweroffgibi halt, CPU'yu durdurur ancak aynı zamanda sisteme tam ve acil bir kapanma ile başlamasını söyleyen bir ACPI donanım sinyali gönderir . Bu, tipik bir masaüstü bilgisayardaki güç düğmesine basmakla hemen hemen eşdeğerdir.

Her ikisi de haltve poweroffgenellikle sembolik bağlantılar rebootgenellikle çağırır yürütülebilir, shutdownuygun argüman (aleti -h, -Pya da reğer bağlı olarak) halt, poweroffya da rebootaracı çağırmak için kullanılmıştır. Ancak, --forceseçenek iletildiğinde rebootveya 0 veya 6 çalışma seviyesindeyken reboot, reboot()sistem çağrısını uygun bir komut kodu ile başlatacaktır .


Thomas, açıkladığın için çok teşekkür ederim. #İnit 0 yapmanın ne olduğunu bilmekle ilgileniyorum, çok fazla fark yok mu?
Win.T

@ Win.T Örn. Kullanarak /sbin/init 0veya 0 ile çalışma seviyesine geçmek /sbin/telinit 0, sistemin durdurulması ile aynı olmalıdır, ancak atılan belirli adımlar, System-V init , starttart veya systemd gibi söz konusu init sistemine bağlı olacaktır . RHEL kullanıyorsanız, systemd kullanıyor olacaksınız.
Thomas Nyman

4
Kendime not: Birisi bir gizli bir Win32 API çağrısından şikayet edince, yeniden başlatıldığını gösterin (2).
kullanıcı253751

@ immibis Ama yeniden başlatma bilerek gizlidir. Sihirli bayrakları gerektirir, böylece kazayla yapılması çok zordur.
Kevin Cox

4
@KevinCox Sihirli bayraklar isteme argümanı bu. Bu, magic2 için 4 farklı değer kabul etmenin, ne de bir PID ad alanının içinde farklı davranmanın veya zorlukla ilgili birkaç işlemi (Ctrl-Alt-Delete davranışını yeniden başlatmanın ayarlanması gibi) tek bir fonksiyonda toplamanın argümanı değildir.
kullanici253751

1

halt, poweroffVe shutdown -htamamen eşdeğerdir. Aslında, durma ve kapanma çağrıdan başka bir şey yapmaz shutdown -h. Durma / kapanma el kitabından:

Sistem çalışma seviyesi 0 veya 6'da değilken durma veya yeniden başlatma çağrılırsa, başka bir deyişle normal olarak çalışıyorsa kapatma yerine (-h veya -r bayrağıyla) kapatma işlemi başlatılır. Daha fazla bilgi için kapatma (8) kılavuz sayfasına bakınız.

Kapatma daha sonra, çalışma seviyesi 0'a geçerek sistemi kapatmaya devam eder.

Durma ve kapanma (ve yeniden başlatma) ikili bir rol üstlenir; Kapatma işlemi sırasında (yani çalışma seviyesi 0 veya 6'da) çalıştırıldığında, başka bir cevapta açıklandığı gibi makineyi fiziksel olarak durdurmak, kapatmak veya yeniden başlatmak için gereken düşük seviyeli işlemleri gerçekleştirirler.


2
Hangi RHEL sürümünü kullanıyorsunuz? Normalde durma ve kapanma arasında bir fark vardır (bir süredir birçok dağıtımda olduğu gibi olmasa da bu bir hataydı).
Bruno,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.