2012-11-16 4 views
8

मैं निम्न स्क्रिप्ट चलेंगे:लॉगजर कमांड का उपयोग करके मैं लिनक्स में किसी विशिष्ट फ़ाइल को कैसे लॉग कर सकता हूं?

#!/bin/bash 
./myprogram 

#get exit code 
exitvalue=$? 

#log exit code value to /var/log/messages 
logger -s "exit code of my program is " $exitvalue 

लेकिन मैं क्योंकि मैं रूट विशेषाधिकारों की जरूरत नहीं है लोग इन /var/log/messages में लिखे जाने की संदेश नहीं करना चाहती। इसके बजाय मैं इसे अपनी होम निर्देशिका में एक फ़ाइल में लिखा जाना चाहता हूं: /home/myuser/mylog

मुझे उपरोक्त logger आदेश कैसे संशोधित करना चाहिए?

उत्तर

3
$ man logger 

लॉगर syslog (3) सिस्टम लॉग मॉड्यूल के लिए एक शेल कमांड इंटरफेस प्रदान करता है।

यदि आप अन्य स्थानों पर चीजों को लॉग करना चाहते हैं तो आपको अपनी syslog कॉन्फ़िगरेशन को बदलना होगा। आप एक निश्चित सुविधा स्थापित कर सकते हैं जिसमें आपके घर निर्देशिका में आउटपुट फ़ाइल है, उदाहरण के लिए। हालांकि, ऐसा करने के लिए आपको रूट होने की आवश्यकता होगी।

8

मुझे नहीं लगता कि आपको इसके लिए logger/syslog शामिल करने की आवश्यकता है (या चाहते हैं)। सीधे शब्दों में साथ स्क्रिप्ट की अंतिम पंक्ति की जगह:

echo "Exit code of my program is $exitvalue" >> /some/file/that/you/can/write/to 
+0

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

+0

@Sz। वे अवलोकन सभी सही हैं। लेकिन, 'syslog' (या' syslog-ng' या 'rsyslog', जो भी उसका वितरण उपयोग कर रहा है) की कॉन्फ़िगरेशन को अनुकूलित करने के अलावा, वह रूट विशेषाधिकार के बिना नहीं कर सकता है, संभवत: आपकी सहायता से कुछ पायथन/जावा/जो भी पुस्तकालय उपलब्ध हैं, आपके द्वारा नियंत्रित फ़ाइल में लॉग प्राप्त करने का एकमात्र तरीका है ... – twalberg

+0

आपके अंक भी सही हैं। :) –

2

आप ताकि संदेश प्रकट होता है logger उपयोग करना चाहते हैं दोनों सिस्टम लॉग में और तुम्हारा के कुछ फ़ाइल में, आप कर सकते हैं

logger -s your message 2> $HOME/somefile 

के बाद से logger को -s विकल्प भी stderr जो 2>

+0

निकास = $ के बारे में कैसे? ? मुझे इसे ऊपर कहां डालना चाहिए? – alwbtc

+0

@ बेसिल स्टैरेनकेविच मैं इस कमांड का उपयोग करता हूं, यह STDOUT पर दिखाता है। लेकिन यह givwn फ़ाइल में सहेजा नहीं था। क्यूं कर ? – devsda

+2

'2> और 1' stderr को stdout पर रीडायरेक्ट करता है। यह तब तक फ़ाइल में नहीं लिखा जाएगा जब तक आप इस फ़ाइल में stdout को रीडायरेक्ट नहीं करते। आप दोनों को '> the_file 2> और 1' के साथ रीडायरेक्ट कर सकते हैं या, यदि आप stdout को सहेजना नहीं चाहते हैं, तो आप '2> the_file' कर सकते हैं। मैं बाद वाले के साथ जवाब संपादित कर दूंगा। –

4

साथ फ़ाइल पर भेज दिया जाएगा पर आउटपुट मुझे लगता है कि अपने बेहतर विकल्प होगा उन मामलों में कमांड के बजाय logger का उपयोग करें जहां आप syslog फ़ाइलों को लिखना नहीं चाहते हैं (और ऐसा करने के लिए निजी नहीं हैं)।

date का उपयोग करने के तरीके के बारे में विवरण के लिए date का उपयोग करने के तरीके के बारे में विवरण के लिए "timestamp before an echo" देखें और इसे किसी फ़ाइल में लिखें।

आप एक पार्टी समारोह है कि निम्नलिखित की तरह दिखता है बनाने आप क्या चाहते हैं पाने के लिए date प्रारूप स्ट्रिंग का समायोजन:,

echo_time() { 
    echo `date +'%b %e %R '` "[email protected]" 
} 

अपने bash स्क्रिप्ट में आप तो प्रयोग करेंगे:

echo_time "Your message here" >> ${LOGFILE} 

जो आपके ${LOGFILE} फ़ाइल में निम्नलिखित डाल देगा:

Mar 11 08:40 your message here 
1

दुर्भाग्य से, आप नहीं कर सकते।

logger कमांड सिस्टम लॉगर के लिए केवल एक पतली अग्रभाग है। इसका मतलब यह है कि जो भी आप इसे खिलाते हैं, वह syslogd पर जाता है, जो तब सभी प्रकार की प्रसंस्करण करता है (जैसे टाइमस्टैम्प, होस्टनाम, प्राथमिकता, टैग इत्यादि जोड़ना) साथ ही विभिन्न आउटलेट्स (विभिन्न फाइलों, सॉकेट, अन्य सर्वरों को जटिल प्रेषण) आदि।)।

यह पुल अनुमति स्तर भी करता है, इसलिए आपके उदाहरण में आप अभी भी syslog या user.log पर लॉग इन कर सकते हैं, उदाहरण के लिए, कोई समस्या नहीं है, भले ही आप उन फ़ाइलों को सीधे संशोधित न करें।

यदि logger सीधे फ़ाइल पर लॉग इन कर सकता है, तो यह एक साधारण गूंज एक-लाइनर के रूप में गूंगा होगा, या syslog द्वारा किए गए कई संदेश प्रोसेसिंग कर्तव्यों को फिर से लागू करना होगा। किसी भी तरह से, यह एक बुरा विचार होगा।

यह मानक होगा कि मानक syslog इंटरफ़ेस के पास संदेश के साथ एक विज्ञापन-आउट आउटलेट पैरामीटर (फ़ाइल नाम की तरह) निर्दिष्ट करने का कोई तरीका था, इसलिए कोई भी सिस्टम को पुन: कॉन्फ़िगर किए बिना कस्टम फ़ाइलों पर लॉग इन कर सकता है (जो सामान्य उपयोगकर्ता वैसे भी करने की अनुमति नहीं है)।

संबंधित मुद्दे

 संबंधित मुद्दे