나는 systemctl enable iptables
그것이 command 와 유사하다는 것을 알고 있지만 chkconfig --level 5 iptables on
둘이 정확히 동일하지는 않습니다.
를 사용하여 systemctl
주어진 대상(예: graphic.target)에서만 서비스가 시작되도록 제한하는 방법은 무엇입니까?
답변1
단위 파일의 WantedBy=
AND RequiredBy=
지시문의 용도 는 다음과 같습니다.systemd
~에서man systemd.unit
:
구함=, 필수=
이 옵션은 여러 번 사용하거나 공백으로 구분된 단위 이름 목록을 제공할 수 있습니다. 이 장치가 systemctl 활성화를 통해 설치되면 나열된 각 장치의 .wants/ 또는 .requires/ 디렉터리에 심볼릭 링크가 생성됩니다. 이는 나열된 장치의 Wants= 또는 Requires= 유형 종속성을 현재 장치에 추가하는 효과가 있습니다. 주요 결과는 나열된 장치가 시작될 때 현재 장치가 시작된다는 것입니다. 자세한 내용은 [Unit] 섹션에서 Wants= 및 Requires=에 대한 설명을 참조하세요.
따라서 생성된 심볼릭 링크는 systemd
대상/유닛이 시작될 때 지정된 유닛을 시작하는 것입니다.
예를 들어:
[Install]
WantedBy=graphical.target
graphical.target
장치가 런타임에만 시작되도록 합니다(장치가 활성화된 경우).
다른 예시:
[Install]
WantedBy=my-custom-target.target graphical.target
my-custom-target.target
또는 실행 중일 때 장치가 시작되도록 합니다 graphical.target
(장치가 활성화된 경우).
마지막으로 명심해야 할 점은 일부 목표는 다른 목표에 의존하기 때문에 단일 목표로 제한하는 것이 어려울 수 있다는 것입니다. 예를 들어 , 시작 graphical.target
Requires=multi-user.target
하면 모든 장치 도 시작됩니다. 일부 목표는 다른 목표 위에 구축되며, 그 위에 구축된 목표는 해당 목표의 모든 것을 가져옵니다.graphical.target
multi-user.target
답변2
직접적으로 동등한 것은 없습니다 chkconfig --level 5 iptables on
. 오래된 sysvinit의 관점에서 계속 생각하는 것은 무의미하고 혼란스럽습니다.systemd에는 런레벨 같은 것이 없습니다.
즉, 서비스의 [Install] 섹션에서 WantedBy=graphical.target을 사용하여 Graphical.target에 도달한 경우에만 서비스 관리자에게 iptables를 시작하도록 요청할 수 있습니다.