cha*_*med 2 c++ linux setup-deployment
可安装的Linux守护进程,如何在C++中创建它们?
我在C++中有一个服务器应用程序,我希望它的行为与Windows服务相同.即,无论用户是否登录,系统启动时都应启动它.在Windows中,有许多C++类能够促进与服务管理器的通信并处理启动/停止/暂停命令.Linux怎么样?另外,我如何轻松部署我的应用程序?我羡慕如何使用apt-get system命令安装一些应用程序,这对于自定义应用程序来说很容易,比如我在一台机器上提供二进制文件然后自动从目标Linux中获取它们......?
预先感谢您的帮助.
小智 8
好的,首先,你需要知道在Windows和Linux中编写服务是非常不同的.首先,在Linux中,"服务"不称为"服务",它们被称为"守护进程".知道了,你可以使用谷歌找到这个非常有用的文件.
至于启动/停止/重启,这里没有通用的预制解决方案.在大多数情况下,守护进程在/ var/run中创建*.pid文件; 这些文件包含其进程标识符"PID".然后编写一个简单的bash脚本,通过从适当的文件中读取pid并向其发送kill信号来控制守护程序的执行.
例如,假设您的守护程序名称是foo.然后它将创建文件/var/run/foo.pid并将其PID写入其中,使用ASCII字符并在末尾附加换行符.您的控制脚本名称将是fooctl,它应支持以下命令:start,stop和restart.也就是说,当你运行时fooctl start,脚本应首先检查相应的pid文件是否存在,如果不存在,则执行启动守护进程所需的任何操作; 当你运行时fooctl stop,它应该从/var/run/foo.pid读取pid并使用该ID终止进程.如果是fooctl restart,您的脚本将需要先停止守护程序,然后再次启动它.
尽管如此,这只是一个关于守护进程应该如何工作的协议.这就是通常的做法.但这些规则并未以任何方式强制执行.您可以自由地发明并使用自己的技术来创建和控制守护进程.
至于你的问题的第二部分(关于apt-get),这称为包管理.它与守护进程无关,但是由于您要求:使用自定义应用程序执行此操作,您需要将其发布到主存储库中,这可能由于多种原因而无法实现; 或者你可以创建自己的回购.您也可以为您的应用程序组装一个*.deb包,它也很容易安装.在网上搜索有关如何为自定义Linux应用程序构建包的更多信息.