使用系统命令并在后台运行的php脚本——它是否仍按顺序运行?

使用系统命令并在后台运行的php脚本——它是否仍按顺序运行?,php,Php,我有以下脚本update_pos_databases.php(简化版) 当我调用它时,我会执行以下操作: nohup php update_pos_databases.php > results.txt 2>&1 </dev/null & nohup php update\u pos\u databases.php>results.txt 2>&1只是一个概念证明 <?php $commands = array('uptime', 'uptime'

我有以下脚本update_pos_databases.php(简化版)


当我调用它时,我会执行以下操作:

nohup php update_pos_databases.php > results.txt 2>&1 </dev/null &

nohup php update\u pos\u databases.php>results.txt 2>&1只是一个概念证明

<?php

$commands = array('uptime', 'uptime', 'jhsddf', 'uptime');
foreach ($commands as $exe) {
  echo "Begin $exe\n";
  system("$exe");
  sleep(rand(1,5));
  echo "End $exe\n";
}

?>
拥有不同命令的唯一选项是在每个系统进程中调用nohup(在你的例子中是nohup mysql)。它们将具有由脚本定义的开始顺序,但您将无法确保完成顺序,因为它们将同时执行,即使在终端断开连接(例如注销)之后,nohup也将执行,并且
&
将把该过程置于后台。是的,每个
系统
在迭代到下一个循环之前将一直运行到完成:php不知道它正在运行

以下是显示这些行为的简化示例:

$ cat demo.php
<?php foreach (range(1,10) as $i) system("/bin/date && /bin/sleep $i");

# run it without nohup, then simulate a logout
$ php demo.php > results.txt 2>&1 </dev/null &
$ kill -HUP $!
$ cat results.txt
Tue Sep  8 12:27:20 EDT 2015
Tue Sep  8 12:27:21 EDT 2015
[1]+  Hangup                  php demo.php > results.txt 2>&1 < /dev/null    

$ # do it again, this time with nohup
$ nohup php demo.php > results.txt 2>&1 </dev/null &
$ kill -HUP $!  # no effect
$ cat results.txt
Tue Sep  8 12:08:56 EDT 2015
Tue Sep  8 12:28:28 EDT 2015
Tue Sep  8 12:28:29 EDT 2015
Tue Sep  8 12:28:31 EDT 2015
Tue Sep  8 12:28:34 EDT 2015
Tue Sep  8 12:28:38 EDT 2015
$cat demo.php

如果mysql命令有错误,我会错过这个吗?还是所有mysql都被定向到标准输出?看起来我在标准的奥塔赫仍然能喝到,对不起,我有点宿醉,你说得对。:)如果你想一个接一个地运行它们,那么就不要试图把它传递到某个地方。在不将其置于后台的情况下运行它,这样主脚本实际上将等待进程完成。而且-不-一旦它被放到后台,就不能保证它会“按顺序运行”-只能保证“开始时间”会遵循您的循环逻辑。但是相应的脚本将如何以及何时完成-是另一个故事Nohup只将php进程放在后台,不影响系统进程的顺序,它们将按照循环确定的顺序执行,并等待完成。另外,您不需要&要将进程放在命令行的后台,nohup已经做到了。无论如何,我对系统内部的重定向有疑问。谢谢你的回答。我不想要不同的订单;我只是想确保nohup不会导致php系统命令的顺序问题。
Begin uptime
 17:59:43 up 127 days,  7:41,  1 user,  load average: 0.24, 0.20, 0.18
End uptime
Begin uptime
 17:59:44 up 127 days,  7:41,  1 user,  load average: 0.24, 0.20, 0.18
End uptime
Begin jhsddf
sh: jhsddf: not found
End jhsddf
Begin uptime
 17:59:53 up 127 days,  7:41,  1 user,  load average: 0.20, 0.19, 0.18
End uptime
$ cat demo.php
<?php foreach (range(1,10) as $i) system("/bin/date && /bin/sleep $i");

# run it without nohup, then simulate a logout
$ php demo.php > results.txt 2>&1 </dev/null &
$ kill -HUP $!
$ cat results.txt
Tue Sep  8 12:27:20 EDT 2015
Tue Sep  8 12:27:21 EDT 2015
[1]+  Hangup                  php demo.php > results.txt 2>&1 < /dev/null    

$ # do it again, this time with nohup
$ nohup php demo.php > results.txt 2>&1 </dev/null &
$ kill -HUP $!  # no effect
$ cat results.txt
Tue Sep  8 12:08:56 EDT 2015
Tue Sep  8 12:28:28 EDT 2015
Tue Sep  8 12:28:29 EDT 2015
Tue Sep  8 12:28:31 EDT 2015
Tue Sep  8 12:28:34 EDT 2015
Tue Sep  8 12:28:38 EDT 2015