【发布时间】:2012-10-22 10:17:18
【问题描述】:
请注意,我知道这可能不是最好或最优化的方法,但我以前在某个地方遇到过这个问题,我很好奇答案。
我有一个 perl 脚本,它从一个运行并偶尔死掉的 init 中调用。为了快速调试,我整理了一个快速包装 perl 脚本,该脚本基本上由
#$path set from library call.
while(1){
system("$path/command.pl " . join(" ",@ARGV) . " >>/var/log/outlog 2>&1");
sleep 30; #Added this one later. See below...
}
从命令行启动它,它运行良好且符合预期。 command.pl 被调用,脚本基本上停在那里,直到子进程死亡然后再次运行。
但是,当从启动脚本(实际上是通过 start-stop-daemon)调用时,系统命令会立即返回,让 command.pl 继续运行。然后它又转了一圈。一次又一次。 (如果没有 sleep 命令,这并不好玩。)。 ps 显示(许多)command.pl 的父级为 1,而不是包装脚本的 id(当我从命令行运行时)。
有人知道发生了什么吗?
【问题讨论】:
-
看起来 init 脚本中的某些内容将 & 作为 @ARGV 的一部分传递。这似乎是初始化脚本中的错误,可能是剪切和粘贴错误。接下来我需要弄清楚修复这个是否会破坏其他任何东西(因为 command.pl 本身也做了类似的事情)。
标签: perl system infinite-loop init.d