레거시 초기화 스크립트가 systemd에서 활성화되지 않도록 방지

레거시 초기화 스크립트가 systemd에서 활성화되지 않도록 방지

레거시 SysV 스타일 초기화 스크립트의 .deb 패키지를 기본 systemd 단위로 업데이트하고 있습니다. 그러나 시스템을 초기화하는 다른 사용자를 위해 지금은 이전 init 스크립트를 패키지에 유지하고 싶습니다. 관련 서비스는 시스템에서 여러 사용자로 실행되도록 구성할 수 있습니다.

기존 init 스크립트에서는 관리자가 필요한 사용자를 특정 그룹에 추가했고 init 스크립트는 각 사용자에 대한 서비스 인스턴스 시작을 담당했습니다. systemd의 경우 템플릿을 사용하여 각 사용자마다 별도의 인스턴스를 활성화하고 싶습니다. 예를 들어, systemctl enable my-service@user1; systemctl enable my-service@user2. 이를 통해 모든 사용자의 인스턴스를 모두 시작하고 중지하는 대신 독립적으로 시작하고 중지할 수 있습니다.

일반적으로 패키지에 SysV 스타일 init 스크립트와 systemd 유닛이 모두 있으면 이름이 동일하므로 기본 systemd 유닛은 init 스크립트를 숨겨 systemd 사용자가 systemd 유닛을 사용할 수 있도록 합니다. 그러나 이 경우 새 단위는 템플릿이므로아니요초기화 스크립트를 숨깁니다. systemd 사용자가 init 스크립트를 활성화하는 것을 방지하고 systemd 서비스 템플릿을 사용하도록 지시하는 방법은 무엇입니까?

답변1

데비안에서는 다음과 같은 다양한 서비스를 통해 이를 수행합니다 saned.

  • SysVinit 스타일 스크립트는 /etc/init.d/saned일반적으로 systemd-sysv-generator자동으로 생성 됩니다 saned.service.
  • 그러나 이 패키지는 /lib/systemd/system/saned.service -> /dev/null자동 생성을 방지하고 systemd.saned.servicemasked
  • 또한 패키지는 자체 템플릿을 제공합니다. 이 템플릿의 모든 인스턴스는 실드에서 완전히 분리되어 정상적으로 작동합니다./lib/systemd/system/[email protected]saned.service

즉, 원하는 것을 얻으려면 를 /lib/systemd/system/my-service.service가리키는 심볼릭 링크를 패키지하면 됩니다 /dev/null.

관련 정보