कैसे से बचने के लिए / usr / bin / env को सिस्टम लॉग में निष्पादन योग्य के रूप में चिह्नित किया जा रहा है


15

मैंने इस लेख में पाई गई जानकारी के आधार पर एक टॉमकैट एप्लिकेशन को चलाने के लिए एक सिस्टमड सर्विस बनाई है । लेख का संक्षिप्त संस्करण उचित स्क्रिप्ट और कमांड लाइन के साथ शेल स्क्रिप्ट के रैपर से बचने और जावा को सीधे निष्पादित करने की सलाह देता है।

यहाँ 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 रैपर) के इस एक ही पैटर्न का उपयोग कर?

अतिरिक्त बिंदुओं के लिए, मुझे कुछ संकेत और सुझाव पसंद आएंगे कि मेरी सेवा फ़ाइल क्या गायब हो सकती है। यह पहली बार है जब मैंने एक प्रणालीगत सेवा लिखी है, और सर्वोत्तम प्रथाओं के बारे में अधिक जानने के लिए उत्सुक हूं।

जवाबों:


16

SyslogIdentifier निर्देश आप लॉग में निष्पादन योग्य नाम के नाम पर स्थापित करने के लिए अनुमति देता है।

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.