이 질문은 여러 거짓말을 기반으로 합니다.

이 질문은 여러 거짓말을 기반으로 합니다.

중요한: 이렇게 하면 이전 동작을 다시 중지할 수 있습니다.

apt install sysvinit-core  

추가하다:오래된빨간 모자기반 버전은 중지하여 전원을 끌 수도 있습니다.

나는 왜 데비안 9에서 컴퓨터를 종료하기 위해 더 이상 중지를 사용해서는 안 되는지 이해하려고 노력하고 있습니다. 이 동작은 systemd에서 제거되었습니다. 조금 무서웠지만 타당한 논리적인 이유가 있을 거라고 생각했습니다.

다른 Unix 또는 Unix 계열 시스템이 동일한 방식으로 작동합니까, 아니면 Linux가 달라지고 있습니까?

이제 시스템 종료 후 시스템을 종료하려면 중지 대신 poweroff를 사용해야 합니다.

이 명령이 다른 Unix 계열 시스템에서 어떻게 해석되는지 아는 사람이 있습니까?

예를 들어 데비안 7은 일시 중지하여 전원을 끌 수 있기 때문에 이는 중복되지 않습니다.

답변1

더반

Debian(esque) 시스템에서 SysVinit를 사용할 때, /etc/defaults/halt런레벨 0으로의 전환이 끝나면 시스템을 일시 중지해야 하는지 아니면 전원을 꺼야 하는지 정의하는 변수가 포함되어 있습니다. 기본 설정은 입니다 HALT=poweroff.

haltSysVinit 2.74 이전에는 직접 실행하면 안 됩니다. 해당 버전부터 SysVinit 명령은 현재 실행 수준이 0 또는 6 이 아닌 이상 halt호출됩니다 . 이는 매뉴얼 페이지에 문서화되어 있습니다. 런레벨 0으로의 전환이 끝나면 기본적으로 런레벨 스크립트가 실행됩니다.shutdown -hhalt(8)$HALTpoweroff

RHEL/센트OS

RHEL/CentOS 5는 SysVinit를 사용하는 마지막 버전입니다. 버전 6에서는 이를 사용하고 upstart, 버전 7에서는 이를 사용합니다 systemd. RHEL 5.11에서 실행 수준 0으로 전환할 때 실행할 마지막 스크립트는 이며 /etc/init.d/halt마지막 몇 줄은 다음과 같습니다.

[ "$INIT_HALT" != "HALT" ] && HALTARGS="$HALTARGS -p"

exec $command $HALTARGS

런레벨 6으로의 전환(다시 시작)이 끝날 때에도 동일한 스크립트가 실행되므로 실제 명령 실행은 변수에 의해 정의되며 이는 또는 가 $command됩니다 . 변수 값에 따라 스크립트는 옵션 추가 여부를 결정합니다. 이 변수는 에 의해 설정됩니다 . RHEL 5.11 매뉴얼 페이지에는 다음과 같이 나와 있습니다./sbin/halt/sbin/reboot$INIT_HALT-p/sbin/shutdownshutdown(8)

정지 또는 정전

-H 옵션은 단순히 초기화 환경 변수 INIT_HALT를 HALT로 설정하고, -P 옵션은 단순히 변수를 POWEROFF로 설정합니다. 종료 시퀀스의 마지막 작업으로 quit(8)을 호출하는 종료 스크립트는 이러한 환경 변수를 확인하고 해당 옵션이 실제로 효과를 나타내도록 올바른 옵션과 함께 quit(8)을 호출해야 합니다. 데비안 3.1(sarge)이 이를 지원합니다.

(예, RHEL 5.11 매뉴얼 페이지에는 Debian 3.1이 언급되어 있습니다! RedHat의 누군가가 다양한 소스에서 RHEL로 패치를 포팅할 때 참조를 놓친 것 같습니다...)

/etc/init.d/haltRedHat은 전원 끄기( /sbin/halt -p시스템 종료 시 사용됨)가 기본 중지 동작인 스크립트에서 위 테스트를 코딩하기로 결정한 것 같습니다 . 전원을 끄지 않고 중지를 달성하는 유일한 방법은 -H대문자 옵션을 사용하여 shutdown명시적으로 요청하는 것 입니다. 명령, 예를 들어shutdown -hH now

halt그러나 기본 전원 끄기는 Linux 배포판에서 사용자 정의한 실행 수준 스크립트에 의해 트리거되므로 SysVinit 명령의 실제 기능이 아닙니다 .

역사 기록

