Jump to content
Калькуляторы

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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']

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

!/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

Share this post


Link to post
Share on other sites

deep_admin

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

Share this post


Link to post
Share on other sites
deep_admin

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

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by GloooM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this