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

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

私は自分の(自動生成された)サーバーにインストールするいくつかのサービスを構築しています。 Ubuntu 14.04のUpstartでは、デフォルトでサービスが有効になっているUbuntu 16.04に移行しています(インストール時にサービスを開始したくない場合は追加のタスクを実行する必要があります)、systemdを新しい基本サービスフレームワークとして使用しようとしています。 。

このサービスは、私が自分で作成したdebパッケージを使用してインストールされます。 systemdユニット仕様でファイルを--with systemd追加しrulesて追加してdeb生成をアップグレードしました。package-name.service

私が見つけた問題は、に[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私が始めたように、私のシステムにはシステムオーバーライドはありません。システムページを使用した Debian パッケージングしかもdh_systemd_enable のマニュアルページ私は利用できるいいえサービスを有効にしないことを選択した場合。

また、ステータス表示を見るとdh-systemdサービスが有効になっているように見えますが(ベンダープリセットビット)、それだけでは不十分です。私は何を見逃していますか?

答え1

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

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

答え2

ルールの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

私もこの問題に直面しました。ファイルdh_systemd_enableの内容に特定の期待があることがわかりましたfoo.service

187-215行目でこれを見ることができます。deb-systemd-helper

具体的には、foo.serviceファイルにセクションがあり、エイリアスが次のとおりでないフィールドが1つ[Install]以上あることを確認してください。これにより、検出に必要なサービスが呼び出されます。サービスが自動的に開始されるようにするには、追加する必要があります。Aliasfoo.servicedeb-systemd-helper enableWantedBy=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

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

したがって、次のコマンドを繰り返し実行してデバッグステートメントを追加すると、問題の原因を特定できます。

$ sudo DPKG_MAINTSCRIPT_PACKAGE=1 _DEB_SYSTEMD_HELPER_DEBUG=1 deb-systemd-helper enable foo.service

答え4

今この問題が発生しました。必要な[Install]セクションがあるにもかかわらず、まだデフォルトではデバイスを有効にしません。

回避策は、.serviceファイルのWindowsの終わりをUNIXの終わりに変換することです。

dos2unix my.service

関連情報