CentOS 7でSystemdを使用してTomcatサービスをセットアップしようとしています。
私はOracle Java 1.8u74を/usr/Java/jdk1.8.0_74
にインストールし、起動時に環境変数$Java_HOME
を次のように設定しました。
# echo "export Java_HOME=/usr/Java/jdk1.8.0_74" > /etc/profile.d/setenv.sh
システムにログインすると、echo $Java_HOME
を実行して正しいパスを確認できます。 Tomcatをインストールしましたが、Tomcat.service
ファイルには以下が含まれています。
# Systemd unit file for Tomcat
[Unit]
Description=Apache Tomcat
After=syslog.target network.target
[Service]
Type=forking
Environment=Java_HOME=/usr/Java/jdk1.8.0_74
Environment=CATALINA_PID=/opt/Tomcat/temp/Tomcat.pid
Environment=CATALINA_HOME=/opt/Tomcat
Environment=CATALINA_BASE=/opt/Tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='Java_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/Tomcat/bin/startup.sh
ExecStop=/opt/Tomcat/bin/shutdown.sh
User=Tomcat
Group=www
[Install]
WantedBy=multi-user.target
問題は、Environment=Java_HOME=/usr/Java/jdk1.8.0_74
を読み取る行を省略した場合、Tomcatは$ Java_HOMEを見つけられないことですが、/etc/profile.d/setenv.sh
に設定されているため、$ Java_HOMEを見つけることが期待されます。
setenv.sh
を間違った場所に配置しましたか?これは、systemdで予想される動作です。
Systemdサービスが実行される環境を理解するには、man systemd.exec
、特にENVIRONMENT VARIABLES IN SPAWNED PROCESSES
を参照してください。言うように、設定される変数はごくわずかであり、他に自分で設定する必要があります。
たまたま/etc/profile.d
のファイルはインタラクティブシェルによって供給されているため、ログインすると変数が表示されます。これで、チュートリアルで推奨されているとおりの操作を実行できます。 Javaアップグレードするとユニットファイルが壊れるのではないかと心配している場合は、Javaインストールへのシンボリックリンクを作成するか、起動時にファイルを入手することもできます。
ExecStart=/bin/sh -c '. /etc/profile.d/setenv.sh; /opt/Tomcat/bin/startup.sh'
ExecStop=/bin/sh -c '. /etc/profile.d/setenv.sh; /opt/Tomcat/bin/shutdown.sh'
私はあなたがすでに持っているものに個人的に固執します。