我有一个perl文件( test.pl )。
它将以重复的方式工作。 该文件的目的是发送来自DB的电子邮件
以下是test.pl中的代码
sub send_mail{
$db->connect();
# Some DB operations #
# Send mail #
$db->disconnect();
sleep(5);
send_mail();
}
send_mail();
Iam执行此文件的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中存在同样的问题
有人有想法吗?
答案 0 :(得分:5)
我不是100%确定这是否是问题,但如果你在一个永久执行的进程中避免递归,它可能会有所帮助...这会慢慢增加堆栈的使用,并最终在堆栈大小限制时终止进程达到。
尝试这样的事情:
sub send_mail{
$db->connect();
# Some DB operations #
# Send mail #
$db->disconnect();
}
while (1) {
send_mail();
sleep(5);
}