Saya telah membuat layanan systemd untuk menjalankan aplikasi kucing jantan berdasarkan informasi yang ditemukan dalam artikel ini . Versi singkat artikel merekomendasikan untuk menghindari pembungkus skrip shell, dan mengeksekusi java secara langsung, dengan lingkungan dan baris perintah yang sesuai.
Inilah keseluruhan layanan systemd (dengan nama aplikasi diganti):
[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
Ini bekerja dengan baik sejauh yang saya tahu. Layanan mulai, berhenti, dan melaporkan status dengan benar. Masalah yang saya alami adalah dengan log seperti yang dilaporkan oleh 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
Lihat di sini bahwa env
sedang dicatat sebagai executable berjalan. Saya lebih suka melihat java
sebagai executable, mengingat itu adalah program yang benar-benar kita pedulikan. The env
kebisingan. Saya telah memperhatikan beberapa file layanan systemd yang berbeda yang merekomendasikan awalan dengan perintah start /usr/bin/env
, jadi saya berasumsi saya mungkin dapat menemukan beberapa informasi tentang log yang dihasilkan. Sepertinya tidak.
Dapatkah saya melaporkan executable java
daripada env
menggunakan pola yang sama mengeksekusi java secara langsung (bukan pembungkus startup.sh)?
Untuk poin tambahan, saya akan menyukai beberapa petunjuk dan tips tentang apa yang mungkin tidak ada pada file layanan saya. Ini adalah pertama kalinya saya menulis layanan systemd, dan saya ingin mempelajari lebih lanjut tentang praktik terbaik.