私は自分の(自動生成された)サーバーにインストールするいくつかのサービスを構築しています。 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
およびインストールされているパッケージに(との間にダッシュなし)が必要です。with
systemd
rules
dh-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]
以上あることを確認してください。これにより、検出に必要なサービスが呼び出されます。サービスが自動的に開始されるようにするには、追加する必要があります。Alias
foo.service
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
いくつかのデバッグフラグを有効にして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