এক্সিকিউটেবল হিসাবে সিস্টেমড লগগুলিতে চিহ্নিত / usr / bin / env এড়াতে কীভাবে


15

আমি এই নিবন্ধে প্রাপ্ত তথ্যের ভিত্তিতে টমক্যাট অ্যাপ্লিকেশন চালানোর জন্য একটি সিস্টেমড পরিষেবা তৈরি করেছি । নিবন্ধটির সংক্ষিপ্ত সংস্করণটি উপযুক্ত পরিবেশ এবং কমান্ড লাইনের সাহায্যে শেল স্ক্রিপ্টের মোড়কে এড়ানো এবং সরাসরি জাভা চালিয়ে যাওয়ার পরামর্শ দেয়।

এখানে সিস্টেমেড পরিষেবাটির সম্পূর্ণতা রয়েছে (অ্যাপের নাম প্রতিস্থাপনের সাথে):

[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গোলমাল হয়। আমি বেশ কয়েকটি ভিন্ন ভিন্ন সিস্টেমড সার্ভিস ফাইল লক্ষ্য করেছি যা স্টার্ট কমান্ডের সাথে উপসর্গের প্রস্তাব দেয় /usr/bin/env, তাই আমি ধরে নিয়েছিলাম যে আমি লগ হওয়া লগগুলি সম্পর্কে কিছু তথ্য পেতে সক্ষম হব। দৃশ্যত না.

আমি এক্সিকিউটেবল প্রতিবেদন করতে পারেন javaবরং envযখন জাভা সরাসরি নির্বাহ (না startup.sh চাদরে) এর এই একই প্যাটার্ন ব্যবহার করছেন?

অতিরিক্ত পয়েন্টগুলির জন্য, আমি আমার পরিষেবা ফাইলটি কী অনুপস্থিত হতে পারে সে সম্পর্কে কিছু ইঙ্গিত এবং টিপসটি পছন্দ করব। আমি প্রথমবারের মতো একটি সিস্টেমযুক্ত পরিষেবা লিখেছি এবং সেরা অনুশীলনগুলি সম্পর্কে আরও জানতে আগ্রহী।

উত্তর:


16

SyslogIdentifier নির্দেশ আপনি লগ এক্সিকিউটেবল নামের নাম সেট করার অনুমতি দেয়।

SyslogIdentifier=java
# or my app name, but not both!
SyslogIdentifier=myapp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.