Tomcatのドキュメント describes コンパイルとインストールのプロセス [〜#〜] jsvc [〜#〜] Tomcatをデーモンとして実行するために使用できます。私の理解によれば、JSVCには2つの利点があります。
systemd を学習してきました service unit configuration を含みます。私の限られた理解に基づいて、User=Tomcat
をRestart=on-failure
構成ファイルに設定し(希望するユーザー名を使用)、Tomcat.service
を設定すると、systemdはJSVCと同じタスクを実行できます。
[〜#〜] jsvc [〜#〜]を使用すると、Tomcat.service
は次のようになります。
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Environment=CATALINA_PID=/var/run/Tomcat.pid
Environment=Java_HOME=/path/to/Java
Environment=CATALINA_HOME=/opt/Tomcat
...
ExecStart=/opt/Tomcat/bin/jsvc \
-Dcatalina.home=${CATALINA_HOME} \
-user Tomcat \
-Java-home ${Java_HOME} \
-pidfile ${CATALINA_PID} \
...
org.Apache.catalina.startup.Bootstrap
ExecStop=/opt/Tomcat/bin/jsvc \
-pidfile ${CATALINA_PID} \
...
-stop \
org.Apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target
systemdを使用すると、Tomcat.service
は次のようになります。
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Type=forking
PIDFile=/var/run/Tomcat.pid
User=Tomcat
Group=Tomcat
Environment=Java_HOME=/path/to/Java
Environment=CATALINA_HOME=/opt/Tomcat
...
Restart=on-failure
ExecStart=/opt/Tomcat/bin/startup.sh
ExecStop=/opt/Tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
私の好みはsystemdを使用することです。すでにそこにあるので、とにかくそれを使わなければなりません(すべきです)。しかし、私が見落としているJSVCを使用することのメリットを逃してしまうかどうかは、私にはわかりません。
Tomcatをデーモンとして実行したい場合、systemdでは実現できないJSVCで実現できることは何ですか?
また、systemdがJSVCだけでなくJSVCと同じタスクを実行できる場合、JSVの利点を最大限に活用するために提供できる構成のヒントについてもお尋ねしたいと思います。 systemd。
一般に、jsvcが提供する機能のほとんどは、特権ポートのオープンを除いて、systemdが提供します(以下を参照)。可能であれば、systemd機能を直接使用するように切り替えることをお勧めします。これは、物事がより簡単で効率的になるためです。
あなたのユニットファイルはほとんど例外なく、
ExecStart=/opt/Tomcat/bin/startup.sh
ExecStop=/opt/Tomcat/bin/shutdown.sh
この部分は、Java -jar ...
へのダイレクトで置き換えることができる別のラッパーのように見えます。
Systemdでは、これは通常、ソケットのアクティブ化によって行われます。 Systemdはソケットを開き、それをデーモンにオープンファイル記述子(stdin、stdout、stderrなど)として渡します。
その後、デーモンは非特権ユーザーとして起動でき、特権自体は削除されません。デーモンはこれをサポートする必要があり、それ自体でソケットを開くのではなく、指定されたものを使用する必要があります。 Javaの下では、これはJava stdlibでのサポートの欠如によって非常に問題になります。
AFAIK、Tomcatはソケットのアクティブ化をサポートしていないため、特権ポートを使用してデーモンを非特権ユーザーで実行する場合でも、jsvcが必要になる場合があります。
この時点では、JSvcを使用します。ただし、必要に応じて、それをSystemdスクリプトでラップします。
JSvcは別の実行可能ファイルであることを覚えておいてください。したがって、通常のシステムユーザーは、たとえばJSvcサービスを設定できます。ほとんどのディストリビューションでは、Systemdはroot権限を設定する必要があると言っても安全です。
また、Java JSvcとProcRun.exeを使用するプログラムで、小さなJavaインターフェースをラップすることで作成しました。これにより、同じサービスコードとUnixおよびWindows OSでのJUnit統合テストなので、JSvcとProcRun.exeを一緒に使用すると、クロスプラットフォームのサービスコードが容易になります。
JSvcには、いくつかの興味深いJavaに役立つ特定のオプションがあります。JVMの起動方法(プロセスまたはDLL)など)など。それらの多くはSystemdスクリプトに組み込まれていますが、その時点ではBashでJSvcを書き換えているだけだと思います。
そのため、特定のTomcatの例ではそれほど魅力的ではありません。ただし、Systemdよりも小さなJSvcサービスラッパーを使用することにはいくつかの利点があります。
Root以外の権限でTomcatを実行したいが、低いポート(<1024)を使用する場合は、jsvcを使用する必要があります。
また、 シャットダウンポートを無効にする が利用可能になります。ただし、標準のシェルスクリプトを使用してTomcatを実行する場合は、shutdown.bat | .shとcatalina.bat | .shが正常に停止できないため、使用できません。