我正在一台 Windows 7 机器上工作,有一个用于 Ubuntu 的虚拟机(映像磁盘:12.04-desktop-i386.iso)。
我在虚拟机上安装了 Monit 5.3.2,并配置了一些进程和应用程序。因此,我创建了一个脚本来运行我的应用程序。此应用程序应在屏幕上显示一些内容(我基本上使用 Feh 显示两个图像)。
问题是:如果我通过命令行调用我的脚本,它会运行正常并显示图像。但如果我通过 monit 运行,它似乎运行正常,但不显示图像。如果我尝试调试它(远程调试),那么我可以看到图像。所以我假设这可能是某种配置,但没有找到是什么(即使使用选项 -I 也不起作用)。
下面我将展示更多细节:
-Monit 上的一段脚本----
check program runMediaHandler with path "/usr/bin/runMediaHandler.sh"
if status == 1 then alert
-运行媒体处理程序.sh ----
#!/bin/bash
java -jar /home/thais/Desktop/MediaHandler_RC2.jar
总结:
1.有效的方法:
如果我直接运行 java: java -jar /home/thais/Desktop/MediaHandler_RC2.jar
如果我直接运行脚本:runMediaHandler.sh
如果我远程调试在应该显示图像的地方设置一个断点
2.什么不起作用:
- 将那条信息放在 Monit 上以“检查程序”,写在上面(即使调用 monit -I start runMediaHandler)
先感谢您,
泰伊斯
答案1
非常感谢你帮助我!最后我尝试了一些步骤,使我的程序运行起来
1-不确定是否有必要,但我执行了命令行(根据 monit 手册)使 monit 在前台运行:
/usr/bin/monit -Ic /etc/monit/monitrc
2 - 我更改了脚本以设置显示并与用户一起执行。看看现在的情况:
#!/bin/bash
export DISPLAY=:0.0
su -c "java -jar /home/thais/Desktop/MediaHandler_RC2.jar" thais
答案2
在不知道您的程序如何运行的情况下,我猜这是一个权限问题。Monit 以 root 身份而不是本地用户身份启动脚本。要查看这是否是问题的根源,请尝试修改脚本以作为以下用户运行myuser
(根据需要更改为本地用户名):
#!/bin/bash
su -c "java -jar /home/thais/Desktop/MediaHandler_RC2.jar" myuser
答案3
可能monit
其中没有您的 Java 安装目录$PATH
。
答案4
根据其网页,Feh 是一个 X11 应用程序,这意味着它显示在 X 服务器上。通常,X 服务器有两种允许访问显示器的方法:一种称为 XAuth,它使用.Xauthority
放置在当前使用显示器的人的主目录中的令牌文件(称为),(通过运行startx
或登录到显示管理器,如xdm
或kdm
),另一种是安全性较低的基于主机的访问控制系统。
如果您的程序以 root 身份运行,那么如果您将HOME
环境变量设置为当前登录到显示器的用户的目录,您的程序将从他们的主目录读取 .Xauthority 令牌并能够显示在屏幕上。
否则,要启用较旧的基于主机的身份验证,您可以运行
xhost localhost
在 xterm 中允许计算机上的任何用户运行的任何程序使用显示器,直到显示器被重置。