चयनित उत्तर कई सत्रों के साथ अच्छी तरह से काम नहीं करता है और एक कस्टम लॉग फ़ाइल नाम निर्दिष्ट करने की अनुमति नहीं देता है।
कई स्क्रीन सत्रों के लिए, यह मेरा सूत्र है:
प्रत्येक प्रक्रिया के लिए एक विन्यास फाइल बनाएँ:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
यदि आप इसे "फ्लाई पर" करना चाहते हैं, तो आप logfile
स्वचालित रूप से बदल सकते हैं ।
\012
"नई लाइन" का अर्थ है, जैसे कि इसका उपयोग \n
लॉग फाइल पर प्रिंट करेगा: स्रोत ।
"-C" और "-L" झंडे के साथ अपनी कमांड शुरू करें:
screen -c ./test.conf -dmSL 'Test' ./test.pl
बस। पहले फ्लश के बाद आपको "test.log" दिखाई देगा:
...
6 Something is happening...
[ test.pl: 2016-06-01 13:02:53 ]
7 Something else...
[ test.pl: 2016-06-01 13:02:54 ]
8 Nothing here
[ test.pl: 2016-06-01 13:02:55 ]
9 Something is happening...
[ test.pl: 2016-06-01 13:02:56 ]
10 Something else...
[ test.pl: 2016-06-01 13:02:57 ]
11 Nothing here
[ test.pl: 2016-06-01 13:02:58 ]
...
मैंने पाया कि कॉन्फ़िगरेशन फ़ाइल पर "लॉग ऑन" होने पर भी "-L" की आवश्यकता है।
मुझे स्क्रीन द्वारा उपयोग किए जाने वाले समय प्रारूप चर (जैसे% m) की सूची नहीं मिली। यदि आपके पास उन प्रारूपों का लिंक है, तो कृपया इसे पोस्ट करें।
अतिरिक्त
यदि आप इसे "फ्लाई पर" करना चाहते हैं, तो आप इस स्क्रिप्ट का उपयोग कर सकते हैं:
#!/bin/bash
if [[ $2 == "" ]]; then
echo "Usage: $0 name command";
exit 1;
fi
name=$1
command=$2
path="/var/log";
config="logfile ${path}/${name}.log
logfile flush 1
log on
logtstamp after 1
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\"
logtstamp on";
echo "$config" > /tmp/log.conf
screen -c /tmp/log.conf -dmSL "$name" $command
rm /tmp/log.conf
इसका उपयोग करने के लिए, इसे (screen.sh) सहेजें और + x अनुमतियाँ सेट करें:
./screen.sh TEST ./test.pl
... और ./test.pl निष्पादित करेगा / लॉग फ़ाइल को /var/log/TEST.log में बनाएगा