Как стать автором
Обновить

Комментарии 7

Из-за бага SSH2 сокет не является в PHP корректным параметром для stream_select, а следовательно, в распоряжении у вас будет только синхронное однопоточное выполнение в блокирующем сокете. Если сервер один — то пофиг, а если серверов с десяток — индексироваться все это будет довольно долго.

Phpseclib лишен этого печального недостатка + не требует установки лишних расширений (либ для которых, кстати, нет на Win8.1 64)

Забудьте про --all. Это приведет к полной реиндексации всех данных, что может занимать иногда огромное количество времени (10 гиговый индекс ротируется примерно 2 часа), используйте дельта-индексы и ротируйте их по крону (раз в минуту, например)

Забудьте про авторизацию по логину и паролю — авторизируйтесь по ключу. Это быстрее и не надо палить пароли на прод сервера в коде — достаточно прописать путь до своего девелоперского ключика.

Блокируйте повторный запуск ротатора — у вас могут одновременно стартануть несколько индексеров, что не гут.

Блокируйте повторный запуск ротатора — у вас могут одновременно стартануть несколько индексеров, что не гут.
вот тут капсом и несколько раз. Грабли распространенные
Кроме этого тут еще навалом граблей, но человек только учится, пусть сам набивает шишки, а то не запомнит ничего.
Спасибо за ваш комментарий.

На самом необходимо подключаться лишь к одному серверу, и блокирующий сокет никак не мешает.

Пример с --all — это лишь пример, естественно, индексов большего одного, и для индексации используются дельта индексы.
Кстати, по поводу rotate — как раз таки из-за него, в том числе, была необходимость запускать индексацию сфинкса удаленно, т.к. в самой команде есть реализация блокиратора.

Реализовать авторизацию по ключу как раз было в дальнейших планах.
>> блокирующий сокет никак не мешает.
>> Оказалось, что выходной поток обрывается при малейшей задержке выполнения команды в терминале.

Мешает, и вы используете костыли под это не предназначенные.
Простите, наверное, не совсем верно выразился. Выходной поток не обрывается, а прерывается. Т.е. при считывании из буфера при задержке возвращается не очередная строка, а false.
Поэтому и потребовались идентификаторы начала и окончания операции.

Phpseclib попробую, раз вы говорите, что она лишена подобных казусов.
После долгих лет мучений с ssh библиотеками для php, теперь если из php надо связаться с другим серваком, то делаю так:

shell_exec("/путь к bash скрипту, который всё сделает сам без участия php");

Работает изумительно :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий