특정 이벤트(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
실행하면 최종 빌드 서비스 정의의 모든 부분을 한 번에 표시하여 도움이 될 수 있습니다.