私は自分の(自動的に作成された)サーバーにインストールする一連のサービスを構築しています。サービスがデフォルトで有効になっているUbuntu 14.04のupstartから(インストール時に開始したくない場合は、追加の作業を行う必要があります)から、systemdを新しいネイティブサービスとして使用するUbuntu 16.04に移行しています。フレームワーク。
サービスは、私が自分で作成しているdebパッケージを使用してインストールされます。 --with systemd
をrules
に追加し、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
はサービス(ベンダープリセットビット)を有効にしたようですが、それだけでは不十分でした。何が欠けていますか?
ルールの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
実際、override_dh_auto_install
には何も追加する必要はありません。
with
に--with systemd
(systemd
とrules
の間にダッシュなしで)と、インストールされているパッケージdh-systemd
が必要です。
私もこの問題に遭遇しました。 _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
_