従来の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
自動生成を防ぎますsystemd
。saned.service
masked
- さらに、パッケージは独自のテンプレートを提供します。このテンプレートのすべてのインスタンスはシールドから完全に分離され、正常に動作します。
/lib/systemd/system/[email protected]
saned.service
つまり、必要なものを取得するには、を指す/lib/systemd/system/my-service.service
シンボリックリンクをパッケージ化するだけです/dev/null
。