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