동일한 시스템 단위를 마스크하고 상속합니다.

동일한 시스템 단위를 마스크하고 상속합니다.

특정 이벤트(whatever.socket 포함)로 인해 데몬이 특정 구성으로 시작되도록 패키지가 everything.service 파일을 제공한다고 가정합니다.

이 기능을 완전히 비활성화하고 싶습니다. 특히, 이 서비스를 이름으로 참조할 수 있는 이전 소켓과 기타 모든 장치 파일이 데몬을 시작할 수 없도록 하고 싶습니다.

대신, 다른 .socket 단위와 다른 환경 변수를 사용하여 이 데몬에 대한 자체 단위 파일을 만들고 싶습니다. 또한 원본 단위 파일에 대한 가능한 업스트림 업데이트를 자동으로 고려하도록 재정의하기를 원합니다(안타깝게도 everything.service를 everything-modified.service에 복사하고 편집하는 현재 솔루션에서는 이를 제공하지 않습니다).

다음 심볼릭 링크와 파일을 만드는 경우:
/etc/systemd/system/whatever.service → /dev/null
/etc/systemd/system/whatever-modified.service → /usr/lib/systemd/system/whatever.service
/ etc/systemd/system/whatever-modified.service.d/fix.conf

systemd는 새 서비스도 차단된 것으로 간주하고 시작을 거부합니다. 이 상황을 피하는 방법은 무엇입니까?

답변1

하나를 생성하면 /etc/systemd/system/whatever.service해당 항목이 이미 자동으로 완전히 재정의됩니다 /usr/lib/systemd/system/whatever.service. 심볼릭 링크 /dev/null는 그 중 특별한 경우일 뿐입니다.

/usr/lib/systemd/system/whatever.service향후 업데이트 가능성을 고려하여 기존 콘텐츠의 일부만 덮어쓰려면 /etc/systemd/system/whatever.service.d/fix.conf덮어쓰기/추가를 사용하여 만들 수 있습니다. 존재하지 않는 /usr/lib/systemd/system/whatever.service경우 /etc/systemd/system/whatever.service자동으로 적용됩니다.

일부 설정(예: 여러 번 나타날 수 있음)에 유의하세요. 다른 행을 추가하는 대신 ExecStart=기존 행을 덮어쓰려면 다음과 같아야 합니다.ExecStart=fix.conf

[Service]
ExecStart=
ExecStart=/your/custom/command

첫 번째 빈 ExecStart=줄은 systemd에 "새 매개변수를 추가하는 것이 아니라 원래 ExecStart 매개변수를 제거하고 싶습니다."라고 알려줍니다.

물론 파일이나 디렉터리 또는 그 내용을 systemctl daemon-reload변경한 후에는 항상 실행해야 한다는 점을 기억하세요. 그렇지 않으면 변경 사항이 적용되지 않습니다..service.service.d

systemctl cat whatever.service실행하면 최종 빌드 서비스 정의의 모든 부분을 한 번에 표시하여 도움이 될 수 있습니다.

관련 정보