Linux 向正在运行/联机的systemd守护进程传递和分析参数

Linux 向正在运行/联机的systemd守护进程传递和分析参数,linux,process,daemon,systemd,args,Linux,Process,Daemon,Systemd,Args,我正在从C/C++编译的可执行文件创建systemd守护进程。但是,在程序运行时,我希望能够更改一些程序参数。(与Linux上的其他守护进程一样) 我的意思是,例如,通过命令行更改流程中的“destination_server_ip”变量,可能使用类似 systemctl myProgram--destp=“1::2::3::4:5” 是否有一个标准的方法/框架来实现这一点?正如Vollfeiw在他们对您的问题的评论中所建议的,您可能真的希望在应用程序中创建自己的接口来实现这一点 我真的不认为这

我正在从C/C++编译的可执行文件创建systemd守护进程。但是,在程序运行时,我希望能够更改一些程序参数。(与Linux上的其他守护进程一样)

我的意思是,例如,通过命令行更改流程中的“destination_server_ip”变量,可能使用类似

systemctl myProgram--destp=“1::2::3::4:5”


是否有一个标准的方法/框架来实现这一点?

正如Vollfeiw在他们对您的问题的评论中所建议的,您可能真的希望在应用程序中创建自己的接口来实现这一点

我真的不认为这基本上是更新应用程序内部状态的一个好的设计选择,但是如果您非常希望能够使用
systemctl
实用程序来更新程序的状态,您可以利用的一种机制是UNIX信令

  • 在您的程序中实现一个信号处理程序(实现方法因语言和框架而异,如果您不熟悉,请查找一些教程)。在UNIX上,有两个信号保留供您使用,但您认为合适—SIGUSR1和SIGUSR2。使用任何其他信号也会起作用,但会违反惯例,所以您可能不应该这样做
  • 此后,您可以使用systemctl的
    --signal
    标志来提醒程序它应该执行某些操作
  • UNIX信号无法承载有效负载,因此您必须让程序知道如何以其他方式加载它想要的数据(例如,在发送信号之前写入文件)
老实说,在这一点上,您的功能复杂性基本上与公开web套接字或类似的东西相同。不是为了打败一匹死马,但是你应该咬紧牙关,制作一个web界面。:)但从技术上讲,你也可以通过这种方式得到你想要的东西

如果您希望能够在本地执行所有操作,而不让人们使用curl或浏览器或其他任何方式进行配置,那么您可以编写自己的CLI客户端来管理守护进程,您可能希望使用UNIX套接字(例如,与TCP或UDP套接字相反)作为基本通信技术。这是一些守护程序项目中的一种模式(看到服务的守护程序部分以“d”结尾,表示“守护程序”,然后是服务的客户端部分,用于控制守护程序,以“c”或“ctl”结尾,表示“控制”。NTP服务chrony就是一个这样的服务示例,它使用chronyd管理计算机的计时,并向用户提供chronyc CLI界面,告知chronyd以不同的方式进行操作


大多数程序员会发现公开web界面更容易。

我认为这是不可能的。至少在systemd中是不可能的。大多数情况下,如果对配置进行任何更改,都必须重新启动守护程序。老实说,当我知道可以在运行时更改配置时,我经常使用web界面,或者如果不能,我使用一些c我的应用程序不时检查的onfig文件。这是我一直在寻找的指南!非常感谢。