web-dev-qa-db-ja.com

debを使用してインストールされたsystemdサービスを自動的に有効にしますか?

私は自分の(自動的に作成された)サーバーにインストールする一連のサービスを構築しています。サービスがデフォルトで有効になっているUbuntu 14.04のupstartから(インストール時に開始したくない場合は、追加の作業を行う必要があります)から、systemdを新しいネイティブサービスとして使用するUbuntu 16.04に移行しています。フレームワーク。

サービスは、私が自分で作成しているdebパッケージを使用してインストールされます。 --with systemdrulesに追加し、systemdユニット指定でpackage-name.serviceを追加することで、deb作成をアップグレードしました。

私が見つけた問題は、[Install]を含むWantedBy=multi-user.targetセクションを追加しても、システム上でサービスが開始されないことです。

代わりに、サービスがインストールされ、systemctl status package-nameに次のように表示されます。

● package-name.service - My Service
   Loaded: loaded (/lib/systemd/system/package-name.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

私のrulesにはsystemdオーバーライドがありません。これは systemdページを使用したDebianパッケージdh_systemd_enableのマニュアルページ から理解できます。 =使用しないことを選択した場合、サービスを有効にするしないことができます。

また、ステータス表示の外観から、dh-systemdはサービス(ベンダープリセットビット)を有効にしたようですが、それだけでは不十分でした。何が欠けていますか?

5
Guss

ルールのoverride_dh_auto_installターゲットからdh_systemd_enable(デフォルトでサービスを実行するため)とdh_systemd_start(インストール後に実際に開始するため)を手動で呼び出すことで問題を回避しているため、次のようになります。

%:
    dh $@ --with-systemd

override_dh_auto_install:
    dh_auto_install
    dh_systemd_enable || true
    dh_systemd_start || true
3
Guss

実際、override_dh_auto_installには何も追加する必要はありません。

with--with systemdsystemdrulesの間にダッシュなしで)と、インストールされているパッケージdh-systemdが必要です。

7
sduthil

私もこの問題に遭遇しました。 _dh_systemd_enable_は、_foo.service_ファイルの内容について一定の期待を持っていることがわかります。

これは deb-systemd-helper の187行目から215行目で確認できます。

特に、_foo.service_ファイルに_[Install]_セクションがあり、エイリアスが_foo.service_と等しくない少なくともAliasフィールドがあることを確認すると、_deb-systemd-helper enable_必要なサービスを検出します。サービスを自動的に開始する場合は、_WantedBy=multi-user.target_を追加することも必要です。

以下は、私の_foo.service_ファイルを少し変更したバージョンです。

_[Unit]
Description=foo service, foos
After=bar.service
Requires=bar.service

[Service]
ExecStart=/path/to/my/script/foo
Restart=always
RestartSec=5

[Install]
Alias=foo
WantedBy=multi-user.target
_

いくつかのデバッグフラグを有効にし、_deb-systemd-helper_ Perlスクリプトにデバッグステートメントを追加することで、これを判断できました。 Ubuntu 16.04システムでは、_/usr/bin/deb-systemd-helper_で見つけました。

したがって、以下を繰り返し実行し、デバッグステートメントを追加すると、問題の原因を突き止めることができました。

_$ Sudo DPKG_MAINTSCRIPT_PACKAGE=1 _DEB_SYSTEMD_HELPER_DEBUG=1 deb-systemd-helper enable foo.service_

0
Gabriel