설정
기본적으로 보완적인 두 가지 서비스가 있습니다.
서비스 A(gdm)는 데몬입니다. 서비스 B는 ExecStart=
작은 명령만 실행합니다.ExecStop=
service-b-hdmi.service
-------------------------
[Unit]
Description=Turn off HDMI
Conflicts=gdm.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/bash -c '/bin/echo off > /sys/class/drm/card0-DP-1/status'
ExecStop=/usr/bin/bash -c '/bin/echo on > /sys/class/drm/card0-DP-1/status'
시작 조건
- 서비스 A(gdm) 예중지됨
- 서비스 B(HDMI) 예여기 간다"활성(종료)"(HDMI 카드 끄기)
질문
- 서비스 A(gdm)를 시작하면 충돌이 발생하므로 서비스 B를 중지해야 합니다.
- 그러나 서비스 B는 행복하게 살고 있으며 현재 두 서비스 모두 활성화되어 있습니다. 서비스 A는 "활성(실행 중)" 상태이고 서비스 B는 "활성(종료)" 상태입니다.
질문
강제할 수 있는 방법이 있나요?Conflicts=
답변1
이것문서이걸 말해보세요:
한 장치
Conflicts=
에 다른 장치에 대한 설정이 있는 경우 전자를 시작하면 후자도 중지되고 그 반대의 경우도 마찬가지입니다.
따라서 'service-b-hdmi.service'가 포함된 경우 Conflicts=gdm.service
'service-b-hdmi.service'를 시작하면 'gdm.service'가 중지됩니다.
이 작업을 반대로 수행하려면(문제가 발생한 것으로 보이는 부분) Conflicts=service-b-hdmi.service
유닛 파일에 "gdm.service"를 추가해야 합니다. "gdm.service"를 시작하면 "service-b-hdmi.service"가 중지되며 이는 예상된 동작인 것 같습니다.
문서에서는 또한 순서 지정을 사용 After=
하거나 Before=
시행하여 다른 장치가 시작되기 전에 한 장치가 완전히 종료되도록 할 것을 권장합니다. 두 장치의 전원을 켜거나 끄면 순서 논리가 약간 더 복잡해집니다. 그러나 이 경우 한 장치는 종료되고 다른 장치는 시작됩니다. systemd
모든 종료 작업은 시작 작업 전에 예약되므로 이 경우 Before=
및 둘 다 After=
동일한 효과를 갖습니다. 이번에도 두 유닛 파일 모두에 속성을 설정해야 합니다.