Удаленное управление процессом в Linux
В настоящее время я работаю над проектом, требующим ряда процессов, работающих под управлением "основного" процесса, который получает удаленные команды через TCP и сообщает дочерним процессам, что делать (например: с какими файлами они должны работать, какие операции обработки они должны выполнять).
Я предложил следующие идеи для передачи команд / конфигурации дочерним процессам:
- Сигналы (недостаточно мощные)
- Бинарный протокол через сокеты или каналы, соединяющий каждый процесс с мастером (заново изобретите колесо).
- RPC (возможно, перебор)
- CORBA (возможно, перебор)
- DDS (полностью перебор)
Есть идеи / предложения?
5 ответов
Облегченная очередь сообщений, такая как beanstalkd или resque, кажется правильным уровнем сложности. Файлы с inotify также могут работать; inotify разработан как очередь событий. Вы можете попробовать его с помощью incrontab перед запеканием. {Xml,json}-rpc (немного) более сложный, но и более стандартный, так как использует http. Однако метафора очереди сообщений является более подходящей, чем rpc, для неблокирующих взаимодействий.
Как насчет текстового протокола по каналам?
текстовые протоколы всегда лучше, чем двоичные протоколы, потому что их легче тестировать, а более простое тестирование обычно означает меньше ошибок.
Инструмент супервизора может быть полезен. Это система клиент / сервер, которая позволяет пользователям отслеживать и контролировать ряд процессов в UNIX-подобных операционных системах.
Вы также можете использовать очереди сообщений или разделяемую память с семафорами.
Вы также можете взглянуть на проект Apache под названием ActiveMQ, который позволяет отправлять сообщения в очереди подписки и т. Д. Он очень мощный и гибкий, и в нем есть C-интерфейсы. Это идеально, если у вас есть много машин / сетей, на которые вам нужно отправлять сообщения.