SysVinit를 사용하는 이전 시스템(Linux 및 비 Linux)에는 직접 사용되지 않고 단순히 적절한 종료/다시 시작 스크립트의 일부로 사용되는 여러 명령이 있었습니다. SysVinit 2.74 이전에는 /sbin/halt옵션이 없는 명령은 halt -f현대 SysVinit과 동일한 작업을 수행했습니다. 즉, 서비스를 중지하거나 파일 시스템을 마운트 해제하지 않고 커널을 잔인하고 즉시 종료합니다.

같은 이유로 Linux killall명령에 익숙해지는 것은 다른 Unix에서도 위험할 수 있습니다. 매뉴얼 페이지에는 다음과 같은 불길한 경고도 있습니다.

Linux가 아닌 시스템에 killall 이름을 입력하면 특히 권한이 있는 사용자가 실행하는 경우 예상한 효과가 없을 수 있습니다.

이는 Classic SystemV가 killall종료 스크립트의 일부로만 사용되도록 설계된 명령 중 하나이기 때문입니다. SysVinit가 포함된 Linux 배포판에서는 이 명령의 클래식 버전이 killall5kill일 수 있습니다.모두커널 스레드 이외의 프로세스 및 자체 세션의 프로세스: 모든 서비스를 종료한 후 로컬 파일 시스템을 마운트 해제하기 전에 종료 스크립트에서 마운트 해제를 지연하거나 방지할 수 있는 다른 프로세스를 종료하는 데 사용됩니다.

killall <something>(이것을 어떻게 알 수 있습니까? 글쎄요, 저는 한때 Solaris 2.6 시스템에서 루트로 실행하는 실수를 저질렀습니다. 이는 매우 효과적인 학습 경험이었습니다.)

답변2

이 질문은 여러 거짓말을 기반으로 합니다.

halt사람들은 컴퓨터를 종료하는 데 이를 사용하지 않으며 이는 systemd에서도 변경되지 않았습니다.

halt일명 haltsys종료하고 중지합니다. poweroff종료 및 전원 끄기에 사용되는 최신 명령입니다. (https://unix.stackexchange.com/a/196471/5132미묘한 부분이 설명되어 있는데, 질문은 Linux 운영 체제에만 관련되므로 여기서는 간략하게 설명하겠습니다. 이 답변은 AT&T System 5 UNIX 측면에만 중점을 둡니다. )

내가 설명했듯이https://superuser.com/a/900205/38062, 컴퓨터가 반드시 필요한 것은 아닙니다.유능한소프트웨어 제어로 전원을 끕니다. haltsys그리고 명령된 동작은 halt일반적으로 기계를 종료하고 정지하는 것이며, 다음 동작은 운영자가 물리적 재설정 버튼이나 전원 스위치를 사용하는 것입니다.

halt-p/ 옵션은 --poweroff동일하게 만들기 위해 추가되었지만 poweroff이는 이러한 명령에 대해 일반적으로 중복되고 모순되는 옵션이 증가했음을 보여줍니다. 증인haltDebian 7의 Upstart 명령에 대한 매뉴얼 페이지. 바로 halt --poweroff거기. haltDebian 7의 van Smoorenburg 명령에 대한 매뉴얼 페이지같은 것 halt -p.

하지만 이것은아니요systemd는 몇 가지를 변경했습니다. systemd는 동일한 기능을 제공합니다. 이것시스템 halt명령 반품가지다 --poweroff. 또한 --reboot(좋은 측정을 위해) --halt옵션 도 있습니다 .

나도 똑같은 일을 해야 해nosh 도구 세트의 halt/명령haltsys, 호환성을 위해.

당신은 할 수잘못 가정하다그 평범하고 오래된 halt컴퓨터가 컴퓨터를 종료합니다. 그러나 이는 Upstart에게는 분명히 잘못된 것입니다.오직van Smoorenburg 도구 세트에 적용됩니다.혹시 오류가 발생한다면.

올해 마침내 수정된 버그는 van Smoorenburg halt명령이 단순히 옵션의 존재 여부를 무시하고 -p대신 /etc/default/halt. 전원 끄기로 설정한 경우 옵션이 제공되지 halt않아도 전원이 항상 꺼집니다. -p반대로 해당 설정을 중지로 설정하면 옵션이 제공 halt되더라도 항상 중지됩니다.-p

하지만이건 실수야는 문서화되거나 예상되는 동작이 아니며, 데비안에서 사용할 수 있는 모든 명령의 동작이 아니며 , 일반적인 명령의 일반적인 동작 halt도 아닙니다 .halt

추가 읽기

관련 정보