Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP CLI进程完成后未终止_Php_Process_Command Line Interface - Fatal编程技术网

PHP CLI进程完成后未终止

PHP CLI进程完成后未终止,php,process,command-line-interface,Php,Process,Command Line Interface,我将其保存在一个PHP文件中: echo shell_exec('nohup /usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1 &'); 在testjob.php中,我有: file_put_contents('test.txt',time()); exit; 而且一切都很顺利。但是,如果我转到进程,它在运行后不会终止testjob.php。(必须将此作为答案而不是注释发布,因为stack

我将其保存在一个PHP文件中:

echo shell_exec('nohup /usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1 &');
在testjob.php中,我有:

file_put_contents('test.txt',time()); exit;
而且一切都很顺利。但是,如果我转到进程,它在运行后不会终止testjob.php。

(必须将此作为答案而不是注释发布,因为stackoverflow仍然不允许我发布注释…)

对我有用。我完全按照描述创建了testjob.php,并使用给定的行创建了另一个文件test.php(除了我删除了CRON_目录,因为testjob.php与我位于同一个目录中)

为了确保测量正确,我在testjob.php的顶部添加了“sleep(5)”,在另一个窗口中我有:

watch 'ps a |grep php'
跑步。发生这种情况:

  • 我运行test.php
  • test.php立即退出,但testjob.php出现在我的列表中
  • 5秒后它消失了
  • 我想知道shell是否重要,所以我从bash切换到sh。同样的结果

    我还想知道这是否是因为您的外部脚本运行时间很长。所以我把“sleep(10)”放在test.php的底部。相同的结果(即testjob.php在5秒后完成,test.php在5秒后完成)


    因此,毫无帮助的是,您的问题不是您发布的代码。

    您正在执行PHP,并将该执行作为后台任务。这意味着它将在后台运行,直到完成
    shell_exec
    不会终止该进程或类似的进程

    您可能需要设置执行限制。你也看到了


    因此,如果您想知道为什么php进程没有终止,您需要调试脚本。如果这太复杂,并且您无法找出脚本运行那么长的原因,您可能只想在一段时间后(例如1分钟)终止该过程。

    从命令末尾删除
    &
    。此符号表示
    nohup
    继续在后台运行,因此
    shell_exec
    正在等待任务完成。。。等待。。。等待。。。直到时代的尽头;)

    我甚至不明白你为什么要用
    nohup
    执行这个命令

    echo shell_exec('/usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1');
    

    应该足够了。

    当您在没有nohup的情况下从命令行运行它时,它会这样做吗?尝试在顶部添加:ini_set(“log_errors”,“1”);ini_集(“错误日志”,“错误..txt”)--和-f是可选的,为什么您希望脚本终止得那么快?也许是由于脚本的设计,它有时会运行得更长一些
    nohup
    会注意,即使shell已经关闭,它也不会停止。看起来你真的打算在这里不终止它,只要它运行。我昨天也做了同样的事情,它对我也起了作用。但我认为这值得一个答案。我假设脚本OP调用中存在一个小故障,这使得它不会时不时地结束。我希望它在后台运行,但我希望它在运行完成后结束。我手头还有测试脚本,所以我只是尝试删除nohup和final&。现在test.php一直挂起,直到testjob.php完成。仅仅把nohup放回去也没用。只要输入&就可以了(testjob.php独立于test.php)。结论:需要最终的安培数;nohup可能是可选的,但没有害处。然后执行以下操作:执行
    shell_exec
    退出
    模具()就在它后面。脚本仍应运行。您可以通过命令
    ps auwx | grep php
    检查它是否正在运行。或者,您可以检查它是否按计划影响了您的数据。