首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式启动systemd服务或测试服务是否正在运行

以编程方式启动systemd服务或测试服务是否正在运行
EN

Stack Overflow用户
提问于 2016-02-05 16:36:37
回答 2查看 3.5K关注 0票数 0

我需要启动一个服务,并(稍后)检测它是否从C++程序中运行。有没有比使用合适的参数调用systemctl并解析输出更简单的方法?

服务的源代码完全在我的控制之下。(目前它是用bash编写的,但完全可以使用C++包装器。)

(我简要地看了一下DBus --它显然非常强大,但没有通过“更简单”的测试。)

服务的源代码完全在我的控制之下。(目前它是用bash编写的,但C++是完全可能的。)

该代码适用于运行Debian Jessie变体的嵌入式设备。可移植性并不是一个主要的问题(但显然,如果它是可移植的,那么答案对其他人来说会更有用)。

EN

Stack Overflow用户

发布于 2016-02-05 16:42:48

大多数程序都是以另一种方式编写的(即使在前systemd时代也是如此)。

典型的服务(具有并启动单个服务器进程的服务)在启动时将其PID (作为单行上的ASCII号)写入某个/var/run/foobar.pid文件中。如果您在您的服务中采用这样的约定,则可以使用fscanf读取该文件,然后检查该进程是否正在使用kill(pid, 0);运行(当然,您不能确定它是相同的服务,但很可能是相同的)。

我现在有超过20个匹配/var/run/*.pid的文件,特别是/var/run/sshd.pid/var/run/atd.pid

因此,假设您可以改进服务FooBar的代码(如果该功能不存在),请更改其代码以将其pid写入/var/run/foobar.pid;这是一个有文档记录的convention

如果您可以更改服务,您可以让它提供一些ping或nop功能;因此,您可以添加一些RPC功能,它只检查服务是否正在运行(还可以提供一些额外的信息,比如程序的版本等)。大多数现有的Linux服务都有这样的功能。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35219605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档