我已经按照这个教程:https://www.linode.com/docs/guides/start-service-at-boot/并设置所有内容。
因为我的问题就是这个:https://unix.stackexchange.com/questions/298027/restart-systemd-service-when-output-is-no-longer-generated我也按照这里的答案来做。
问题 * 与解决方案 *:运行7小时后,程序卡住。没有输出生成,systemd没有重新启动它。
在my_service. services中,两个都是建议的强制条目,其他所有内容都是正确的
WatchdogSec=30
Restart=on-watchdog
我可以手动让我的Rust程序与systemd通信吗?如果可以-怎么做?我希望它定期在特定的线路上通知systemd。
文档非常少:我一点也不明白。
另一个例子crate libsystemd
,有3个搜索结果WatchDog和这一个是最相关的我猜. https://docs.rs/libsystemd/latest/libsystemd/daemon/enum.NotifyState.html#variant.Watchdog
我想知道我是如何在这里完成任何事情的。我只是把这一行粘贴到我想要的程序中的任何地方吗?libsystemd::daemon::NotifyState
它如何知道PID?
在任何情况下:这些包中的每一个都有多个方法,我的程序在1-24小时后挂起,反复试验可能需要几周的时间。
如何让我的Rust程序从内部线程与systemd进行通信,或者如果不可能的话,只需手动设置并确保WatchDog接收到我想要的信号?从Rust程序向systemd发送单个通知的代码行是什么?
如上所述,转到逻辑很简单:如果没有打印输出,重新启动程序。
1条答案
按热度按时间x8diyxa71#
你必须以某种方式发送消息。通过寻找使用
NotifyState
的函数,我找到了systemd::daemon::notify
和libsystemd::daemon::notify
,两者都可以。例如: