Linux

由於 Date::Manip 問題,無法執行 logwatch

  • September 1, 2012

我嘗試在以下位置執行 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.

我的日期如下

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

現在基於各種論壇中的詳細資訊,我嘗試通過設置來解決此問題

/etc/timezone to “+0800”

但它沒有用

我的/etc/localtime觀點/usr/share/zoneinfo/GMT 和由puppet管理

我該如何解決這個問題?我仍然希望我的所有機器都處於 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.

實際上這有效

export DATE_MANIP=DM5

您目前的時區是 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/timezoneor /etc/TIMEZONE,您可以將此行添加到/root/.bash_profile

export TZ=GMT

通過執行使其立即生效,source /root/.bash_profile然後重試。


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

嘗試在 logwatch perl 腳本中設置時區:

use Date::Manip;

Date_Init("TZ=GMT");

引用自:https://serverfault.com/questions/420313