LINUX.ORG.RU

Запуск команды (внешней программы) на сервере другим сервером

 , ,


1

1

Здравствуйте, у меня есть сервер, на нем крутится сайт, на этом сайте есть скрипт на php, в яйце игла) в скрипте код который вызывает внешнюю программу на сервере командой exec(). Я сделал небольшое API чтоб с другого сайта можно было запустить эту команду. Но другому сайту нужно запустить эту команду как можно больше раз в сутки, по http обращаться к скрипту как-то мне кажется затратно по времени, сначала нужно открыть соединение (как я это понимаю), передать данные и закрыть соединение, и так много тысяч раз, как сделать, чтоб их сервер запускал на моем эту команду, передавал и получал много раз данные, не открывая и закрывая каждый раз соединение?


Почему бы не использовать какой-нибудь биндинг к celery? Всяко лучше, чем велосипедное API.

Или спуститься уровнем ниже и сделать маленький велосипед на тему celery вокруг AMQP.

x3al ★★★★★
()

Как-то через пайпы. На серваке где запускается команда: пускаешь в цикле пишешь в сокет. На своем сервере подключаешься удаленно по ssh и читаешь через сокет.

Более адекватное решение (если данные не секьюрные): на удаленном серваке запускаешь демон, который пускает прогу (man pre-fork); твой сервак подключается к твоему демону и шлет комманду run, получает результат.

Еще более адекватное решение: пишешь демон, который имеет встроенную поддержку функционала нужной программы. И дальше как обычно.

И да, man nc

gh0stwizard ★★★★★
()

Спасибо всем, много новых слов, буду гуглить) уверен что что-то поможет, так как раз уже на этом форуме конкретно подсказали) на всякий случай еще раз обьясню что нужно

у них есть скрипт на php, делает примерно следующее

<?php 
for ($i = 0; $i < 1000000; $i++) { 
   $res = file_get_contents('http://адрес_на_мой_сайт/мой_скрипт?какие-то_параметры');
   дальше что-то делаем с $res
}
?>

у меня на сервере, по адресу http://адрес_на_мой_сайт/мой_скрипт также скрипт на php

<?php
echo exec('команда_на_сервере'.$_GET['какие-то_параметры']);
?>

нужно чтоб сервера «общались» напрямую, обходя php и обращения по http, чтоб for ($i = 0; $i < 1000000; $i++) { занимал не сутки а пару часов)

icom
() автор топика
Ответ на: комментарий от icom

.$_GET['какие-то_параметры']

если это не упрощенный код, то тебе сайт взломают наверное даже боты

нужно чтоб сервера «общались» напрямую, обходя php и обращения по http, чтоб for ($i = 0; $i < 1000000; $i++) { занимал не сутки а пару часов)

нужен пул обработчиков и возможно пакетная обработка, томущо в зависимости от команды (какбы можешь ли ты ее код переписать и т.п.) запуск может занимать больше времени чем выполнение

Deleted
()
Ответ на: комментарий от Deleted

код упрощенный)

команда_на_сервере - этой командой открывается программа, у себя на сервере я ее могу открыть и не закрывая передавать разные параметры, а она мне результат, это работает быстро, нужно чтоб сторонний сервер также мог, без нужды открывать новое соеденение при передачи нового параметра, а раз открыть соеденение и передавать\получать разные параметры

icom
() автор топика
Ответ на: комментарий от icom

1) сейчас она по завершении обработки запроса закрывается, а ты хочешь чтобы оно продолжало ждать новых задач?

2) на http можно последвательно в одном соединении обрабатывать несколько запросов см https://ru.wikipedia.org/wiki/Постоянное_HTTP-соединение

также если ты до запуска цикла знаешь все запросы (а не вычисляешь их после обработки ответа), то можешь просто заслать их все разом и также разом получить ответ на все запросы, будет что-то вроде пакетной команды

Deleted
()

Я всегда для подобных вещей использую libssh2. Погугли про нее, думаю это решит твою задачу.

kukara4 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.