Bu makalede bulunan bilgilere dayanarak bir tomcat uygulaması çalıştırmak için bir systemd hizmeti oluşturdum . Makalenin kısa sürümü, kabuk komut dosyası sarmalayıcılarından kaçınmayı ve uygun ortam ve komut satırı ile doğrudan java çalıştırılmasını önerir.
İşte systemd hizmetinin tamamı (uygulama adı değiştirilmiş olarak):
[Unit]
Description=MyApp Tomcat Container
[Service]
EnvironmentFile=/opt/myapp/environment
ExecStart=/usr/bin/env ${JAVA_HOME}/bin/java $JAVA_OPTS $CATALINA_OPTS \
-classpath ${CLASSPATH} \
-Dcatalina.base=${CATALINA_BASE} \
-Dcatalina.home=${CATALINA_HOME} \
-Djava.endorsed.dirs=${JAVA_ENDORSED_DIRS} \
-Djava.io.tmpdir=${CATALINA_TMPDIR} \
-Djava.util.logging.config.file=${CATALINA_BASE}/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
org.apache.catalina.startup.Bootstrap start
ExecStop=/usr/bin/env $JAVA_HOME/bin/java $JAVA_OPTS \
-classpath $CLASSPATH \
-Dcatalina.base=$CATALINA_BASE \
-Dcatalina.home=$CATALINA_HOME \
-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS \
-Djava.io.tmpdir=$CATALINA_TMPDIR \
-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
org.apache.catalina.startup.Bootstrap stop
[Install]
WantedBy=multi-user.target
Bu bildiğim kadarıyla iyi çalışıyor. Hizmet, durumu doğru bir şekilde başlatır, durdurur ve raporlar. Ben yaşıyorum sorun tarafından rapor günlükleri ile journalctl
:
# journalctl -u myapp.service --since today
Sep 14 00:26:00 myserver.domain.com env[654]: MyApp:2015-09-14 00:26:00: INFO Detail irrelevant
Sep 14 00:26:00 myserver.domain.com env[654]: MyApp:2015-09-14 00:26:00: INFO Detail irrelevant
Sep 14 00:26:17 myserver.domain.com env[654]: MyApp:2015-09-14 00:26:17: INFO Detail irrelevant
env
Çalışan yürütülebilir olarak günlüğe kaydedilen buraya bakın . java
Aslında önem verdiğimiz program olduğunu göz önünde bulundurarak yürütülebilir olarak görmeyi tercih ederim . env
Gürültüdür. Start komutunu önekle tavsiye eden birkaç farklı systemd servis dosyasını fark ettim /usr/bin/env
, bu yüzden üretilen günlükler hakkında bazı bilgiler bulabileceğimi varsaydım. Görünüşe göre öyle değil.
Yürütülebilir java doğrudan yürütme aynı desen (değil, startup.sh sarmalayıcılar) kullanmak java
yerine yürütülebilir bildirebilir miyim env
?
Ekstra puan için, servis dosyamın eksik olabileceği konusunda bazı ipuçları ve ipuçları isterim. İlk kez bir systemd hizmeti yazdım ve en iyi uygulamalar hakkında daha fazla bilgi edinmek istiyorum.