由于Date :: Manip问题,无法运行logwatch

我试图在下面运行logwatch

[root@machine cron.daily]# ./0logwatch ERROR: Date::Manip unable to determine TimeZone. Execute the following command in a shell prompt: perldoc Date::Manip The section titled TIMEZONES describes valid TimeZones and where they can be defined. 

我的date如下

 root@machine cron.daily]# date Thu Aug 23 06:25:21 GMT 2012 

现在基于各种论坛的细节,我试图通过设置来解决这个问题

 /etc/timezone to “+0800” 

但它没有工作

我的/etc/localtime指向/usr/share/zoneinfo/GMT ,由puppetpipe理

我如何去解决这个问题? 我仍然希望所有的机器都在GMT时区

编辑:
可悲的是,
这两个更改都不起作用:

 [root@machine cron.daily]# cat /etc/TIMEZONE UTC 

广达

 [root@machine cron.daily]# cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export TZ=GMT export PATH [root@machine cron.daily]# source ~/.bash_profile [root@machine cron.daily]# ./0logwatch ERROR: Date::Manip unable to determine TimeZone. Execute the following command in a shell prompt: perldoc Date::Manip The section titled TIMEZONES describes valid TimeZones and where they can be defined. 

您当前的时区是GMT,为什么您将/etc/timezone设置为“+0800”?

perldoc Date::Manip

  The following time zone names are currently understood (and can be used in parsing dates). These are zones defined in RFC 822. Universal: GMT, UT US zones : EST, EDT, CST, CDT, MST, MDT, PST, PDT Military : A to Z (except J) Other : +HHMM or -HHMM ISO 8601 : +HH:MM, +HH, -HH:MM, -HH In addition, the following time zone abbreviations are also accepted. These do not come from a standard, but were included in previous releases of Date::Manip 5.xx and are preserved here for backward compatibility: IDLW -1200 International Date Line West NT -1100 Nome SAT -0400 Chile CLDT -0300 Chile Daylight AT -0200 Azores MEWT +0100 Middle European Winter MEZ +0100 Middle European FWT +0100 French Winter GB +0100 GMT with daylight savings SWT +0100 Swedish Winter MESZ +0200 Middle European Summer FST +0200 French Summer METDST +0200 An alias for MEST used by HP-UX EETDST +0300 An alias for eest used by HP-UX EETEDT +0300 Eastern Europe, USSR Zone 1 BT +0300 Baghdad, USSR Zone 2 IT +0330 Iran ZP4 +0400 USSR Zone 3 ZP5 +0500 USSR Zone 4 IST +0530 Indian Standard ZP6 +0600 USSR Zone 5 AWST +0800 Australian Western Standard ROK +0900 Republic of Korea AEST +1000 Australian Eastern Standard ACDT +1030 Australian Central Daylight CADT +1030 Central Australian Daylight AEDT +1100 Australian Eastern Daylight EADT +1100 Eastern Australian Daylight NZT +1200 New Zealand IDLE +1200 International Date Line East All other time zone abbreviations come from the standards. In many cases, an abbreviation may be used for multiple timezones. For example, NST stands for Newfoundland Standard -0330 and North Sumatra +0630. In these cases, only 1 of the two is available. I have tried to use the most recent definition, and of those (if multiple timezones use the abbreviation), the most commonly used. I don't claim that I'm correct in all cases, but I've done the best I could. The list of abbreviations available is documented in the Date::Manip::DM5abbrevs document in this module, or more fully in the Date::Manip::Zones document of Date::Manip::6.xx. Date::Manip must be able to determine the time zone the user is in. It does this by looking in the following places: $Date::Manip::TZ (set with Date_Init or in Manip.pm) $ENV{TZ} the Unix 'date' command (if available) $main::TZ /etc/TIMEZONE /etc/timezone At least one of these should contain a time zone in one of the supported forms. If none do by default, the TZ variable must be set with Date_Init. The time zone may be in the STD#DST format (in which case both abbreviations must be in the table above) or any of the formats described above. The STD#DST format is NOT available when parsing a date however. The following forms are also available and are treated similar to the STD#DST forms: US/Pacific US/Mountain US/Central US/Eastern Canada/Pacific Canada/Mountain Canada/Central Canada/Eastern 

你正在运行哪个Date::Manip版本?

如果由于某些原因,Perl不会读取/etc/timezone/etc/TIMEZONE ,您可以将此行添加到/root/.bash_profile

 export TZ=GMT 

通过运行source /root/.bash_profile使其立即生效,然后重试。


更新8月30日星期四10:55:54 ICT 2012

尝试在您的logwatch perl脚本中设置时区:

 use Date::Manip; Date_Init("TZ=GMT"); 

其实这工作

 export DATE_MANIP=DM5 

这不是一个修复,这是一个解决方法。 但它应该让你去。

它没有工作的原因是它期待TIMEZONE被大写 。

 echo UTC > /etc/TIMEZONE