После бессонной ночи возвращаюсь к битве)
я не понимаю что я не так делаю.
есть примитивный клиент
function buttonRunClick(node)
{
$('button.run_current').addClass('disabled'); //disable after click
//search index row for adding new tr for container
$(node).closest('tr').after('<tr id="progress_container"><td colspan="4"><div>progress container after run test</div></td></tr>');
$.ajax({
type: "GET",
url: "/run_current",
data: { id: node.tagName }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
}
метод контроллера
все варианты что я опробовал
1
public function runCurrent()
{
$process = new Process('ping 8.8.8.8 -c 10 >/home/dmtry/buff &');
$process->start();
return 'done';
}
2
//запуск shell скрипта в котором
// #!/bin/bash
// sleep20s
Proc_Close (Proc_Open("~/ping.sh --foo=1 &", Array (), $foo));
return 'done'
3
exec ('/usr/bin/nohup ping 8.8.8.8 -c 10 >buffer 2>/dev/null &');
//или
exec ('/usr/bin/nohup ping 8.8.8.8 -c 10 >/dev/null 2>/dev/null &');
//или
system('ping 8.8.8.8 -c 10 >buffer 2>/dev/null &');
//или
$cmd = 'ping 8.8.8.8 -c 10';
$outputfile = '/home/dmtry/buff';
$pidfile = '/home/dmtry/pid';
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
return 'done'
во всех случаях скрипт запускается и на этом все, ждем когда он прошагает, потом отдает return.
пробовал перед exec($cmd) делать echo ''; он даже не запускается, каким то образом exec все равно выполняется первым.
Система ubuntu 14.04 lts. php7.
update!
Наконец получил то что надо, возможно костыльно, но работает,
помог совет отсюда
stackoverflow.com/questions/14555971/php-exec-back...
exec("screen -d -m -S my_php_session csv.php $file $user", $output);
UPDATE
Возникли проблемы с перенаправляением вывода
Как перенаправить вывод команды в файл? поэтому screen тоже не подошел.
Но вот еще одно аналогичное решение, короче по записи и не создает дополнительного процесса screen и с перенаправлением потока нет проблем
exec("tmux -c 'ping 192.168.1.1 -c 10 >~/buff &'")