我有一个 perl 文件 (test.pl)。
它将以循环方式工作。 该文件的目的是从数据库发送电子邮件
下面是test.pl中的代码
sub send_mail{
$db->connect();
# Some DB operations #
# Send mail #
$db->disconnect();
sleep(5);
send_mail();
}
send_mail();
我正在执行这个文件的 5 个实例,如下所示
perl test.pl >> /var/www/html/emailerrorlog/error1.log 2>&1 &
perl test.pl >> /var/www/html/emailerrorlog/error2.log 2>&1 &
perl test.pl >> /var/www/html/emailerrorlog/error3.log 2>&1 &
perl test.pl >> /var/www/html/emailerrorlog/error4.log 2>&1 &
perl test.pl >> /var/www/html/emailerrorlog/error5.log 2>&1 &
如果我执行命令 ps -ef | grep perl | grep -v grep
我可以看到上面提到的 perl 文件的 5 个实例
该文件可以完美运行几天
但几天后,perl 进程将开始一个接一个地消失。
几天后所有进程都会消失。 现在。如果我执行命令 ps -ef | grep perl | grep -v grep ,我看不到任何进程,
我在日志文件中看不到任何错误日志。
那么,perl 进程消失的可能性有多大?
我该如何调试它?
我在哪里可以看到 perl 错误日志?
Centos 和 Red Hat Linux 有同样的问题
有人知道吗?
最佳答案
我不是 100% 确定这是否是问题所在,但如果您避免在永久执行的进程中进行递归,这可能会有所帮助……这会慢慢增加堆栈的使用,并最终在堆栈大小限制为达到。
尝试这样的事情:
sub send_mail{
$db->connect();
# Some DB operations #
# Send mail #
$db->disconnect();
}
while (1) {
send_mail();
sleep(5);
}
关于几天后 Perl 进程消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22166614/