2014-02-25 24 views
0

我一直在解决这个问题大约一个星期,我无处可去,所以我想伸出一些帮助。在Ubuntu上自动执行后台Perl执行

我有通过命令执行等,通常在

nohup ./script.pl --param arg --param2 arg2 & 

I的方式通常具有这些约10运行同时处理相同类型的不同来源的数据的一个perl脚本(即通过参数指定)。脚本工作正常,我可以在nohup.out中看到所有日志,并通过ps输出监视状态。该脚本还使用sql数据库来跟踪各种任务的状态,因此我可以跟踪某些源的完成情况。

但是,这是工作太多,所以我写了一个包装脚本来自动执行脚本,这是我在哪里遇到了问题。我想要的东西和我的完全一样,但是是自动的。

getwork.pl脚本运行ps并分析输出以找出有多少其他进程正在运行,如果它低于配置的阈值,它将查询数据库以获取最新的源并启动脚本。

的问题是拉开序幕作业运行不正常,有时他们终止没有任何错误消息,有时他们只是挂和闲置,直到我杀了他们。

网络脚本通过sql concatanation查询sql并获取整个执行命令,所以在sql查询中,我正在做类似CONCAT('nohup ./script.pl --arg',param1,'--arg2' ,param2,'&')来获取命令字符串。

我用尽了一切办法让这些拉开序幕,我一直在使用系统()尝试过,但再次,一些工作揭开序幕,有的没有,有时卡住,有时作业启动,然后内死亡分钟。如果我采用了我用来开始工作的确切命令并在bash中运行它,它可以正常工作。

我试图也用管道命令状

open my $ca, "| $command" or die ($!); 
print $ca $command; 
close $ca; 

该工程只是以及一切我已经试过。以前每30分钟通过cron执行的网络脚本,但是由于我需要另外一个shell包装脚本,所以我放弃了这个脚本,所以现在get work脚本中每隔30分钟执行一次函数就会有一个无限的外观。

我也试着执行命令的诸多变化,包括输出重定向到不同的文件,等等......似乎没有什么是一致的。任何帮助将不胜感激,因为我真的坚持在这里......

编辑: 另外,我试图在每个脚本中添加单独的日志记录,它会启动一个新的日志文件与它的PID($ $)。这里也有一些奇怪的地方,所有的日志文件都会被创建,但是其中一些进程会运行并写入文件,其他的只会有一个空文本文件,而有些则只有一个或两个日志条目。有时候这个过程仍然在运行,只是没有做任何事情,有时候它会在日志里没有任何东西。我直接在shell中运行命令总是可以工作的。

在此先感谢

回答