レガシー初期化スクリプトが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

Debian では、次のようなさまざまなサービスを通じてこれを行いますsaned

  • SysVinitスタイルのスクリプトは/etc/init.d/saned通常systemd-sysv-generator自動的に生成されますsaned.service
  • しかし、このパッケージは/lib/systemd/system/saned.service -> /dev/null自動生成を防ぎますsystemdsaned.servicemasked
  • さらに、パッケージは独自のテンプレートを提供します。このテンプレートのすべてのインスタンスはシールドから完全に分離され、正常に動作します。/lib/systemd/system/[email protected]saned.service

つまり、必要なものを取得するには、を指す/lib/systemd/system/my-service.serviceシンボリックリンクをパッケージ化するだけです/dev/null

おすすめ記事