【发布时间】:2015-08-14 15:45:44
【问题描述】:
有一个脚本可以在 linux 服务器(CentOS 6)上同步时间并在日志中写入偏移量。我想在 10 天后将当前日志(ntp.log)复制到旧日志(ntp.log-date),但这不起作用。该脚本继续写入一个文件而不是旋转。它由 cron 每 5 分钟运行一次。我使用python 2.6版。我专门设置了以秒为单位的间隔来检查。我究竟做错了什么?
#!/usr/bin/env python
import ntplib
import logging
from logging.handlers import TimedRotatingFileHandler
from time import ctime
import os
import socket
hostname = socket.gethostname()
logHandler = TimedRotatingFileHandler('/root/ntp/log/ntp.log', when='S', interval=300)
logFormatter = logging.Formatter('%(asctime)s %(message)s', datefmt='%d/%m/%Y %H:%M:%S')
logHandler.setFormatter(logFormatter)
logger = logging.getLogger('MyLogger')
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
c = ntplib.NTPClient()
response = c.request('1.rhel.pool.ntp.org')
logger.info('| %s time offset is | %s' % (hostname, response.offset))
datestr = ctime(response.tx_time)
os.system('date -s "%s"' % datestr)
【问题讨论】:
-
我强烈建议使用
ntpd和logrotate而不是重新发明轮子。ntpd的逻辑比周期性的一次性“同步”要合理得多。 -
关于
logrotate必须看,我不能用ntpd,我需要同步'日志 -
ntpd比“同步”更智能,它使用“内核时间规则”API,旨在真正让你一劳永逸地忘记同步的事情 i> (eecis.udel.edu/~mills/ntp/html/discipline.html#house : "如果保持连续运行,家庭或办公室环境中快速 LAN 上的 NTP 客户端名义上可以在一毫秒内保持同步。") 别担心,只要它对系统时钟。 -
我需要自定义日志记录,因为它在 Web 应用程序中使用
-
顺便说一句,如果您仍然不相信,这是您算法中的缺陷:
response.tx_time(Transmit timestamp) 是接收到的数据包离开服务器的时间。从它离开到date调用stime()之间的时间框架下落不明。
标签: python logging log-rotation