Кроссплатформенный демон / сервис остановка и запуск

832
Anthony

Есть ли инструмент, который может управлять демонами / сервисами кросс-платформенным способом?

В программировании существуют различные инструменты для сборки, которые позволяют создавать программное обеспечение из исходного кода на разных платформах; инструмент позаботится о том, чтобы определить возможности конкретного компьютера и найти библиотеки, компиляторы и т. д. Например, CMake.

Есть похожая проблема с управлением демоном. В зависимости от операционной системы, если я хочу запустить демон, я могу использовать

stop-start-daemon -S mydaemon 

или, возможно, назвать сценарий, как

/etc/init.d/mydaemon start 

или если systemctlэто инструмент выбора, то

systemctl start mydaemon 

И если я на Windows, то я мог бы использовать либо net start myserviceили sc start myservice.

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

0
у вас есть различия, может быть, я могу что-то написать Felipe Alcacibar 9 лет назад 0

2 ответа на вопрос

3
txtechhelp

To directly answer your question: no, there is not a cross platform way to start/stop/control daemons.

To indirectly answer your question: the typical way this is handled is by baking that kind of functionality into your program and installers (makefiles/build files/msi packages/zips whatever).

If I have a daemonized program that I am building (a program that is intended to run in the background or as a service), I build out the 'start/stop' scripts by hand (with some helpful copy/paste) and then zip up either the source or precompiled binary with the platform of choices control script that is then called the same way across each platform (i.e. myservice -start or myservice -stop, etc. etc.).

0
CubicleSoft

Я сам нуждался в этом для своих программных продуктов и решил написать:

https://github.com/cubiclesoft/service-manager/

Это не совсем безупречное решение, поскольку каждая платформа нуждается в собственном предварительно скомпилированном двоичном файле. Тем не менее, интерфейс намного более последовательный, чем у нас на данный момент. Service Manager, вероятно, лучше всего использовать в качестве кроссплатформенного инструмента развертывания служб, который отвечает вашим последним потребностям в развертывании собственного программного обеспечения, а не в качестве общего инструмента запуска / остановки. То есть вы пишете некоторый код, который хотите превратить в системный сервис, и делаете его простым и надежным для развертывания на других машинах независимо от ОС.

Однако его также можно использовать для запуска / остановки других служб с поддержкой Service Manager. Таким образом, пока все службы, которыми вы хотите управлять, работают под управлением Service Manager, вы можете использовать один инструмент для запуска и остановки этих служб.

Похожие вопросы