【发布时间】:2015-04-18 18:27:59
【问题描述】:
我有以下脚本update_pos_databases.php(简化版)
<?php
ini_set('display_errors', 1);
set_time_limit(0);
$db_host = 'localhost';
$db_user = 'root';
$db_password = 'PASSWORD';
$databases = array('example');
$db_host = escapeshellarg($db_host);
$db_user = escapeshellarg($db_user);
$db_password = escapeshellarg($db_password);
foreach($databases as $database)
{
echo "Running queries on $database\n***********************************\n";
system("mysql --host=$db_host --user=$db_user --password=$db_password -v -v -v $database < ../update.sql");
echo "\n\n";
}
?>
当我调用它时,我会执行以下操作:
nohup php update_pos_databases.php > results.txt 2>&1 </dev/null &
由于我在 php 脚本中使用系统命令,如果系统命令之一由于某种原因失败,使用上述命令是否会导致任何问题?我认为我正在做的很好;但在部署此更改之前,我想知道在使用 nohup 调用的脚本中使用 system() 的任何危险。 (我不希望脚本因为某种随机原因而死掉)。
上面脚本中的单个系统命令也会被阻塞吗?我想确保它们一个接一个地运行,而不是同时运行。
【问题讨论】:
-
如果mysql命令出错我会错过这个吗?还是所有的mysql都被定向到标准输出?看起来我仍然可以标准输出
-
啊,对不起,我有点宿醉,你说得对。 :)
-
如果你想一个一个地运行它们——那么不要试图把它传递给某个地方。运行它而不放置到后台,因此主脚本实际上会等到该过程完成。而且-不-一旦将其置于后台,就不能保证它会“按顺序运行”-只能保证“开始时间”将遵循您的循环逻辑。但是相应的脚本将如何以及何时完成 - 是另一回事
-
nohup 只将php进程置于后台,不影响系统进程的顺序,它们会按照循环确定的顺序执行,等待完成。此外,您不需要 & 将进程置于命令行的后台,nohup 已经做到了。反正我对系统内部的
标签: php