python 封装调用_使用python封装sd_notify到systemd

本文介绍了如何在Python中封装调用systemd的sd_notify功能,用于进程与systemd之间的状态通信。文章详细阐述了systemd sd_notify的用途、问题以及Python实现的简单逻辑代码,帮助开发者理解如何在Python中发送不同状态的信号。
摘要由CSDN通过智能技术生成

我们知道Centos7之后搁浅Sysvinit,改用复杂功能又及其强大,又特别惹人烦恼的systemd. 这个名字取得很大气,直接用system + d . Sysvint从unix时期就已经早早的存在了,在各大国外的社区都很不少大牛针对init 和 systemd进行讨论,目前来看支持Sysvinit的人多点。

周边人对于systemd的看法. 有意思的是,我周边的开发人员都觉得无所谓,看了systemd的高级功能更是蠢蠢欲动。也确实systemd的功能对比init来说,复杂强大的多,比如并行化,unit, target ,socket , timer等等。 我以前的运维朋友,包括bat那帮人都不喜欢systemd,为什么? 又要学一个新东西,madan的。 咱们也不说什么高端的说法,不说systemd不符合unix的设计哲学,不符合简单美。 我个人也讨厌新东西,虽然他的新功能很是吸引人。

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新. http://xiaorui.cc/?p=3462

前面虽然说的很直爽,但现实中因为各种各样的环境会导致你去用systemd。 不是因为systemd而去用centos7 ,而是因为centos7用systemd。 跟朋友一起开发一个开源的OpenApi,这与做什么这里先不说,保密。 这哥们蛋疼的想做一个systemd sd_notify的外部支持,用golang扩展一个模块。 文章的后面会告诉你,实现代码是怎么个简单粗暴。

systemd sd_notify是什么? 传统的服务化进程管理,我们只是能知道他活着,他挂了. sd_notify可以做到一个运行程序跟systemd交互通信。 我主动告诉systemd我现在的状态,不仅仅是让systemd通过event pid粗浅的认为我的状态。 另外sd_notify也是可以发出类似进度的指令。

这里说下使用systemd遇到的问题:

其实官方文档有说明 。 READY 只是有1 , 一开始是stackoverload看了个sd_notify的说明有 0 2的值。 后来….

systemd是不会给程序传递信号,让他去reload,只能是你自己加信号解决。

不要轻易让systemd把自己标注为ERROR的状态,原本只是想做个提示,结果发现systemd把你给干掉了。

watchdog还是有点意思的,你可以申请一个watchdog dev设备,去定期喂数据,保持这个keep alive,他会改变定时器时间。

更加详细的syste

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
notify_all()是C++11中condition_variable类的一个成员函数,用于唤醒所有等待在该condition_variable对象上的线程。当一个线程调用notify_all()时,所有等待在该condition_variable对象上的线程都会被唤醒,但是只有一个线程能够获得锁并继续执行。如果没有线程等待在该condition_variable对象上,则该函数不会有任何作用。 使用notify_all()时需要注意以下几点: 1. 必须先获得与该condition_variable对象关联的unique_lock对象的锁,才能调用notify_all()函数。 2. 在调用notify_all()函数之前,必须先改变条件变量的状态,否则唤醒线程没有意义。 3. 被唤醒的线程需要重新检查条件变量的状态,以确定是否满足继续执行的条件。 下面是一个使用condition_variable和notify_all()的示例代码: ```c++ #include <iostream> #include <thread> #include <mutex> #include <condition_variable> std::mutex mtx; std::condition_variable cv; bool ready = false; void worker_thread() { // 等待主线程通知 std::unique_lock<std::mutex> lock(mtx); while (!ready) { cv.wait(lock); } // 执行任务 std::cout << "Worker thread is running..." << std::endl; } int main() { // 创建工作线程 std::thread worker(worker_thread); // 做一些其他的事情 std::this_thread::sleep_for(std::chrono::seconds(1)); // 通知工作线程开始执行任务 { std::lock_guard<std::mutex> lock(mtx); ready = true; } cv.notify_all(); // 等待工作线程完成 worker.join(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值