【问题标题】:daemonize perl process守护perl进程
【发布时间】:2011-02-27 02:05:21
【问题描述】:

我正在尝试将 perl 进程示例测试守护到 syslog。

1) 在 perl 脚本中,它已经登录到旋转日志文件,但我想记录守护进程,以防在创建日志之前出现问题 2)目前我正在做 sudo /usr/sbin/daemonize -u 用户 -a -e /home/users/me/log/log.log /home/users/me/test

它已经工作了,但问题是日志文件会变大,处理日志文件的唯一方法是停止守护进程。

所以我正在尝试登录系统日志,所以我正在这样做

sudo /usr/sbin/daemonize -u 用户 -a -e /dev/stderr /home/users/me/test |记录器

这会在写入标准错误时出现权限错误。如果我不以用户身份运行,它会正常记录日志,但出于安全原因,我必须以用户身份运行我的守护进程。

我被困住了,感谢您的帮助

我的测试 子主{ 我的 $i = 0; for($i=0;$i

main(@ARG);

注意我也尝试了 2>&1 但不起作用

【问题讨论】:

  • 我怀疑您在这里遇到的另一个问题(尽管我不确定 /usr/sbin/daemonize 到底是做什么的)是您将输出通过管道传输到守护程序之外的记录器。我怀疑它可能会关闭标准输出(守护进程时要做的标准事情),此时你已经失去了到记录器的管道,记录器将退出。
  • 试试immortalimmortal -l your-command

标签: perl syslog


【解决方案1】:

您可能会更好地使用来自 CPAN 的 Daemon::Daemonize 或类似的东西。它允许您自动重定向 STDOUT 和 STDERR。它声称可以处理您需要的所有 setpgrp 东西。

我认为,如果您将其与使用 Sys::Syslog(也来自 CPAN)结合使用,您可以完成您需要做的所有事情,而无需依赖 /usr/sbin/daemonize 并对实际内容进行更多控制发生在您的程序中。

您似乎有两个明显的问题:

1) 守护程序。 2) 记录到系统日志。

这两个问题最好直接在您的 Perl 代码中解决。除了 Daemon::Daemonize 还有 Proc::Daemonize。我对它们的相对优点没有意见,我过去只是使用过 Daemon::Daemonize。任何一个都可以让你的程序作为守护进程运行。

对于写入 syslog,使用 Sys::Sylog 将为您完成繁重的工作。这不是一个简单的重定向,但它可以让您发送日志消息而不用担心日志轮换。

【讨论】: