情況:cron作業已經在凌晨1點運行了大約5年。創建主日誌和數百個子日誌(從遠程位置提取數據)。Log4perl - 正在工作 - 現在長度爲零的文件
從12/31開始:而不是通常的200Kb文件,他們現在是0Kb。作業仍然按原樣工作,但沒有生成日誌數據。所有的子日誌都被創建,但也是0Kb。
如果通過交互式shell運行作業,它可以正常工作。
我已經看了:在cron日誌
- 沒有錯誤
- 在系統日誌中沒有錯誤
- 已經比較了cron和交互shell輸出 'ENV' - 不存在
- YUM或CPAN沒有更新
- 文件系統有足夠的空間
我已將測試縮減爲約10行代碼 - 開始,安裝日誌,寫入日誌以及輸出並退出。在任何一種情況下,Stdout都給了我所期望的(管道標準輸出和標準錯誤文件)。日誌文件只有通過交互式shell運行時纔有內容。
我錯過了什麼?
系統運行RHEL 5.x的服務器(x64)的
編輯:這是日誌文件的appender是如何設置的:
sub initLogging
{
my $self = shift;
my $logFileInfo = shift;
my $dataDir = $self->{ 'localDir' };
my $logger = get_logger("Home" . $self->{ 'homeId' });
my $appender = Log::Log4perl::Appender->new(
"Log::Log4perl::Appender::File",
filename => "${dataDir}/log/$logFileInfo.log");
my $layout = Log::Log4perl::Layout::PatternLayout->new("[%d{yyyy.MMM.dd HH:mm:ss Z}] %p %c - %m%n");
$appender->layout($layout);
$appender->threshold($INFO);
$logger->add_appender($appender);
my $appender0 = Log::Log4perl::Appender->new("Log::Log4perl::Appender::Screen",
name => 'screenlog',
stderr => 0);
$appender0->layout($layout);
$appender0->threshold($FATAL);
$logger->add_appender($appender0);
$self->{ 'logger' } = $logger;
}
調用程序:
#!/usr/bin/perl -w
use pull_common;
use DBI;
use strict;
print "start\n";
# build the main log file name
my @dt = localtime();
my $logFile = sprintf("justtesting-%04d%02d%02d-%02d%02d%02d", $dt[5] + 1900, $dt[4] + 1, $dt[3], $dt[2], $dt[1], $dt[0]);
my $common = new pull_common();
$common->{ 'homeId' } = 0;
$common->initLogging($logFile);
my $logger = $common->{ 'logger' };
$logger->info("this is a test. This is only a test. Remain calm.");
print "end\n";
如果您顯示生成日誌的代碼,它可能會有所幫助。 – ThisSuitIsBlackNot
對不起,應該已經更清楚了......你能展示你用來測試的10行代碼嗎?這會更有幫助,因爲我認爲這是一個完整的程序,可以重現問題,而不僅僅是一個孤立的子程序,除了您可以運行的任何人都無法運行。 – ThisSuitIsBlackNot
我所有的測試代碼都會調用這個函數來設置日誌文件,然後使用' - > error(「some output here」)'函數。它通過shell而不是cron工作。 – ethrbunny