1

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

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

命令行:监控日志文件并将数据添加到数据库

我相信这是使用管道。

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

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

如何在 linux 中将 Perl 脚本作为系统守护进程运行?

但是从这篇文章中,很明显守护进程没有打开的文件句柄。那么我怎样才能拥有一个守护进程,或者一个成为守护进程的 perl 脚本来监视日志文件呢?

4

2 回答 2

2

这并不能回答您的问题,但可以考虑另一种可能适合或不适合您的途径:

rsyslog可以在记录特定消息时执行程序

请参阅用于设置触发器的过滤条件、用于格式化传递给脚本的输出的模板以及用于指定可执行文件的操作 > 外壳执行。

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

于 2012-09-15T02:59:48.630 回答
2

听起来你想要的是一个守护进程。在这种情况下,您参考的第二篇文章中给出的建议是最佳实践。但是,您确实有其他选项,例如 daemontools,它消除了 fork 的复杂性。

允许守护进程拥有文件句柄,但您应该关闭 STDIN、STDOUT 和 STDERRR,因为您不应该再使用它们。这在很大程度上与 *nix 系统中 fork 的工作方式有关。只需在第二次分叉后打开管道文件句柄,就不会出现任何问题。

于 2012-09-16T00:04:09.223 回答