Linux 서버를 중단시키는 명령의 차이점은 무엇입니까?


65

읽기 "정지 및 종료 명령의 차이점은 무엇입니까?" , 나는 일반적으로 -h / -r 옵션의 유무에 관계없이 shutdown 명령이 무엇을하는지 잘 알고 있습니다.

"halt"명령은 시스템의 전원을 꺼서 시스템의 실행 수준 0으로 설정합니다.

"shutdown"명령은 -h 또는 -r 명령없이 시스템을 실행 수준 1로 종료합니다.

"poweroff"명령은 실행 수준 0 또는 1로 설정되는 것은 어떻습니까? 이것이이 세 명령의 유일한 주요 차이점입니까?



이것은 Solaris와 FreeBSD와 같이 크게 다른 것들입니다. (일반적으로 (거의) 런레벨을 먼저 변경하지 않고 서버를 즉시 중지 / 종료합니다.)
Gert van den Berg

답변:


120

그리고 이제 체계적인 답변입니다.

귀하의 질문에 대한 태그마다 Red Hat Enterprise Linux를 사용하고 있습니다. 버전 7부터 systemd를 사용했습니다. 다른 답변은 체계화 된 세계에 맞지 않습니다. 또한 귀하의 질문에 대한 가정 중 일부도 아닙니다.

  • 런레벨을 잊어 버리십시오 . 그것들은 존재하지만 호환성 shim으로 만 존재합니다. 체계화 된 문서에는 개념이 "폐기 됨"이라고 명시되어 있습니다. 시스템 운영 체제에서이 내용을 배우기 시작하면 거기서 시작하지 마십시오.
  • marcelm이 인용 한 매뉴얼 페이지는 잊어 버리십시오. 그것은 올바른 툴셋에서 온 것이 아니며 systemd의 경우 잘못된 다른 툴셋 명령에 대한 설명입니다. haltvan Smoorenburg "System 5" init유틸리티 의 명령입니다 .
  • /sbin/halt대한 심볼릭 링크 인 명령문은 무시하십시오 /sbin/reboot. systemd에서는 그렇지 않습니다. 별도의 reboot프로그램 이 전혀 없습니다 .
  • 명령 행 인수 로 프로그램을 호출하는 명령문을 무시 halt하거나 무시하십시오 . 그들은 또한 체계적으로 사실이 아닙니다. 별도의 프로그램 이 전혀 없습니다 .rebootshutdownshutdown

모든 시스템 관리 도구 세트에는 이러한 유틸리티 버전이 있습니다. systemd, upstart, nosh , van Smoorenburg init및 BSD에는 init모두 고유 한 halt, poweroff등이 있습니다. 각각의 역학은 약간 다릅니다. 매뉴얼 페이지도 마찬가지입니다.

systemd 도구 모음에서 halt, poweroff,reboot , telinit,하고 shutdown있는 모든 심볼릭 링크는 /bin/systemctl. 그것들은 모두 이전 버전과의 호환성 shim이며, systemd의 기본 명령 행 인터페이스를 호출하기위한 축약 형입니다 systemctl. 그들은 모두 동일한 단일 프로그램 에 매핑됩니다 . (일반적으로 쉘은 호출 한 이름을 알려줍니다.)

런레벨이 아닌 대상

이러한 명령의 대부분은을 사용하여 특정 대상systemctl분리 하기 위해 systemd에 알리기위한 축약 형입니다 . 격리는 매뉴얼 페이지 (qv)에 설명되어 있지만이 답변의 목적 상 대상을 시작하고 다른 것을 중지하는 것으로 생각할 수 있습니다. systemd에 사용 된 표준 대상은 (8) 매뉴얼 페이지 에 나열되어 있습니다.systemctlsystemd.special

시스템 bootup툴셋 의 (7) 매뉴얼 페이지, 특히 마지막 툴 페이지 의 다이어그램 은 여기에 관련된 "최종"대상이 세 개 있음을 보여줍니다.

  • halt.target— 시스템이이 대상을 완전히 격리 한 상태에 도달하면 reboot(RB_HALT_SYSTEM)시스템 호출을 호출합니다. 커널은 ROM 모니터 프로그램에 들어 가려고 시도했거나 단순히 CPU를 정지 시켰습니다 (이에 적합한 메커니즘을 사용하여).
  • reboot.target— 시스템이이 대상을 완전히 격리 한 상태에 도달하면 reboot(RB_AUTOBOOT)시스템 호출 (또는 매직 명령 줄과 동일)을 호출합니다. 커널이 재부팅을 시도했을 것입니다.
  • poweroff.target— 시스템이이 대상을 완전히 격리 한 상태에 도달하면 reboot(RB_POWER_OFF)시스템 호출을 호출합니다. 커널은 가능하다면 시스템에서 전원을 제거하려고 시도했을 것입니다.

