Linux Ubuntu上的自动后台Perl执行

Linux Ubuntu上的自动后台Perl执行,linux,perl,bash,shell,Linux,Perl,Bash,Shell,我已经对这个问题进行了大约一周的故障排除,但我什么都不知道,所以我想寻求一些帮助 我有一个perl脚本,通过命令执行,比如,通常以 nohup ./script.pl --param arg --param2 arg2 & 我通常会同时运行其中的10个,以处理来自不同来源的相同类型的数据(通过参数指定)。该脚本工作正常,我可以看到nohup.out中所有内容的日志,并通过ps输出监视状态。该脚本还使用sql数据库跟踪各种任务的状态,因此我可以跟踪某些源的完成情况 然而,这是太多的工作

我已经对这个问题进行了大约一周的故障排除,但我什么都不知道,所以我想寻求一些帮助

我有一个perl脚本,通过命令执行,比如,通常以

 nohup ./script.pl --param arg --param2 arg2 &
我通常会同时运行其中的10个,以处理来自不同来源的相同类型的数据(通过参数指定)。该脚本工作正常,我可以看到nohup.out中所有内容的日志,并通过ps输出监视状态。该脚本还使用sql数据库跟踪各种任务的状态,因此我可以跟踪某些源的完成情况

然而,这是太多的工作,所以我写了一个包装脚本来自动执行脚本,这就是我遇到问题的地方。我想要和我现在一样的东西,但是自动的

pl脚本运行ps并解析输出,以了解有多少其他进程正在运行,如果它低于配置的阈值,它将查询数据库中最过期的源并启动脚本

问题是被启动的作业没有正常运行,有时它们在没有任何错误消息的情况下终止,有时它们只是挂起并闲置,直到我杀死它们

getwork脚本查询sql并通过sql concatation获取整个执行命令,因此在sql查询中,我执行类似CONCAT('nohup./script.pl--arg',param1'--arg2',param2',&')的操作来获取命令字符串

我尝试了所有的方法来启动这些程序,我尝试了使用system(),但同样,有些工作启动了,有些没有,有时它会卡住,有时工作启动了,然后在一分钟内就死了。如果我使用启动作业时使用的确切命令,并在bash中运行它,它就可以正常工作

我也试着打开一个管道到命令,比如

open my $ca, "| $command" or die ($!);
print $ca $command;
close $ca;
这和我试过的其他方法一样有效。getwork脚本过去每30分钟通过cron执行一次,但我放弃了它,因为我需要另一个shell包装器脚本,所以现在getwork脚本中有一个无限的外观,它每30分钟执行一个函数

我还尝试了执行命令的许多变体,包括将输出重定向到不同的文件,等等。。。似乎没有什么是一致的。任何帮助都将不胜感激,因为我真的被困在这里了

编辑: 此外,我还尝试在每个脚本中添加单独的日志记录,它将使用PID($$)启动一个新的日志文件。那里也有一些奇怪的地方,所有的日志文件都会被创建,但是一些进程会运行并写入文件,其他进程只会有一个空文本文件,一些进程只会有一个或两个日志条目。有时进程仍在运行,只是什么都不做,而有时它会死掉,日志中没有任何内容。在我看来,直接在shell中运行命令总是有效的


提前感谢

您需要一种工作管理框架


其中最大的一个是Gearman:

谢谢,我会调查的。这里的根本问题是使用perl在后台执行进程。