0

我有一些 cisco 路由器和一个 expect 脚本,其中包括关闭日志文件并将它们存储在数据库中一段时间​​。

我的问题是没有NTP,其中一些很旧,所以电池没电了,如果重新启动,日期将恢复到石器时代,将它们送回石器时代。

即使我每次(每天)运行脚本时都设置了时钟,但如果路由器立即重新启动,日志将被记录为几年前发生的,它们将被删除。

所以我正在寻找的是将 sh 时钟与系统时间进行比较的巧妙方法,然后计算出差异并将其应用于日志以得出正确的时间。

这有点复杂,但我认为这是 Cisco 以这种格式输出的最可靠的方式:

sh clock
14:43:41.472 UTC Tue Apr 16 2013

它的日志日期采用以下格式:

Jan  7 09:27:14

因此,如果有人想到更好的解决方案,我会全力以赴。我目前正在使用 AWK,但 Perl 或 PHP 或其他任何东西也不错。

4

1 回答 1

2

您可以使用PHP strtotime()解析您的时钟,它会为您完成这项工作。这将返回一个时间戳,对当前时间做同样的事情,区分它们(时间戳只是整数),这是你的延迟。然后,您可以使用PHP date() 函数重建具有良好格式的日期。

例如 :

<?php
$router_clock = "14:43:41.472 UTC Tue Apr 16 2013"; // retrieve it from the router
$a_log = "Jan  7 09:27:14";

$timestamp_router_clock = strtotime($router_clock);

$timestamp_system = time(); // this gives the time of the system where the PHP script runs on

$delay = $timestam_system - $timestamp_router_clock;

$log_corrected = date("M  j s:i:G", strtotime($a_log) + $delay);
?>
于 2013-04-16T15:21:30.170 回答