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 . javaAslında önem verdiğimiz program olduğunu göz önünde bulundurarak yürütülebilir olarak görmeyi tercih ederim . envGü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 javayerine 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.