SystemD를 사용하여 CentOS 7에서 런레벨 변경

SystemD를 사용하여 CentOS 7에서 런레벨 변경

CentOS 7에서는 httpd 서비스가 런레벨 3과 5에서만 시작되기를 원하며, 다른 런레벨(예: 2와 4)에서는 서비스가 시작되지 않아야 합니다.

CentOS 6에서는 "chkconfig" 명령을 사용하여 이를 달성할 수 있습니다. CentOS 7 환경에서 유사한 솔루션을 찾고 있습니다.

답변1

런레벨 3과 5에서 HTTPD를 시작하고 런레벨 2와 4에서 HTTPD를 중지하고 싶다고 말씀하신 것을 확인했습니다. 이는 Init 및 SystemD에 대한 자세한 개요를 제공하는 Red Hat 매뉴얼의 URL입니다.

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Targets.html

Red Hat 매뉴얼에는 multi-user.target이 런레벨 2, 3, 4와 동일하다고 명시되어 있습니다.

  • 런레벨 0 = poweroff.target
  • runlevel1=rescue.target
  • runlevel2 = 다중 사용자.대상
  • 런레벨 3 = multi-user.target
  • 런레벨 4 = multi-user.target
  • 런레벨 5 = Graphics.target
  • 런레벨 6 = restart.target

이를 염두에 두고 런레벨 2, 3, 4 사이를 전환하려는 명령을 사용하는 것은 의미가 없는 것 같습니다. systemctl set-default multi-user.target런레벨 2, 3, 4는 multi-user.target과 동의어이기 때문입니다.

systemctl cat httpd이 명령을 사용하여 일부 구성 정보를 볼 수 있다는 점은 주목할 가치가 있습니다 . 귀하의 질문과 관련하여 이 명령은 multi-user.target으로 설정된 HTTPD를 표시합니다.

# systemctl cat httpd
. . .
[Install]
WantedBy=multi-user.target

이것이 귀하의 환경에 적합한지 잘 모르겠습니다. 요구 사항에 대한 가능한 해결책은 스크립트를 사용하여 시스템의 현재 실행 수준을 결정한 다음 일부 if 루프를 사용하여 대상을 기반으로 HTTPD 데몬을 시작하거나 중지하는 것입니다. 예를 들어, 스크립트는 다음과 비슷할 수 있습니다.

#!/bin/bash
target=`systemctl get-default`
if [ $target == "multi-user.target" ]
then
  systemctl stop httpd
else
  systemctl start httpd
fi

관련 정보