मैं कैसे देख सकता हूँ जब एक systemd सेवा शुरू / बंद / फिर शुरू की गई थी?


12

मेरे पास डेबियन (जेसी) सर्वर पर चलने वाली एक सेवा (स्वयं द्वारा लिखित) है, और सेवा के स्वयं के लॉग्स यह संकेत देते हैं कि यह एक विशेष समय पर पुनः आरंभ होता है। किसी सेगफ़ॉल्ट या अन्य दुर्घटना का कोई संकेत नहीं है, इसलिए मैं अब यह पता लगाने की कोशिश कर रहा हूं कि क्या एप्लिकेशन किसी तरह चुपचाप विफल रहा और सिस्टमड द्वारा रिस्पॉन्ड किया गया, या क्या उपयोगकर्ता ने जानबूझकर सेवा को फिर से शुरू किया systemctl

शेल इतिहास इस तरह की गतिविधि नहीं दिखाता है, लेकिन यह इस वजह से निर्णायक नहीं है export HISTCONTROL=ignorebothऔर क्योंकि SSH सत्र का समय समाप्त हो सकता है, पिछले लॉगिन के बैश इतिहास को डिस्क पर लिखे जाने से रोकता है। उस समय सर्वर रिबूट नहीं किया गया था।

लेकिन मैं यह उम्मीद करूंगा कि जब कोई सेवा जानबूझकर दोबारा शुरू की जाए तो सिस्टमड खुद ही एक संकेत बताता रहे । अपने आश्चर्य के लिए मैं journalctlइस तरह के लॉग प्राप्त करने के बारे में कोई दस्तावेज (जैसे के लिए ) खोजने में असमर्थ था ।

कुछ अन्य पोस्ट (जैसे कि कहां है / सामान्य यूजर सिस्टम सेवाओं के लिए कोई लॉग क्यों नहीं है? ) से संकेत मिलता है कि इस तरह लॉग होना चाहिए:

Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Starting chatty.service...
Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Started chatty.service.

लेकिन मुझे अपने सिस्टम पर ऐसे लॉग संदेश नहीं दिखते।

क्या यह पता लगाने का कोई तरीका है कि सिस्टमड सेवाओं को कब शुरू किया गया, रोका गया या फिर से शुरू किया गया?

संपादित करें : ऐसा लगता है कि लोगों को चलने वाली सामान्य समस्या यह है कि वे journalctlएक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलते हैं । यह मेरे लिए नहीं है, मैं rootपूरे समय के रूप में काम कर रहा हूं । एक टिप्पणी के जवाब में, रनिंग grep systemd /var/log/syslogमुझे केवल यही देता है:

Jun  6 09:28:35 server systemd[22057]: Starting Paths.
Jun  6 09:28:35 server systemd[22057]: Reached target Paths.
Jun  6 09:28:35 server systemd[22057]: Starting Timers.
Jun  6 09:28:35 server systemd[22057]: Reached target Timers.
Jun  6 09:28:35 server systemd[22057]: Starting Sockets.
Jun  6 09:28:35 server systemd[22057]: Reached target Sockets.
Jun  6 09:28:35 server systemd[22057]: Starting Basic System.
Jun  6 09:28:35 server systemd[22057]: Reached target Basic System.
Jun  6 09:28:35 server systemd[22057]: Starting Default.
Jun  6 09:28:35 server systemd[22057]: Reached target Default.
Jun  6 09:28:35 server systemd[22057]: Startup finished in 59ms.
Jun  6 09:37:08 server systemd[1]: Reexecuting.

"ऐसे लॉग संदेश नहीं देखते हैं" - अजीब है? मेरे पास बहुत कुछ हैgrep systemd /var/log/syslog
hschou

अपने सिस्टम पर मैं केवल बहुत ही सामान्य संदेश देखता हूं जैसे कि Stopped target Default, Starting Shutdownआदि व्यक्तिगत सेवाओं के बारे में कुछ भी संकेत नहीं देता है। शायद यह सिर्फ एक कॉन्फ़िगरेशन समस्या है? नोट मैं इस विशेष मामले में डेबियन जेसी पर हूं।
मनमुटाव

अपनी /etc/systemd/journald.confओवरराइड की जाँच न करें MaxLevelStoreया MaxLevelSyslog, अन्य सभी स्थानों पर देखें जिन्हें आप सूचीबद्ध कर सकते हैं man journald.conf
meuh

