私はidebを使用して、DebianベースのディストリビューションでMavenベースのJavaヘッドレスアプリケーションを提供するために.debファイルを作成する方法を学びます。
起動時に自動的に起動するようにインストールする必要があります。
Webで見つかった例では、idebはinit.dファイルを含むデータディレクトリに設定されています。
<data>
<src>${project.basedir}/src/deb/init.d/</src>
<type>directory</type>
<mapper>
<type>perm</type>
<prefix>/etc/init.d</prefix>
<filemode>755</filemode>
<user>root</user>
<group>root</group>
</mapper>
</data>
しかし、他の初期化システムをどのように処理しますか? systemd、sysvinit、およびupstartのデータラベルを一緒に設定する必要がありますか?
洞察力をありがとうございます。
答え1
この状況には魔法はありません。 Debianパッケージの静的コピーを使用するとサービスが重複するため、systemdファイルとsysVファイルをインストールできません。
だから私が見つけた解決策は、設定ファイルをdebファイルの通常のファイルとして提供し、ターゲットシステムが実行されているinitシステムを識別するpostinst / postrmスクリプトにルーチンを実装し、正しいファイルを正しいディレクトリにコピーすることでした。 。
if [[ `systemctl` =~ -\.mount ]]
then
cp $serviceDir/service-systemd /lib/systemd/system/$serviceName.service
elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]
then
cp $serviceDir/service-sysvinit /etc/init.d/$serviceName
fi