是否有一个工具可以跨平台控制守护进程/服务?
在编程中,有不同的构建工具允许您在不同的平台上从源代码构建软件;该工具将负责检测特定机器的功能并定位库、编译器等。CMake 就是一个例子。
控制守护进程也存在类似的问题。根据操作系统的不同,如果我想启动守护进程,我可能会使用
stop-start-daemon -S mydaemon
或者调用如下脚本
/etc/init.d/mydaemon start
或者如果systemctl
是选择的工具,那么
systemctl start mydaemon
如果我在 Windows 上,那么我可以使用net start myservice
或sc start myservice
。
是否有工具、脚本或其他规范方法来处理这种情况?我不需要细粒度的控制;只需停止和启动,但我希望能够使用相同的脚本在多个系统上部署我自己的软件。
答案1
直接回答您的问题:不,没有跨平台的方式来启动/停止/控制守护进程。
间接回答您的问题:处理这种情况的典型方式是将这种功能烘焙到您的程序和安装程序中(makefile/build files/msi packages/zips 等等)。
如果我正在构建一个守护进程程序(一个旨在在后台或作为服务运行的程序),我会手动构建“启动/停止”脚本(使用一些有用的复制/粘贴),然后将源代码或预编译的二进制文件与选择平台控制脚本一起压缩,然后在每个平台上以相同的方式调用该脚本(即myservice -start
或myservice -stop
等)。
答案2
由于我自己的软件产品需要这个,所以我决定编写它:
https://github.com/cubiclesoft/service-manager/
由于每个平台都需要自己的预编译二进制文件,因此它并不是一个完美的解决方案。但是,界面比我们目前的界面更加一致。服务管理器可能最适合用作跨平台服务部署工具,它满足您后期部署自己的软件的需求,而不是一般的启动/停止工具。也就是说,您编写一些代码,将其转换为系统服务,并使其能够轻松可靠地部署到其他机器上,而不受操作系统的限制。
但是,它也可以用于启动/停止其他启用 Service Manager 的服务。因此,只要您要控制的所有服务都在 Service Manager 下运行,您就可以使用单个工具来启动和停止这些服务。