पारितोषिक के लिए धन्यवाद। दुर्भाग्य से, unter स्थित सभी config फाइल /etc/systemdअनिवार्य रूप से खाली हैं (आपके द्वारा उल्लिखित सभी विकल्पों पर टिप्पणी की गई है, जिनमें आप भी शामिल हैं)।
मनसूबे

जवाबों:


11

यदि आपको यह स्क्रिप्ट करने की आवश्यकता है, तो आपको systemctl show कमांड का उपयोग करना चाहिए । यह स्क्रिप्ट के लिए अधिक उपयोगी है, जिसमें से कुछ भी पार्स करने की कोशिश की जा रही है status। उदाहरण के लिए, यह पता लगाने के लिए कि आपके द्वारा शुरू की गई सेवा का उपयोग कब किया गया था:

$ systemctl show systemd-journald --property=ActiveEnterTimestamp
ActiveEnterTimestamp=Wed 2017-11-08 05:55:17 UTC

यदि आप उपलब्ध सभी संपत्तियों को देखना चाहते हैं, तो वे ध्वज को छोड़ दें और यह उन सभी को डंप कर देगा।

$ systemctl show <service_name>

इन गुणों के लिए प्रलेखन यहाँ पाया जा सकता है


दिलचस्प है, मैं गुणों के बारे में पता नहीं था। दुर्भाग्य से, वे केवल एक ही सेट किए जाते हैं, भले ही यह सेवा विफल हो गई हो या फिर दी गई हो, या उपयोगकर्ता द्वारा जानबूझकर सेवा को फिर से शुरू किया गया हो।
21

1
वैसे, गुणों के लिए एक बेहतर लिंक डब्बा प्रलेखन लगता है ।
21

धन्यवाद @mindriot जो डॉक्स के लिए एक बेहतर लिंक है, मैंने अपना उत्तर अपडेट कर दिया है।
jdf

1
@mindriot अपने पहले बिंदु के बारे में हालांकि, आपने जाँच की है StatusErrnoऔर Result? मुझे आश्चर्य होगा कि अगर सेवा विफल हो गई या फिर से शुरू हुई तो वे बदल गए। यदि आपको वास्तव में एक ऐसे ExecStopPostकदम को जोड़ने की कोशिश करने की आवश्यकता है जहां आप एक फ़ाइल को छूते हैं और शटडाउन पर टाइमस्टैम्प को अपडेट करते हैं। यह आपको मूक पुनरारंभ और उद्देश्यपूर्ण लोगों के बीच अंतर करने में मदद करेगा।
jdf

धन्यवाद, यह भी एक अच्छी बात है। मैं आसानी से स्थिति की जांच / पुन: निर्माण नहीं कर पाऊंगा; मेरा मूल पद पहले से लगभग आधा साल पुराना है और हमने सिस्टम में कुछ बदलाव किए हैं। मैं जाँच करूँगा कि क्या मैं इसे कहीं बाहर की कोशिश कर सकता हूँ - अगर मुझे मौका मिलता है।
मनसब

3

डेबियन पर डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ, एक अनपेक्षित उपयोगकर्ता के पास न तो सिस्टमड-जर्नल तक पहुंच होगी, न ही सिसलॉग लॉग। यदि एक सामान्य उपयोगकर्ता के रूप में लॉग इन किया जाता है, तो आपको यह प्रतिक्रिया जर्नल से प्राप्त होगी:

$ journalctl 
No journal files were found.

जो थोड़ा भ्रमित करने वाला है।

यदि आप रूट के रूप में लॉग इन हैं, journalctl --unit=yourserviceतो आपको वह जानकारी देनी चाहिए जिसकी आपको तलाश है। systemctl restart bind9मेरे सर्वर पर एक के बाद , मुझे यह मिलता है journalctl --unit=bind9:

Jun 03 18:20:24 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:20:24 ns named[27605]: received control channel command 'stop'
Jun 03 18:20:24 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:20:24 ns systemd[1]: Started BIND Domain Name Server.

यदि मैं स्पष्ट रूप से bind9 को मारता हूं kill -9, तो journalctl --unit=bind9:

Jun 03 18:46:25 ns systemd[1]: bind9.service: main process exited, code=killed, status=9/KILL
Jun 03 18:46:25 ns rndc[28028]: rndc: connect failed: 127.0.0.1#953: connection refused
Jun 03 18:46:25 ns systemd[1]: bind9.service: control process exited, code=exited status=1
Jun 03 18:46:25 ns systemd[1]: Unit bind9.service entered failed state.
Jun 03 18:46:25 ns systemd[1]: bind9.service holdoff time over, scheduling restart.
Jun 03 18:46:25 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Started BIND Domain Name Server.

