सबसे पहले, यदि स्क्रिप्ट को सिस्टम डेमॉन द्वारा चलाया जाता है और यह डेम रूट विशेषाधिकारों के साथ चल रहा है, तो आपको उपयोग करने की आवश्यकता नहीं है sudo
। इसमें init
(और systemd
) शामिल हैं, जिसमें शामिल हैं rc.local
। यदि वह डेमॉन रूट विशेषाधिकारों के साथ नहीं चल रहा है, तब sudo
तक काम नहीं करेगा जब तक /etc/sudoers
कि इस तरह के (और पासवर्ड के बिना) को अनुमति देने के लिए कॉन्फ़िगर नहीं किया जाता है। रास्पियन उपयोगकर्ता इससे भ्रमित हो सकते हैं क्योंकि pi
उपयोगकर्ता को डिफ़ॉल्ट रूप से कुछ भी करने की अनुमति है (और यदि आप देखते हैं तो आप /etc/sudoers
देखेंगे कि यह कैसे पूरा होता है)।
इसके बाद, आप किसी भी bash
स्क्रिप्ट से या किसी भी स्क्रिप्ट के अंदर कमांड के सेट से आउटपुट कैप्चर कर सकते हैं , उन्हें एक सब-सब्मिट में निष्पादित करके: 1
(
/bin/foo on 3
sudo bar a
) &> /var/log/myTestLog.txt
()
इंगित करता है एक subshell । इसके अंदर किसी भी चीज से सभी आउटपुट को एक /var/log/myTestLog.txt
फाइल में रीडायरेक्ट किया जा रहा है । कुछ नोट:
&>
एक है bashism , इसलिए यदि स्क्रिप्ट एक के माध्यम से क्रियान्वित किया जाता है मामला पहली पंक्ति पर, यह होना चाहिए #!/bin/bash
, न कि केवल /bin/sh
। "बशीज़" केवल bash
शेल में काम करते हैं ।
इसमें वह शामिल है /etc/rc.local
, जो डिफ़ॉल्ट रूप से उपयोग होता है /bin/sh
(यानी, हां, आप इसे सुरक्षित रूप से बदल सकते हैं /bin/bash
)।
/var/log
लिखने के लिए रूट विशेषाधिकारों की आवश्यकता होती है। यदि प्रक्रिया में ऐसा नहीं है, तो एक निर्देशिका का उपयोग करें या बनाएं जिसे आप जानते हैं कि यह कर सकता है। जब संदेह में, यदि आप सिस्टम को बंद या रिबूट किए बिना इसका परीक्षण कर सकते हैं, तो उपयोग करें /tmp
, जो कि विश्व लेखन योग्य है (अर्थात, किसी के द्वारा)। हालाँकि, /tmp
बूट्स के पार नहीं रहता है। यह एक छोटा, रैम आधारित विभाजन भी है, इसलिए इसके लिए डेटा के gigs नहीं लिखें। यह आपका एसडी कार्ड नहीं है [वास्तव में रास्पबियन के वर्तमान संस्करणों पर, लेकिन व्यवहार में इस पर भरोसा नहीं है] ।
&>
में कुछ भी अधिलेखित कर देगा myTestLog.txt
। यदि इसके बजाय आप एक मौजूदा लॉग में जोड़ना चाहते हैं, जो डीबगिंग उद्देश्यों के लिए एक अच्छा विचार हो सकता है, तो उपयोग करें &>>
। फिर आप इस तरह इस उपखंड की शुरुआत में एक कमांड जोड़ सकते हैं:
echo Starting $(date)
प्रत्येक रन से जानकारी को अलग करने के लिए। यदि आप सुनिश्चित नहीं हैं कि यह क्या करता है, तो कमांड लाइन पर प्रयास करें।
यह अंतिम बिंदु कुछ ऐसी चीज़ों का एक अच्छा चित्रण है जो आप उन कमांडों के संबंध में कर सकते हैं जो कुछ भी आउटपुट नहीं करते हैं - लेकिन उनमें से अधिकांश -v
"वर्बोज़" के लिए , उदाहरण के लिए , यदि आप शामिल हैं, तो करते हैं । कुछ कमांड के लिए खबरदार का -v
अर्थ "प्रिंट संस्करण की जानकारी" है। यह सुनिश्चित करने के लिए कि यह कैसे काम करेगा और कैसे काम करता है (कुछ कमांड भी अलग स्विच का उपयोग करता है ) के लिए मैन पेज में एक नज़र डालें -v
।
कन्वेंशन द्वारा, कमांड भी पूर्ण होने पर 0 का मान लौटाते हैं। इसे कभी-कभी "निकास स्थिति" कहा जाता है और आप इसे सामान्य रूप से नहीं देखते हैं, लेकिन शेल आपको दिखाएगा echo $?
। प्रयत्न
ls /
echo $?
ls /nonexistantdir
echo $?
आपको 0 और 2. मिलेंगे। यदि आप ls
"एक्जिट स्टेटस" के तहत मैन पेज देखते हैं, तो आप बल्कि अनिर्णायक, क्रिप्टिक देखेंगे:
2 if serious trouble (e.g., cannot access command-line argument).
जो कुछ भी नहीं से बेहतर हो सकता है या नहीं, लेकिन आप वहां जाते हैं।
बहुत कम से कम, यह इंगित करता है कि कमांड किसी कारण से विफल हो गया है। बाहर निकलने की स्थिति भी आपको इस तरह की चीजें करने की अनुमति देती है:
/bin/foo && sudo bar
&&
इस मामले में अर्थ है "यदि पहले आदेश सफल होता है", पहले आदेश मानते हुए 0 लौटने का सम्मेलन का उपयोग करता है (जिसके कारण वे आम तौर पर करते हैं)। अगर /bin/foo
काम नहीं करता है, नहीं मिल सकता है, आदि, तो sudo bar
कभी नहीं होगा।
लॉगिंग संदेशों और सशर्त निष्पादन ( &&
) के संयोजन का उपयोग करके आपको समस्या का पता लगाने के लिए बहुत करीब आना चाहिए, या कम से कम जानकारी प्राप्त करना चाहिए जो समस्या को हल करने में आपकी सहायता के लिए दूसरों के लिए उपयोगी हो सकती है। इसके बिना, सबसे अधिक किसी और को अक्सर अनुमान लगाया जा सकता है।
1. आप उपयोग करके अंदर से पूरी स्क्रिप्ट के लिए एक ही आउटपुट रिडायरेक्शन को पूरा कर सकते हैं:
exec &> /var/log/myTestLog.txt
शीर्ष पर (या कहीं भी, और यह बाद में सब कुछ पर लागू होगा)।
U&L
। मैं शीर्षक को गलत बताता हूं और "डिबगिंग के लिए एक सिस्टम स्क्रिप्ट के आउटपुट को लॉग इन करने" का सुझाव दूंगा, इससे उद्देश्य स्पष्ट हो जाएगा। जब मैं इनfoo
bar
उदाहरणों को पढ़ता हूं, तो मेरा दिमाग भी जम जाता है , मैं ऐसी चीज पसंद करता हूं, जो वास्तविक दुनिया की तरह दिखती है। मैं किसी भी पोस्ट को संपादित करने के लिए अनिच्छुक हूं, इसलिए आप इसे छोड़ देंगे अगर आपको लगता है कि इसमें सुधार किया जा सकता है।