Monit-脚本未按预期执行

Monit-脚本未按预期执行

我正在一台 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或登录到显示管理器,如xdmkdm),另一种是安全性较低的基于主机的访问控制系统。

如果您的程序以 root 身份运行,那么如果您将HOME环境变量设置为当前登录到显示器的用户的目录,您的程序将从他们的主目录读取 .Xauthority 令牌并能够显示在屏幕上。

否则,要启用较旧的基于主机的身份验证,您可以运行

xhost localhost

在 xterm 中允许计算机上的任何用户运行的任何程序使用显示器,直到显示器被重置。

相关内容