Перейти к содержимому
Калькуляторы

Взаимодействие между серверами ищу красивое решение

Задача весьма простая, один сервер должен инициировать запуск скрипта с параметрами на другом сервером, получить от него ответ.

Понятно, что можно это сделать тупо по ssh, но хочется что-то более изящное типа какого-нибудь xml-request(чтобы не придумывать свой протокол как передавать массив данных и получать массив в ответ), но поднимать apache не очень хочется.

Может есть какой-то специальный протокол, созданный для того, чтобы с одного сервера дёргать скрипты на другом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вы как блондинка прямо...

"Хочу родить ребенка, но не хочу быть беременной..."

Определитесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну самое простое это посмотреть в сторону xinetd, туда свой скрипт приляпать и на нужный порт повесить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у ребят с local.com.ua в последних сборках старгейзера (фриишный биллинг) есть спец.демон для исполнения скриптов на удаленных серверах.

Сам пока не ковырял, вполне устраивает исполнение их по ssh с авторизацией по ключу.

Правда а зачем что-то выдумывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

более изящное типа какого-нибудь xml-request(чтобы не придумывать свой протокол как передавать массив данных и получать массив в ответ)
python'ий pickle ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я буду это на апаче делать полюбобу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так понимаю, что вопрос стоит в том чтобы не программировать ничего нового, а воспользоваться готовым софтом, если такой есть. Все предложенные методы завязаны на программирование. Так можно и свой rpc написать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://www.ibm.com/developerworks/library/ws-pyth10.html

 

Сервер:

#!python
import SimpleXMLRPCServer

class Server:
    def ping(self, msg):
        return "pong: %s" % (str(msg),)

srv_object = Server()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))
server.register_instance(srv_object)

print "Listening on port 8888"
server.serve_forever()

 

Клиент:

#!python
import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:8888/")

print server.ping(["hello world"])

 

Получится:

$ python srv.py 
Listening on port 8888
localhost - - [27/Oct/2010 11:16:09] "POST / HTTP/1.0" 200 -

$ python cli.py 
pong: ['hello world']

 

Если надо шифрование, логины, пароли, списки доступа, многопоточность, то прийдется немного дописать. Например многопоточность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А всё-таки, чем длинные скрипты с дополнительными библиотеками красивее и изящнее решения в лоб - ssh?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

что-то вроде такого?

 

!/usr/bin/expect -f

set HOST "192.168.1.1"
set PASS "mypassword"
set USER "root"
set ENC "KOI8-R"
set CMD "ip route ls"
set timeout -1

spawn luit -encoding $ENC ssh -l $USER $HOST
match_max 100000
expect -exact "$USER@$HOST's password: "
send -- "$PASS\r"
expect "Last login: *\r\r
*$USER*"
send -- "$CMD\r"
expect "\r"
expect "*default*"
exit

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

deep_admin

Так я умею, но выглядет это как костыль, в принципе (x)inet.d интересный вариант, надо будет попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

deep_admin

Так я умею, но выглядет это как костыль, в принципе (x)inet.d интересный вариант, надо будет попробовать.

в случае с xinetd вам нужен свой серверный скрипт писать кроме клиентского, а это потребует установки разного, может и ненужного доп. софта

в случае с ssh - ничего вообще не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в случае с xinetd вам нужен свой серверный скрипт писать кроме клиентского

Ну по идее же можно просто целевой скрипт чуть подправить (если вообще необходимо) и скормить его в xinetd, и ненужно писать скрипт для запуска другого скрипта.

Изменено пользователем GloooM

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.