Кроссплатформенный демон / сервис останавливается и запускается
Есть ли инструмент, который может управлять демонами / сервисами кросс-платформенным способом?
В программировании существуют различные инструменты для сборки, которые позволяют создавать программное обеспечение из исходного кода на разных платформах; инструмент позаботится о том, чтобы определить возможности конкретного компьютера и найти библиотеки, компиляторы и т. д. Например, CMake.
Есть похожая проблема с управлением демоном. В зависимости от ОС, если я хочу запустить демон, я могу использовать
stop-start-daemon -S mydaemon
или, возможно, назвать сценарий, как
/etc/init.d/mydaemon start
или если systemctl
инструмент выбора тогда
systemctl start mydaemon
И если я на Windows, то я мог бы использовать либо net start myservice
или же sc start myservice
,
Есть ли инструмент, сценарий или другой канонический метод для обработки этого сценария? Мне не нужен мелкозернистый контроль; просто остановитесь и начните, но я хотел бы иметь возможность развернуть свое собственное программное обеспечение на нескольких системах, используя один и тот же сценарий.
2 ответа
Чтобы прямо ответить на ваш вопрос: нет, нет кроссплатформенного способа запуска / остановки / управления демонами.
Чтобы косвенно ответить на ваш вопрос: типичным способом решения этой проблемы является включение такого рода функциональности в вашу программу и установщики (makefiles/build files/msi packages/zips и т. Д.).
Если у меня есть демонизированная программа, которую я создаю (программа, предназначенная для запуска в фоновом режиме или в качестве службы), я создаю сценарии запуска / остановки вручную (с некоторыми полезными копированием / вставкой), а затем выполняю zip-архивирование. или исходный или предварительно скомпилированный двоичный файл с помощью сценария управления платформой выбора, который затем вызывается одинаково для каждой платформы (т.е. myservice -start
или же myservice -stop
и тд и тп).
Я сам нуждался в этом для своих программных продуктов и решил написать:
https://github.com/cubiclesoft/service-manager/
Это не совсем безупречное решение, поскольку каждая платформа нуждается в собственном предварительно скомпилированном двоичном файле. Тем не менее, интерфейс намного более последовательный, чем у нас на данный момент. Service Manager, вероятно, лучше всего использовать в качестве кроссплатформенного инструмента развертывания служб, который отвечает вашим последним потребностям в развертывании собственного программного обеспечения, а не в качестве общего инструмента запуска / остановки. То есть вы пишете некоторый код, который хотите превратить в системный сервис, и делаете его простым и надежным для развертывания на других машинах независимо от ОС.
Однако его также можно использовать для запуска / остановки других служб с поддержкой Service Manager. Таким образом, пока все службы, которыми вы хотите управлять, работают под управлением Service Manager, вы можете использовать один инструмент для запуска и остановки этих служб.