설정

설정

설정

기본적으로 보완적인 두 가지 서비스가 있습니다.

서비스 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=동일한 효과를 갖습니다. 이번에도 두 유닛 파일 모두에 속성을 설정해야 합니다.

관련 정보