La respuesta seleccionada no funciona bastante bien con varias sesiones y no permite especificar un nombre de archivo de registro personalizado.
Para varias sesiones de pantalla, esta es mi fórmula:
Cree un archivo de configuración para cada proceso:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
Si desea hacerlo "sobre la marcha", puede cambiarlo logfile
automáticamente.
\012
significa "nueva línea", ya que el uso \n
lo imprimirá en el archivo de registro: fuente .
Comience su comando con las banderas "-c" y "-L":
screen -c ./test.conf -dmSL 'Test' ./test.pl
Eso es. Verá "test.log" después de la primera descarga:
...
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 ]
...
Descubrí que "-L" todavía es necesario incluso cuando "iniciar sesión" está en el archivo de configuración.
No pude encontrar una lista de las variables de formato de tiempo (como% m) utilizadas por la pantalla. Si tiene un enlace de esos formatos, publíquelo a continuación.
Extra
En caso de que quiera hacerlo "sobre la marcha", puede usar este script:
#!/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
Para usarlo, guárdelo (screen.sh) y establezca permisos + x:
./screen.sh TEST ./test.pl
... y ejecutará ./test.pl y creará un archivo de registro en /var/log/TEST.log