Добавление функций RPC в Daemontools Бернштейна - PullRequest
2 голосов
/ 05 июня 2011

Я студент по компьютерным наукам из Италии, мне нужно сделать проект на основе модифицированной версии Daemontools Of DJ Bernstein, которая должна реализовывать удаленные вызовы процедур под Unix.

Обычно, чтобы запустить демон с помощью инструментов, я использую этот синтаксис:

svc -u /service/NameOfDaemon

И вот с этим:

svc -d /service/NameOfDaemon

Так что я могу управлять демоном локально.Идея состоит в том, чтобы добавить блок кода, чтобы иметь возможность управлять демоном, расположенным на удаленной машине, это будет идеальный синтаксис:

svc -u IP/service/NameOfDaemon

, где IP обозначает фактический IP-адрес целевой машины,известен пользователю.

В эти дни я гуглил и узнал о RPC и DTools, но я немного застрял, может кто-нибудь помочь мне начать?

Возможно, также некоторые рекомендованные материалы для моего проекта?

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Unix способ сделать это - сказать:

ssh -n root@remotehost svc -u /service/NameOfDaemon

Философия unix заключается в создании небольших инструментов, которые хорошо выполняют одну задачу и работают вместе с другими инструментами. svc - это инструмент, который может управлять демонами на локальном компьютере. ssh может запускать инструменты на удаленных машинах. Нет необходимости в другом инструменте.

Если вам абсолютно необходимо иметь одну команду, которая может управлять как локальными, так и удаленными демонами, то, как предлагает Крис, вы можете написать скрипт оболочки, который будет запускать svc или ssh при необходимости.

1 голос
/ 05 июня 2011

supervise использует доменные сокеты Unix для получения запросов. Преимущество использования сокетов Unix-домена заключается в том, что доступ к нему можно контролировать с помощью обычных разрешений файловой системы - в этом случае он разрешает доступ к сокету только root, поэтому причина, по которой вы обычно должны запускать svc от имени root .

Однако, как только вы переходите по сети, вы начинаете задумываться о сетевой аутентификации (если только вы не хотите, чтобы кто-нибудь из Тома, Дика и Гарри запускал и останавливал ваши службы). Если вы можете решить это, остальное легко:

  • Напишите службу, работающую на tcpserver, которая может вызвать svc на удаленной машине для вас. Если вам достаточно контроля доступа, предоставленного tcpserver, то все хорошо; в противном случае ваш сервис должен обрабатывать то, что осталось.
    • В целях безопасности не запускайте эту службу от имени пользователя root (т. Е. Всегда указывайте -u в командной строке tcpserver). Вместо этого просто измените (групповое) владение вашими сокетами supervise, чтобы они были доступны для чтения и записи пользователю, который запускает вашу службу.
  • Напишите сценарий оболочки на стороне клиента, который охватывает svc. Он проверяет синтаксис «удаленного сервера» и, если используется, подключается к вашей удаленной службе (а в противном случае просто вызывает svc как обычно).
...