CentOS 7 게스트를 실행 중입니다. ACPI 데몬이 시작되었습니다.
하이퍼바이저를 종료하면 게스트 OS도 종료됩니다. 게스트의 시스템 로그를 보면 전원 버튼을 눌렀다는 알림을 받았지만 모든 서비스가 중단된 것은 아닙니다. 게스트 OS가 방금 중지되었습니다.
게스트 OS의 모든 서비스가 중지될 때까지 하이퍼바이저가 기다리게 하는 방법이 있습니까?
답변1
일반적으로 이런 일이 발생하는 경우는 가상 머신 관리자가 서비스를 제대로 구성하거나 시작하지 않았기 때문입니다.
RHEL/CentOS 6에서는 시작 스크립트가 서비스가 시작되었음을 나타내는 서비스별 플래그 파일을 생성하지 않는 한 종료 프로세스는 서버가 중지되었거나 시작되지 않은 것으로 가정하므로 서비스 종료를 건너뜁니다. . 그러나 이렇게 하면 원래 부팅 시 시작된 서비스를 관리자가 원하는 방식으로 중지하고 다시 시작할 수 있습니다.
systemctl
RHEL/CentOS 7에서 명령이나 호환성 래퍼를 사용하여 서비스를 시작하면 service
서비스 프로세스가 자체 프로세스에 배치됩니다.대조군추적하여 systemd
. /etc/init.d/name-of-service start
명령줄에서 실행 하면 이런 일이 발생하지 않습니다. 서비스가 시작 시 처음 시작되더라도 수동으로 중지했다가 다시 시작하면 서비스별 제어 그룹에 더 이상 활성 프로세스가 없으면 사라집니다.
시스템이 종료되면 systemd
모든 서비스별 제어 그룹을 살펴보고 해당 제어 그룹 ExecStop
에 대해 작업을 실행하며 해당 제어 그룹의 모든 프로세스가 종료되거나 시간 초과에 도달할 때까지 기다립니다. "기본" 제어 그룹에 남아 있는 모든 프로세스는 특정 서비스와 연결되지 않고 종료만 가능하며 로 중지할 수 없는 것으로 간주됩니다 /etc/init.d/name-of-service start
.
따라서 새로운 방식을 사용하는 모든 시스템에서는 systemd
올바른 명령을 사용하여 서비스를 시작하는 것이 중요합니다(= systemctl start <name>
또는 호환성 래퍼 사용).service <name> start
답변2
첫째, 서비스가 중지될 때까지 충분히 기다린 후에도 게스트가 자동으로 종료되지 않았습니까?
qemu 가상 머신을 관리하기 위해 libvirt를 사용하고 있다고 가정합니다. 게스트를 종료하기 위해 로컬 systemd가 libvirtd에 제공하는 시간을 사용자 정의하려면 libvirtd.service에 해당하는 systemd 플러그인 단위에서 TimeoutStopSec를 정의할 수 있다고 생각합니다. 바라보다여기이에 대해 자세히 알아보세요.