gpt4 book ai didi

linux - 将参数传递和解析到运行/在线 systemd 守护进程

转载 作者:行者123 更新时间:2023-12-04 07:50:50 24 4
gpt4 key购买 nike

我正在从 C/C++ 编译的可执行文件创建 systemd 守护进程。但是,在程序运行时,我希望能够更改一些程序参数。 (与 Linux 上的其他守护进程一样)。
我的意思是,例如,通过命令行更改我的流程中的“destination_server_ip”变量,可能类似于systemctl myProgram --destIP="1::2::3::4:5"有没有标准的方法/框架来实现这一点?

最佳答案

正如 Vollfeiw 在他们对您的问题的评论中所建议的那样,您可能真的希望在您的应用程序中制作自己的界面来执行此操作。
我真的不认为这基本上是将内部状态更新到应用程序的一个好的设计选择 - 但如果您非常希望能够使用 systemctl实用程序来更新您的程序状态,您可以利用的一种机制是 UNIX 信号。

  • 在您的程序中实现一个信号处理程序(这样做的方法因语言和框架而异,如果您不熟悉,请查找一些教程)。在 UNIX 上,有两个信号保留供您使用,但您认为合适 - SIGUSR1 和 SIGUSR2。使用任何其他信号也可以,但会违反约定,因此您可能不应该这样做。
  • 此后,您可以使用 --signal标记 systemctl 以提醒程序它应该做某事
  • UNIX 信号不能携带有效载荷,因此您将不得不让程序知道如何以其他方式加载它想要的数据(例如,可能在发送信号之前写入文件)。

  • 老实说,在这一点上,您在功能上基本上处于与公开 Web 套接字或类似内容相同的复杂程度。不要打败一匹死马,但因此您可能应该咬紧牙关并制作一个网络界面。 :) 但是从技术上讲,您也可以通过这种方式完成您想要的工作。
    如果您希望能够在本地完成所有操作并且不想让人们使用 curl 或浏览器或其他任何东西来进行配置,您可以编写自己的 CLI 客户端来管理您的守护程序,您可能希望使用 UNIX 套接字(与 TCP 或 UDP 套接字(例如)相反)作为您的基本通信技术。这是一些守护进程项目中的模式(查看服务的守护进程部分以“d”结尾,代表“守护进程”,然后是服务的客户端部分,用于控制守护进程,以“c”结尾) ”或“ctl”,表示“控制”。执行此操作的服务的一个示例是 NTP 服务 chrony,它使用 chronyd 来管理您的计算机的计时,并为用户提供 chronyc CLI 界面以告诉 chronyd 以不同的方式做事。
    大多数程序员会发现公开 Web 界面更容易。

    关于linux - 将参数传递和解析到运行/在线 systemd 守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66986866/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com