คำตอบที่เลือกใช้ไม่ได้ผลกับหลายเซสชันและไม่อนุญาตให้ระบุชื่อไฟล์บันทึกที่กำหนดเอง
สำหรับเซสชันหลายหน้าจอนี่คือสูตรของฉัน:
สร้างไฟล์คอนฟิกูเรชันสำหรับแต่ละกระบวนการ:
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