daemonize perl进程

问题描述:

我正在试图将一个perl进程的示例测试daemonize到syslog。daemonize perl进程

1)在perl脚本,它已经登陆到循环日志文件,但我想记录的守护进程的情况下,当事情变日志之前不对得到创建 2)目前我做的 须藤/ usr/sbin目录/ daemonize -u用户-a -e /home/users/me/log/log.log/home/users/me/test

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

所以我尝试登录到系统日志,所以我做

须藤/ usr/sbin目录/守护进程-u用户-a -e的/ dev /标准错误的/ home /用户/我/测试|日志记录器

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

我坚持任何帮助是赞赏

我的测试 副主{ 我的$ I = 0; ($ i = 0; $ i < 10; $ i ++){ print“这是一个测试”。 $ i。 “\ n”; } }

main(@ARG);

注意我也试过2> & 1,但不工作

+3

http://stackoverflow.com/questions/766397/how-can-i-run-a-perl-script-as-a-system-daemon-in-linux - 这里你去.. – 2013-02-16 14:35:56

+0

其他问题我怀疑你在这里(虽然我不确定/ usr/sbin/daemonize是干什么的)是你将输出管道输出到守护进程以外的记录器。我怀疑它可能会关闭标准输出(守护进程时要做的标准事情),此时你已经失去了管道记录器,记录器就会退出。 – rra 2013-03-17 10:44:10

+0

尝试[immortal](https://immortal.run)'immortal -l your-command' – nbari 2017-09-07 19:12:01

你可能会做的更好使用守护::守护进程从CPAN或类似的东西。它允许你自动重定向STDOUT和STDERR。它声称处理你需要的所有setpgrp的东西。

我认为如果将它与使用Sys :: Syslog(也来自CPAN)结合使用,您可以在不依赖/ usr/sbin/daemonize的情况下完成所需的任何操作,并且可以更多地控制什么是实际发生在您的程序中。

您似乎有两个不同的问题:

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

这两个都是直接在Perl代码中直接解决的问题。除了守护进程::守护进程外,还有Proc ::守护进程。我对他们的相对优点没有意见,我刚才使用了Daemon :: Daemonize。任何一个都会让你的程序作为守护进程运行。

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