![]() |
1
5
Rob,几点: 1)最好将配置阅读器抽象为API,而不是直接从Perl哈希读取。这样,对该API的任何调用都可以依次决定配置需要做什么(例如,计时器是否已启动)?配置文件时间戳是否更改?). 与往常一样,这还有一个额外的好处,即允许您稍后重新设计配置(perl has=>xml=>database),而无需更改任何软件。 2)鉴于它是一个服务器,我还建议通过一个特殊的请求类型提供按需配置重新加载功能。这允许您通过向服务器发送命令来强制重新加载配置(例如,更新配置文件后),而不是使其反弹。 顺便说一句,如果您遵循1,那么2非常容易完成,因为“reload config”处理程序只需要重置“config needs to be reloaded on the next config api call”标志。 3)如果您坚持将配置作为没有API的散列(例如,出于性能原因消除API子例程调用,这是合理的,但不太可能有帮助),那么您需要将配置放入类中的静态变量中,并让该类提供“set new config”方法。然后,服务器将设置一个计时器,在计时器调用时(或在从2接收到“reload config”命令时)将检查时间戳和/或配置文件的检查和是否与上次调用和重新加载时不同。 |
![]() |
2
3
如果您使用的是最新版本的Linux,那么总会有一种不完善的方法。这意味着您可以在配置写入磁盘后立即重新加载它。退房 Linux-Inotify . 也有 FAM 其他平台。 |
![]() |
3
2
在Unix类型的机器上解决这类问题的传统方法是,服务器程序在收到 signal . 例如, Apache documentation 表示这三个信号对服务器有特殊意义:term告诉服务器关闭,hup强制立即重新启动,usr1请求优雅地重新加载配置文件。如果您在一个支持信号的环境中工作,这种功能可以相对直接地构建到您的程序中。 |
![]() |
4
1
始终可以选择将配置移动到数据库中,并使用DBI Plus数据库触发器使其成为事件驱动的,而不是轮询的。 |
![]() |
5
0
@dvk,噢,用你的观点说得很好1)我没有想过在配置上面添加额外的抽象层。我想把它保留为原始Perl散列的好处是不需要转换层。我会考虑一下其中的权衡。 关于第2点),我们发现Perl中的一些信号处理的薄片使得它不能很好地进行hup,因此我们在站点范围内正式否决了Perl信号hup。 但我真的很喜欢你的想法,一个特殊的查找命令,将迫使重新加载!如果你不介意的话,我就用这个。也许可以使用“GET 127.0.0.1”,因为它可能不会从外部通过!注意:我们最新版本的地理协议是基于HTTP的,因此我们可以从浏览器轻松查询服务。
谢谢!
|
![]() |
Radhika Kandasamy · 在文本文件中的行首添加一个单词 7 年前 |
![]() |
charpi · 安装旧版本的Emacs(19.34) 7 年前 |
![]() |
Van Peer · 查询tar和。快照目录 7 年前 |
![]() |
kvway · 最后在awk中运行[Solaris] 8 年前 |
![]() |
BKF · Unix:如何从磁带中恢复损坏的tar文件 9 年前 |
![]() |
Bad_Coder · 如何在solaris上获得完整的启动时间 9 年前 |