Seçilen yanıt, birden çok oturumda pek iyi çalışmıyor ve özel bir günlük dosyası adı belirtmeye izin vermiyor.
Birden çok ekran oturumu için formülüm şudur:
Her işlem için bir yapılandırma dosyası oluşturun:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
"Anında" yapmak istiyorsanız, logfile
otomatik olarak değiştirebilirsiniz .
\012
"yeni satır" anlamına gelir, çünkü kullanmak \n
onu günlük dosyasına yazdıracaktır: kaynak .
Komutunuzu "-c" ve "-L" bayraklarıyla başlatın:
screen -c ./test.conf -dmSL 'Test' ./test.pl
Bu kadar. İlk yıkamadan sonra "test.log" göreceksiniz:
...
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 ]
...
Yapılandırma dosyasında "oturum aç" olsa bile "-L" nin hala gerekli olduğunu buldum.
Ekran tarafından kullanılan zaman biçimi değişkenlerinin (% m gibi) bir listesini bulamadım. Bu formatların bir bağlantınız varsa, lütfen aşağıya gönderin.
Ekstra
"Anında" yapmak istemeniz durumunda, şu komut dosyasını kullanabilirsiniz:
#!/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
Kullanmak için kaydedin (screen.sh) ve + x izinlerini ayarlayın:
./screen.sh TEST ./test.pl
... ve ./test.pl dosyasını çalıştıracak ve /var/log/TEST.log'da bir günlük dosyası oluşturacaktır.