Line # Revision Author
1 8 ahitrov@rambler.ru # Используется для запуска скриптов из crontab
2 # в виде: /some/script > /some/log
3 # Если STDOUT редиректится в файл, то STDERR дублируется в STDOUT.
4 # Таким образом, все выводы в STDOUT и STDERR всегда попадают в log
5 # для анализа. Отключение буферизации должно обеспечивать правильный порядок
6 # сообщений в файле.
7 # При этом warn и die и ошибки runtime уходят на email владельцу cron.
8 # То есть имеет смысл использовать print для всех некритичных сообщений
9 # а warn и die для сообщений, требующих вмешательства и исправления.
10
11 package ErrorTee;
12
13 use strict;
14 use warnings 'all';
15
16
17 # buffering off!
18 select((select(STDERR), $|=1)[0]);
19 select((select(STDOUT), $|=1)[0]);
20
21 # is file-redirected?
22 if (-p STDOUT || -f STDOUT) {
23 $SIG{'__DIE__'} = sub {
24 print STDOUT $_[0] if defined($^S) && $^S==0;
25 };
26
27 $SIG{'__WARN__'} = sub {
28 print STDOUT $_[0] if defined($^S) && $^S==0;
29 warn $_[0];
30 };
31 }
32
33 1;