प्रत्येक लाइन पर टाइमस्टैम्प के साथ फाइल करने के लिए STDERR और STDOUT को रीडायरेक्ट करें


1

अपने CentOS पर मैं एक php स्क्रिप्ट निष्पादित करने की कोशिश कर रहा हूं जिसमें कुछ फैंसी सामान करने के लिए एक अंतहीन लूप है। इससे कोई फर्क नहीं पड़ता कि एक अंतहीन लूप ज्यादातर मामलों के लिए एक सटीक समाधान नहीं हो सकता है, लेकिन यह मेरे टेस्टकेस के लिए है। यदि इस लूप में कोई त्रुटि होती है, तो त्रुटि आउटपुट फ़ाइल में लिखी जाती है (जैसा कि सब कुछ स्टडआउट से है)। फिलहाल मैं यही करता हूं।

exec php testfile.php >> output.log 2>&1

यह उम्मीद के अनुसार काम करता है, लेकिन मैं जानना चाहता हूं कि जब stdout या stderr फ़ाइल में कुछ लिख रहा है, तो मुझे प्रत्येक पंक्ति पर किसी प्रकार के टाइमस्टैम्प की आवश्यकता है।

मैं पहले से ही की तरह कुछ करने की कोशिश की इस , लेकिन अगर मैं यह कर के रूप में वहाँ उल्लेख किया है, वहाँ बस सब पर कोई निर्गम (मुझे लगता है यह क्योंकि एक साधारण खोल स्क्रिप्ट नहीं होने का है) है।

क्या यह संभव है echoकि टेस्टफाइल से हर को रीडायरेक्ट किया जाए। एफपीआर और स्टडर से आउटपुट में हर त्रुटि। प्रत्येक लाइन पर टाइमस्टैम्प के साथ?

जवाबों:


2

आप प्रत्येक लाइन को एक स्वरूपित डेटाइम स्ट्रिंग के साथ उपसर्ग कर सकते हैं जिसमें gnu awk का उपयोग किया जाता है। हालाँकि बफ़रिंग के कारण कुछ पंक्तियाँ पुन: व्यवस्थित हो सकती हैं या उनमें से अंतिम युगल गायब हो सकते हैं। इससे बचने के लिए, stdbuf का उपयोग करने की सिफारिश की जाती है।

stdbuf -i0 -o0 php testfile.php  2>&1 | gawk '{print strftime("%Y%m%d-%H%M%S"), $0}' >> output.log 

यह काम करने लगता है, अगर testfile.php में कुछ ऐसा ही होता है echo "Test";। लेकिन आउटपुट फ़ाइल के लिए कुछ भी नहीं लिखा है अगर यह echoउल्लेखित अनंत लूप के भीतर है। क्या ऐसा हो सकता है कि इस लूप के कारण और निष्पादन कभी खत्म न हो, कोई आउटपुट नहीं लिखा जाता है?
Dolgsthrasir

कोई आउटपुट नहीं, शायद। मैंने इसे अब अनंत गूंज के साथ जाँच लिया, और अच्छा लग रहा है।
गोम्बाई सांडोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.