我正在尝试使用 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