मैंने इस लेख में पाई गई जानकारी के आधार पर एक टॉमकैट एप्लिकेशन को चलाने के लिए एक सिस्टमड सर्विस बनाई है । लेख का संक्षिप्त संस्करण उचित स्क्रिप्ट और कमांड लाइन के साथ शेल स्क्रिप्ट के रैपर से बचने और जावा को सीधे निष्पादित करने की सलाह देता है।
यहाँ systemd सेवा की संपूर्णता है (ऐप नाम की जगह):
[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
जहाँ तक मुझे पता है यह काफी अच्छा काम करता है। सेवा सही ढंग से स्थिति को शुरू, रोकती और रिपोर्ट करती है। मेरे द्वारा बताई गई समस्या लॉग के साथ है 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
रनिंग एक्जीक्यूटेबल के रूप में लॉग किया जा रहा है। मैं बहुत अधिक java
निष्पादन के रूप में देखूंगा , यह देखते हुए कि वास्तव में जिस कार्यक्रम की हमें परवाह है। env
शोर है। मैंने देखा है कि कुछ अलग systemd सर्विस फाइल्स हैं जो स्टार्ट कमांड के साथ प्रीफ़िक्स करने की सलाह देती हैं /usr/bin/env
, इसलिए मैंने माना कि मैं उत्पादित लॉग के बारे में कुछ जानकारी पा सकता हूँ। जाहिरा तौर पर नहीं।
मैं के रूप में निष्पादन रिपोर्ट कर सकते हैं java
बजाय env
, जबकि जावा सीधे क्रियान्वित (नहीं startup.sh रैपर) के इस एक ही पैटर्न का उपयोग कर?
अतिरिक्त बिंदुओं के लिए, मुझे कुछ संकेत और सुझाव पसंद आएंगे कि मेरी सेवा फ़ाइल क्या गायब हो सकती है। यह पहली बार है जब मैंने एक प्रणालीगत सेवा लिखी है, और सर्वोत्तम प्रथाओं के बारे में अधिक जानने के लिए उत्सुक हूं।