पहली पंक्ति इंगित करती है कि प्रक्रिया मर गई क्योंकि यह मारा गया था।

systemd-journald भी syslog के लिए सभी लॉग संदेश अग्रेषित करता है, इसलिए आपको इन संदेशों को भी ढूंढना चाहिए /var/log/syslog

Systemd और systemd-journald के पास कॉन्फ़िगरेशन में एक डिफ़ॉल्ट संकलित है जिसे /etc/systemd/system.confऔर में बदला जा सकता है /etc/systemd/journald.conf

यह जानना उपयोगी हो सकता है कि प्रति डिफ़ॉल्ट, systemd-journald लॉग को नीचे रखता है /run, जो कि है tmpfs, और इसलिए रिबूट के बाद गायब हो जाता है। इसका मतलब यह है कि अंतिम बूट से पुराने लॉग संदेश प्राप्त करने के लिए, आपको syslog फ़ाइलों को देखना होगा। इस मामले में जर्नलक्ट आपको पिछले बूट से पुराने लॉग नहीं देगा। इसे /etc/systemd/journald.confसेटिंग में बदला जा सकता है Storage=persistent

यह कौन से दस्तावेज़ हैं यह मैनुअल पृष्ठ हैं:

man 8 systemd-journald
man 5 journald.conf
man 5 systemd-system.conf
man 5 systemd-user.conf

यह भी ध्यान दें कि किसी सेवा के लिए सिस्टमड द्वारा स्वचालित रूप से पुनः आरंभ करने के लिए, इसे .serviceफ़ाइल में कॉन्फ़िगर किया जाना चाहिए । से man 5 systemd.service:

   Restart=
       Configures whether the service shall be
       restarted when the service process exits, is
       killed, or a timeout is reached. The service
       process may be the main service process, but it
       may also be one of the processes specified with
       ExecStartPre=, ExecStartPost=, ExecStop=,
       ExecStopPost=, or ExecReload=. When the death
       of the process is a result of systemd operation
       (e.g. service stop or restart), the service
       will not be restarted. Timeouts include missing
       the watchdog "keep-alive ping" deadline and a
       service start, reload, and stop operation
       timeouts.

       Takes one of no, on-success, on-failure,
       on-abnormal, on-watchdog, on-abort, or always.
       If set to no (the default), the service will
       not be restarted.

व्यापक और अच्छी तरह से लिखित पोस्ट के लिए धन्यवाद जो संभवतः अधिकांश उपयोगकर्ताओं के लिए समस्या को हल करता है । दुर्भाग्य से, मेरे मामले में मुझे कोई भी लॉग लाइन दिखाई नहीं देती है systemd, जिसका वर्णन पत्रिका को आउटपुट करते समय किया जाता है, भले ही मैंने पूरे समय रूट के रूप में काम किया हो। /var/log/syslogकुछ भी नहीं दिखाता है। इस तरह से यह 215 है।
मनसब

3

आप अपनी सेवा के शुरू होने या फिर से शुरू होने का अंतिम समय देख सकते हैं। का प्रयोग करें service chatty statusया systemctl status chatty। यहाँ apache2 या httpd सेवा के लिए उदाहरण दिए गए हैं:

# service apache2 status
● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
  Drop-In: /lib/systemd/system/apache2.service.d
       └─forking.conf
   Active: active (running) since ven. 2017-06-02 15:53:01 CEST; 21min ago
  Process: 14773 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 22912 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 14880 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/apache2.service

लाइन Active: active (running) since Wen. 2017-06-02 15:53:01 CEST; 21min agoदिखाती है कि सेवा कैसे चल रही है, लेकिन मुझे नहीं पता कि क्या आप एक 'सूची' की तरह प्रदर्शित कर सकते हैं जो आप देख रहे हैं।

# systemctl status httpd

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-10-11 00:35:58 EEST; 1 weeks 3 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 29728 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 10722 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   Memory: 8.7M

1
serviceएक पुराना अपस्टार्ट कमांड है जो कॉम्पैटिबिलिटी के लिए सिस्टमड के साथ काम करता है। देशी systemdकमान है systemctl status apache2
मार्क स्टोसबर्ग

धन्यवाद। दुर्भाग्य से यह केवल तभी पता चलता है जब सेवा शुरू हुई थी (फिर से) लेकिन क्यों नहीं ; और यह केवल वर्तमान स्थिति को दर्शाता है, अर्थात, अंतिम पुनरारंभ।
मनुहार

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.