이것들 은 실행 레벨이 아니라 최종 시스템 상태로 생각해야 할 것들입니다. 다이어그램에서 시스템 대상 시스템 자체는 다른 시스템에서 명시 적이기보다는 암시적인 것을 인코딩합니다. 예를 들어 이러한 최종 대상 각각이 대상을 포함한다는 개념과 같이 시스템은 shutdown.target대상 시스템을 종료하기 전에 중지해야하는 서비스를 설명합니다 그들이 가진 충돌shutdown.target 대상입니다.

systemctlsystemd-logind발신 사용자가 수퍼 유저가 아닌 경우 요청을 보냅니다 . 또한 지연된 종료를에 전달합니다 systemd-shutdownd. 그리고 일부 속기는 wall알림을 트리거 합니다. 이러한 복잡성은 제쳐두고, 현재 수퍼 유저이고 예약 된 작업을 요청하지 않는 것으로 가정하면이 답변이 몇 배 더 길어집니다.

  • systemctl isolate halt.target 속기는있다 :
    • shutdown -H now
    • systemctl halt
    • 평범하지 않은 halt
  • systemctl isolate reboot.target 속기는있다 :
    • shutdown -r now
    • telinit 6
    • systemctl reboot
    • 평범하지 않은 reboot
  • systemctl isolate poweroff.target 속기는있다 :
    • shutdown -P now
    • telinit 0
    • shutdown now
    • systemctl poweroff
    • 평범하지 않은 poweroff
  • systemctl isolate rescue.target 속기는있다 :
    • telinit 1
    • systemctl rescue
  • systemctl isolate multi-user.target 속기는있다 :
    • telinit 2
    • telinit 3
    • telinit 4
  • systemctl isolate graphical.target 속기가있다 :
    • telinit 5

여러 가지 다른 명령 줄 구문을 구문 분석 한 후에는 결국 systemctl프로그램 내부의 동일한 코드 경로에있게 됩니다.

노트:

  • 옵션-이하의 전통적인 행동 shutdown now으로 전환하는 것이 었습니다 단일 사용자 모드 . systemd의 경우에는 그렇지 않습니다. rescue.target— 단일 사용자 모드가 systemd에서 복구 모드로 이름이 바 — —이 shutdown명령으로 도달 할 수 없습니다 .
  • telinit 실제로 매뉴얼 페이지에서 설명하는 파일 시스템의 모든 링크 와 기호 링크를 완전히 무시합니다 . 앞서 언급 한 매핑은 테이블에 프로그램으로 연결되어 있습니다.runlevelN.targetdefault.targetsystemctl
  • systemd는 현재 실행 레벨 에 대한 개념이 없습니다 . 이러한 명령의 작동은 "실행 레벨 N에 있는 경우"에 대한 조건이 아닙니다 .
  • --force받는 옵션 halt, rebootpoweroff명령은 말과 동일 --force --force받는 사람 systemctl halt, systemctl rebootsystemctl poweroff명령. 이것은 직접 systemctl전화 를 시도합니다 reboot(). 일반적으로 대상을 격리하려고 시도합니다.
  • telinit와 동일하지 않습니다 init. 그것들은 시스템 세계에서 다른 프로그램이며, 후자는 systemd프로그램의 이름이 아니라 프로그램의 다른 이름입니다 systemctl. 이 systemd프로그램은 van Smoorenburg와의 호환성으로 전혀 컴파일되지 않아도되며, 일부 시스템 운영 체제에서는 시도 할 경우 잘못 호출되는 것에 대해 불평합니다 .init N

추가 자료


1
이것은 대부분의 최신 Linux 시스템에서 매우 일반적이므로 예를 들어 wiert.me/2012/12/30/에 대답 합니다. 몇 년 동안 궁금해 지면서 마침내 무슨 일이 일어나고 있으며 왜 그런지 이해합니다.
Jeroen Wiert Pluimers 2016 년

