構成パッケージを作成していますが、構成に影響するサービスを停止および再起動したいです。現在、service [stop|restart]
を{pre,post}{inst,rm}
の方法で使用しています。 invoke-rc.d
がrightの方法であるという質問をどこかで読んだのは、サービスに関するユーザーの好みを尊重しているからです。しかし、これに関するガイドラインは見つかりませんでした。誰もがそのようなガイドラインを知っていますか?または、どの方法を選択すべきかについてアドバイスがありますか?このパッケージは内部で使用され、今後2年間は14.04のみ使用される予定です。ただし、後継者のためにできるだけきれいな状態を残したいので、systemd
も頭に浮かびます。
Debianパッケージのメンテナースクリプトによるinitスクリプトへのすべてのアクセスは、invoke-rc.dを介して行う必要があります。
Debian Policy Manualから 第9章、セクション3. :
メンテナーは、update-rc.dおよびinvoke-rc.dプログラムによって提供される抽象化レイヤーを使用して、postinst、prerm、postrmなどのパッケージのスクリプト内のinitscriptを処理する必要があります。
...
パッケージメンテナースクリプトは、/ etc/init.d/* initscriptを直接呼び出すのではなく、invoke-rc.dを使用して呼び出す必要があります。
Debianはsysv-init
を使用しており、systemd
に直接移行します。ポリシーマニュアルはsystemctl
を参照するためにやがて更新されると思います。しかし、私が不確かなのはこれです:service
の代わりにinvoke-rc.d
を使用すべきですか? (トリガーを介して)いくつかのファイルに興味があることをdpkg
に伝えることができるので、いくつかのサービスにも興味があり、dpkg
を取得するようにdpkg
に伝える方法があります再起動/リロード?
明確にするために:Iはinitスクリプトを書いていません。 Puppet、NTPなど、他のアプリケーションの構成を含むパッケージを提供しているため、スクリプト内の対応するサービスを停止して再起動します。
ここ は、たとえばinvoke-rc.d
vs service
に関するDockerの問題です。この問題はまだ開いており、おそらくメンテナーの一人が、これをrightの方法で行うことに間違いなく興味があるとコメントしています。 (私の質問はその問題とは無関係です。)
Pre/post instスクリプトを引き続き使用しますが、
preinst-このスクリプトは、パッケージがDebianアーカイブ( ".deb")ファイルから展開される前に実行されます。 多くの「preinst」スクリプトは、インストールまたはアップグレードが完了するまでアップグレードされるパッケージのサービスを停止します(「postinst」スクリプトの正常な実行後) 。
postinst-このスクリプトは通常、fooがDebianアーカイブ( ".deb")ファイルから展開されると、パッケージfooの必要な設定を完了します。多くの場合、「postinst」スクリプトはユーザーに入力を求め、および/またはデフォルト値を受け入れる場合は状況に応じてそのパッケージを忘れずに再構成することをユーザーに警告します。多くの「postinst」スクリプトは、新しいパッケージがインストールまたはアップグレードされると、サービスを開始または再起動するために必要なコマンドを実行します。
参照- https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Start | stop | restartを呼び出す構文は条件付きで記述されています。 https://www.debian.org/doc/debian-policy/ch-opersys.html セクション9.3.3.2 initscriptsの実行を参照してください
if invoke-rc.d>/dev/null 2>&1;それから
invoke-rc.dパッケージ
else
/etc/init.d/package
fi
そう ...
if which service >/dev/null 2>&1; then
service package <action>
Elif which invoke-rc.d >/dev/null 2>&1; then
invoke-rc.d package <action>
else
/etc/init.d/package <action>
fi
必要に応じてsystemdに別の条件を追加します;)
したがって、はい、サービスを開始する|停止|再起動する適切な方法は、可能であれば、適切なラッパースクリプト(invoke-rc.d/system)を使用して、initスクリプト(/etc/init.d/package)を呼び出し、ラッパーが使用できない場合は/etc/init.dスクリプトにフォールバックします。
Systemdシステムのより良い方法は、 deb-systemd-invoke を使用することです。