लिनक्स init.d / rc.d स्क्रिप्ट से त्रुटि संदेश कैसे खोजें?


28

लिनक्स में, मैंने कुछ स्क्रिप्ट को बूट के दौरान निष्पादित करने के लिए लिखा है और उन्हें स्थापित करने के विभिन्न तरीकों के साथ खेला है। बड़ी स्क्रिप्ट के लिए मैं /etc/init.dउपयुक्त /etc/rc.d/rc?.dरनलेवल्स को डालूँगा और लिंक करूँगा । छोटी स्क्रिप्ट के लिए, मैं इसके लिए अपील करूंगा /etc/rc.d/rc.local। यह प्रक्रिया सुचारू रूप से चल रही है।

अब मैंने अपनी एक स्क्रिप्ट को ट्विक किया है और यह असफल हो रही है। मैं एक समय का निदान कर रहा हूँ क्योंकि मैं त्रुटि उत्पादन पर कब्जा करने के लिए प्रतीत नहीं कर सकता हूँ। मैंने जाँच की है /var/log/messagesऔर बाकी के चारों ओर पोक किया है /var/logलेकिन कुछ भी उपयोग नहीं पा रहा है।

क्या कोई जानता है:

  1. क्या ये त्रुटि संदेश स्वचालित रूप से कहीं कैप्चर किए गए हैं?
  2. यदि नहीं, तो मैं अपने init.d स्क्रिप्ट से stdout / stderr को कैसे कैप्चर कर सकता हूं?

अग्रिम में धन्यवाद।



यदि आप systemd के साथ अधिक आधुनिक वितरण पर जाते हैं, तो यह आपके लिए काम करेगा और प्रत्येक सेवा के संदेश लॉग करने की अनुमति देगा।
Eckes

जवाबों:


17
  1. नहीं - वे STDOUT पर जाते हैं (यदि आप उपयोग करते हैं echo) या STDERR (यदि आप उपयोग करते हैं echo >&2)।

  2. आपकी स्क्रिप्ट को लॉग और / या अपने दम पर syslog लिखना होगा (आपके वितरण में कुछ init.d फ़ंक्शन हो सकते हैं जो वहां मदद कर सकते हैं - अपने प्रश्न में अपना वितरण जोड़ें)।

यदि आप लॉग के लिए जाते हैं तो teeकमांड देखें। यदि आप syslog देखने के लिए जाते हैं logger। आप उन्हें किसी भी तरह से जोड़ सकते हैं जिसे आप चाहते हैं।



6

आप स्क्रीन पर संदेश भेजने के लिए एक समारोह बना सकते हैं और कुछ इस तरह से कर सकते हैं:

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

आप इसे एक अलग फ़ाइल में भी डाल सकते हैं और इसे अपनी स्क्रिप्ट में शामिल कर सकते हैं

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho

धन्यवाद, यह वही है जो मैं देख रहा था। मुझे पता है कि I / O को कैसे रीडायरेक्ट करना है, लेकिन मुझे नहीं पता था कि मैं लकड़हारे को कैसे बुलाऊं।
मैकेमी

क्या [ -r ... ]यह जांचने के लिए एक परीक्षण है कि क्या यह मौजूद है?
मैक्कमाइ

हां, जांच लें कि क्या फाइल पठनीय है।
ott-- १

5

Init स्क्रिप्ट के संदेश आमतौर पर कहीं भी कैप्चर नहीं किए जाते हैं। इस प्रकार, आपको इसे स्वयं करने का एक तरीका लागू करने की आवश्यकता है। एक अच्छा विचार loggerसभी आउटपुट को syslog में भेजने के लिए उपयोग करना है। यह उदाहरण स्टडआउट और stysr को syslog में भेजेगा:

exec 1> >(logger -s -t $(basename $0)) 2>&1

मैंने इसे इस महान लेख में पाया: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/

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