PHP фон из другого PHP-скрипта

У меня есть обычная консольная (. * Exe) программа, которая принимает и выводит команды, используя стандартные I/O, Я написал PHP-скрипт, который обрабатывает программу (с open_proc так далее):

<?php
/*
scriptname: somemyscript.php
*/

$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array('pipe', 'a')
);

$cwd = NULL;
$env = NULL;

$process = proc_open('someconsoleprogram.exe', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {

stream_set_blocking($pipes[0], FALSE);
stream_set_blocking($pipes[1], FALSE);

while (true) {
$changed = $write = $pipes;if (@stream_select($changed, $write, $except = NULL, NULL) < 1)
continue;

foreach ($changed as $changed_stream) {

some code;
}

foreach ($write as $write_stream) {

some code;

}

}
}

fclose($pipes[0]);
fclose($pipes[1]);$return_value = proc_close($process);

}

Там нет никаких проблем. Но мне нужно, чтобы он работал как демон, поэтому я написал:

<?php
/*
scriptname: somemyscriptbgnd.php
*/
$cmd = 'php somemyscript.php';
execInBackground($cmd);

function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
$handle = popen("start /B ". $cmd, 'r');
pclose($handle);
}
else {
exec($cmd . " > /dev/null &");
}
}

Поэтому, когда я бегу somemyscript.php вручную работает нормально.
Однако когда я бегу somemyscriptbgnd.phpsomemyscript.php работает в какой-то момент — простыми словами somemyscriptbgnd.php закрывает как pclose закрывает ручку

Вопрос в том what a problem that may be and how to launch somemyscript in background from another PHP script?
Нотабене Мне нужно, чтобы процесс запускался из скрипта — такие вещи, как cron и т. Д. Не подходят.

0

Решение

почему бы не использовать system (), то есть если вы работаете в Windows, но в основном решение вашей проблемы состоит в том, чтобы перенаправить вывод в dev / null, потому что в соответствии с руководством php, php_exec func не будет работать асинхронно, если его вывод не обрабатывается, поэтому наконец то

<?php exec("php 'yourscript.php' > /dev/null >/dev/null &"); ?>

nohup не является обязательным в зависимости от вашего кода / файла
Вы также можете попробовать для
'command' | at now

Надеюсь, ты получил это хорошо, брат.

0

Другие решения

Других решений пока нет …