【问题标题】:Is it possible to monitor the time on a linux server from a .net app on windows?是否可以从 Windows 上的 .net 应用程序监视 linux 服务器上的时间?
【发布时间】:2009-06-22 12:47:38
【问题描述】:

我想监控几台服务器上的时间。理想情况下,我会在 Windows 机器上运行的应用程序中执行此操作。这可能吗?我可以从哪里开始?我对 Linux 几乎一无所知。

【问题讨论】:

  • 我很确定,一旦您知道给定服务器与 Windows 机器的时间偏移量,两台机器的时间将以相同的速率流逝......
  • SW/OS 保持的时钟和电池支持的硬件时钟主板通常必须在重启/关机时保持时间。
  • 部分问题似乎是我要监控的服务器是虚拟服务器。我们也想弄清楚这一点,但作为备份,我们想远程监控它们。下面的真实服务器看起来很好,这有点奇怪。我会在服务器故障时询问这个问题。

标签: .net linux time


【解决方案1】:

如果您可以在相关机器上安装 NTP(网络时间协议)服务器,则可以通过 NTP 查询时间。 NTP 是一个简单的协议,因此实现客户端相当简单。

  • 有关 NTP 的文档可以在 here. 找到。
  • 可以在here 找到一个 C# NTP 客户端库。
  • 可以在 here 找到 ntpd(标准 NTP 守护程序)的文档。

【讨论】:

  • 如果我错了,请纠正我,但这种方法需要更多的编程,将使用可能在某些防火墙上被阻止的非流行端口 (123),并且与 http 相比,它使用了一个晦涩的协议。我看不出这种方法在功能、实现时间、可用性或灵活性方面比在网络服务器上运行 php 脚本有什么优势。请告诉我,因为我喜欢学习新旧技术。
  • NTP 并不完全晦涩难懂。它用于在几乎所有互联网基础设施中同步时间。 NTP 的优势归结为:根本没有 PHP 脚本,根本没有 Web 服务器(因此需要保护的表面积较小),易于配置(ntpd 具有相当简单的配置文件。)以及为您解析数据的客户端库。但是,最棒的是,NTP 是专门为查询远程服务器的时间而设计的,这正是 OP 想要做的。
  • 作为额外的奖励,您可以使用 ntpd 与 Internet 上的时间源同步,这应该可以抵消您盒子上硬件时钟中存在的任何漂移。
  • nginx-0.8.4.tar.gz 网络服务器的大小为 581 KB。它是最安全的网络服务器,并且功能非常简单,因此没有太多需要保护的区域:您基本上安装它并让它运行。如果禁用未使用的模块,Apache 也会变得非常小。您不应该将网络服务器视为“沉重”的东西。
  • @Wadih - 这没什么好争论的。您提出了一个完美可行的解决方案。 NTP 也是一个完美可行的解决方案。并非一切都是钉子。
【解决方案2】:

如何运行一个简单的网络服务器,如 apache/nginx,并拥有一个 php(或 cgi 或其他)脚本,它可以简单地以您想要的任何格式返回时间。然后您的 .net 应用程序可以简单地查询这些页面以获取信息。例如:

Linux 服务器 1:http://linuxserver1/time.php

Linux 服务器 2:http://linuxserver2/time.php

两台服务器上的php脚本可以是:

<?php
echo date("F j, Y, g:i a");  // Looks like: March 10, 2001, 5:16 pm
// More information on changing the format of the date: http://php.net/date
?>

然后您的 .NET 应用程序将使用 inet 控件通过 HTTP 协议访问这些远程网页。这应该是一种快速、简单且灵活的实施方式。

灵活性:

此解决方案的另一个优点是,您还可以通过制作更多 php 脚本或简单地让您的 php 脚本接受一些参数来监控网络服务器可以找到的几乎所有内容(不仅仅是时间)。例如:

获取时间:http://linuxserver2/index.php?do=time

获取 CPU 使用率:http://linuxserver2/index.php?do=cpu

获取磁盘使用情况:http://linuxserver2/index.php?do=disk

它也很容易调试。只需将浏览器指向脚本位置并查看输出以查看错误。您还可以查看 apache(网络服务器)日志中的错误。

安装:

  1. 使用它在你的 ubuntu 服务器上安装 apache 和 php:

    sudo apt-get install apache2

    sudo apt-get install php5

    sudo apt-get install libapache2-mod-php5

    sudo /etc/init.d/apache2 restart

  2. 在 /var/www/ 目录中创建 time.php 脚本。

  3. 编写可以查询 html 页面的 .net 应用程序。你就完成了。

【讨论】:

    【解决方案3】:

    您应该可以使用SNMP 从 Windows 访问系统时间。

    从我找到的cmetsat this link

    看起来下面的 OID 返回当前日期/时间

    .1.3.6.1.4.1.2021.100.4.0

    样本:

    date;snmpwalk -Cc -On -v2c -c public localhost .1.3.6.1.4.1.2021.100.4.0

    2009 年 5 月 21 日星期四 14:21:47 CDT

    .1.3.6.1.4.1.2021.100.4.0 = 字符串:2009 年 5 月 21 日星期四 14:21:47

    【讨论】:

    【解决方案4】:

    正如 TwistedAphid 所建议的,SNMP 是一个不错的选择。还有:

    这些通常是 Linux 系统上 inetd 包的一部分。

    这是example of a Java RFC 868 client

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多