Выбранный ответ не очень хорошо работает с несколькими сеансами и не позволяет указать собственное имя файла журнала.
Для сеансов с несколькими экранами это моя формула:
Создайте файл конфигурации для каждого процесса:
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
напечатает ее в файле журнала: source .
Начните свою команду с флагов «-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