monit 无法支持 dbus 会话

monit 无法支持 dbus 会话

我正在尝试使用 monit 来监控并自动解决崩溃、内存泄漏和 CPU 热旋转等问题。

对于一个应用程序 - 使用DBus(服务和调用功能)的应用程序将无法启动。

它使用 GDBus,因此dbus-launch出现不可用错误——这确实是事实,因为目标系统相当老旧,并且该命令还不存在。

从控制台运行二进制文件有效 - 可以正常工作 - 我猜这是因为 DBUS_SESSION_BUS_ADDRESS 设置正确 - 但在为 monit 生成的 shell 中情况并非如此?

我怎样才能让 monit 生成的 shell 知道 shell 变量(即 DBUS_SESSION_BUS_ADDRESS)?

答案1

似乎是安全特征-这个 git 提交通过不破坏环境数组来解决问题。

https://bitbucket.org/tildeslash/monit/issue/6/dbus-session-bus


对于那些坚持使用 monit 5.4 或更早版本(上次测试)的人来说,有一个肮脏的解决方法:

从其他进程环境变量获取会话总线的肮脏的黑客手段(仅使用单个用户测试):

#! /bin/sh
DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2> /dev/null| sed -e 's/\/proc\/[^\/]*\/environ\:/ /g'| cut -d ' ' -f 2`
if [ "x${DBUS_ADDRESS}" != "x" ]; then
        export ${DBUS_ADDRESS}
fi

相关内容