ssh2_exec rand возвращает идентификатор процесса? - PullRequest
0 голосов
/ 03 ноября 2010

Иногда, когда я запускаю этот код, я получаю процесс и идентификатор, и иногда команда выполняется, но возврат данных остается пустым? Кто-нибудь знает, как правильно ловить поток?

/**
 * Run command in background and returns the process id
 * 
 * @param string $cmd
 * @return int process id
 */
public function runBackground($cmd)
{
    $cmd = $cmd." > /dev/null & echo $!";

    if (!($stream = ssh2_exec($this->_connection, $cmd ))) {
        return "fail: unable to execute command\n";
    } else {
        // collect returning data from command
        stream_set_blocking($stream, true);
        $data = "";

        while ($buf = fread($stream,4096)) {
            $data .= $buf;
        }

        fclose($stream);
        return (int)$data;
    }       
}

1 Ответ

1 голос
/ 03 ноября 2010

У меня были похожие проблемы с моим последним использованием расширения PECL ssh2.Кажется, это как-то связано с libssh2: у меня с этим раньше не было проблем, затем я обновил libssh2 и начал время от времени получать пустые ответы без видимой причины.Команда ssh2_exec все равно будет выполнять команду, но иногда я получаю вывод, иногда нет.

К сожалению, это расширение не поддерживается с 2008 года и все еще находится в бета-состоянии (0.11.0).Возможно, вы захотите взглянуть на некоторые сторонние библиотеки SSH2 (некоторые из них LGPL или GPL).Мне никогда не удавалось устранить эту проблему.

РЕДАКТИРОВАТЬ:

2 дня назад (3 ноября 2010 г.), сопровождающий выпустил патч, который, очевидно, работаетс последней версией libssh2, хотя я сам не проверял.Вы можете обновить до 0.11.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...