我应该将用于解析/var/log/.*文件的perl脚本转换为守护程序吗?

时间:2012-09-14 00:55:04

标签: perl logging daemon file-handling

我正在编写一个perl脚本来解析,例如,/var/log/syslog

当日志中出现特定事件时,perl脚本会触发进一步的后续任务。按照这篇文章的建议解析日志:

Command line: monitor log file and add data to database

我相信使用的是管道。

现在我希望这个脚本永远在后台运行。

这对我来说听起来像一个守护进程,以下问题中引用的守护程序看起来很理想:

How can I run a Perl script as a system daemon in linux?

但是从这篇文章中可以看出,守护进程没有打开文件句柄。那么如何监视日志文件的守护进程或成为守护进程的perl脚本呢?

2 个答案:

答案 0 :(得分:2)

这不能回答您的问题,但是另一条需要考虑的途径可能适合您,也可能不适合您:

rsyslog可以在记录某条消息时执行程序

请参阅Filter Conditions以设置触发器,Templates用于格式化传递给脚本的输出,Actions > Shell Execute用于指定可执行文件。

请务必阅读安全隐患,并在外部程序运行时阻止ryslog。但是,如果您的脚本可靠地快速运行,则可能是一种选择。

答案 1 :(得分:2)

听起来你想要的是一个守护进程。在这种情况下,您引用的第二篇文章中给出的建议是最佳做法。但是,您还有其他选项,如daemontools,它可以消除fork的复杂性。

守护进程允许有文件句柄,但是你应该关闭STDIN,STDOUT和STDERRR,因为你不应该真正使用它们anymore。很多这与fork在* nix系统中的工作方式有关。在你的第二个分支后打开管道文件句柄,你不应该有任何问题。