Câu trả lời được chọn không hoạt động khá tốt với nhiều phiên và không cho phép chỉ định tên tệp nhật ký tùy chỉnh.
Đối với nhiều phiên màn hình, đây là công thức của tôi:
Tạo một tệp cấu hình cho mỗi quy trình:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
Nếu bạn muốn thực hiện "nhanh chóng", bạn có thể thay đổi logfile
tự động.
\012
có nghĩa là "dòng mới", vì sử dụng \n
sẽ in nó trên tệp nhật ký: nguồn .
Bắt đầu lệnh của bạn với các cờ "-c" và "-L":
screen -c ./test.conf -dmSL 'Test' ./test.pl
Đó là nó. Bạn sẽ thấy "test.log" sau lần xả đầu tiên:
...
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 ]
...
Tôi thấy rằng "-L" vẫn được yêu cầu ngay cả khi "đăng nhập" trên tệp cấu hình.
Tôi không thể tìm thấy danh sách các biến định dạng thời gian (như% m) được sử dụng bởi màn hình. Nếu bạn có một liên kết của các định dạng đó, xin vui lòng gửi nó dưới đây.
Thêm
Trong trường hợp bạn muốn thực hiện "một cách nhanh chóng", bạn có thể sử dụng tập lệnh này:
#!/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
Để sử dụng nó, hãy lưu nó (screen.sh) và đặt quyền + x:
./screen.sh TEST ./test.pl
... và sẽ thực thi ./test.pl và tạo tệp nhật ký trong /var/log/TEST.log