systemctl reboot와 동일해야합니다 systemctl start reboot.target --job-mode=replace-irreversible. 다른 작업 모드를 사용하면 덜 강력합니다. unix.stackexchange.com/questions/381739/…
sourcejedi

1
나는 당신의 전체 응답을 읽고, 내가 할 수있는 것을 흡수했습니다. 내가 여기 왔던 것과 같은 한 가지 질문이 남아있다 systemctl reboot. "안전한"재부팅 init 6방법이다.
Brian Thomas

25
  • halt하드웨어가 모든 CPU 기능중지 하도록 지시 하지만 전원이 켜진 상태로 둡니다. 이것은 일반적으로 누군가 전원 버튼을 누른 후 수동으로 컴퓨터를 재부팅하거나 종료해야 함을 의미합니다. 이를 달성하는 구체적인 방법은 아키텍처에 따라 다르지만 예를 들어 x86 명령어 세트는 HLT다음 외부 인터럽트가 발생할 때까지 중앙 처리 장치 (CPU)를 중지시키는 명령어를 제공합니다 .

  • poweroff와 같이 haltCPU를 중지하고 ACPI 하드웨어 신호를 보내 시스템을 완전하고 즉시 종료하도록 지시합니다. 이는 일반적인 데스크탑 컴퓨터의 전원 버튼을 누르는 것과 거의 같습니다.

모두 halt와는 poweroff일반적으로 기호 링크입니다 reboot일반적으로 호출합니다 실행, shutdown적절한 인수 (와 도구 -h, -P또는 r경우에 따라) halt, poweroff또는 reboot도구를 호출하는 데 사용되었다. 그러나 --force옵션이로 전달 reboot되거나 실행 레벨 0 또는 6 인 경우 적절한 명령 코드 자체로 시스템 호출을 reboot호출합니다 reboot().


토마스, 설명해 주셔서 감사합니다. #init 0을 수행하는 것에 대해 알고 싶습니다. 많은 차이점이 없습니다.
Win.T

@ Win.T 0 사용 예를 실행 레벨로 전환 /sbin/init 0하거나 /sbin/telinit 0촬영 한 특정 단계가 같은 문제의 초기화 시스템에 달려 있지만, 시스템을 정지와 동일해야 시스템-V 초기화 , 신출내기 또는 systemd . RHEL을 실행중인 경우 systemd를 사용합니다.
Thomas Nyman

4
자체 참고 사항 : 누군가가 Win32 API 호출에 대해 불평 할 때마다 reboot (2)를 표시하십시오.
user253751

@immibis 그러나 재부팅은 의도적으로 비참합니다. 우연히하기가 매우 어려운 매직 플래그가 필요합니다.
케빈 콕스

4
@KevinCox 이것이 마술 플래그를 요구하는 주장입니다. magic2에 대해 4 개의 서로 다른 값을 수락하거나 PID 네임 스페이스 내에서 다르게 동작하거나 일부 맹목적으로 관련된 작업 (예 : reboot-on-Ctrl-Alt-Delete 동작 설정)을 하나의 함수로 묶는다는 주장이 아닙니다.
user253751

1

halt, poweroffshutdown -h완전히 동일합니다. 실제로 중단 및 전원 끄기는을 호출 할뿐입니다 shutdown -h. 중지 / 전원 끄기 맨 페이지에서 :

시스템이 실행 레벨 0 또는 6에 있지 않을 때 정지 또는 재부팅이 호출되면, 즉 정상적으로 실행중인 경우 종료가 대신 호출됩니다 (-h 또는 -r 플래그 사용). 자세한 내용은 shutdown (8) 맨 페이지를 참조하십시오.

그런 다음 종료는 실행 수준 0으로 전환하여 시스템을 종료합니다.

중지 및 전원 끄기 (및 재부팅)는 이중 역할을 수행합니다. 종료 프로세스 (예 : 실행 레벨 0 또는 6)에서 실행될 때 다른 응답에 설명 된대로 머신을 물리적으로 중지, 전원 끄기 또는 재부팅하는 데 필요한 하위 레벨 작업을 수행합니다.


2
어떤 버전의 RHEL을 사용하고 있습니까? 일반적으로 중단과 전원 끄기 사이에는 차이가 있습니다 (많은 배포판에서는 그렇지 않았지만 버그였습니다).
Bruno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.