Monit - скрипт не выполняется должным образом

Я работаю на машине с Windows 7, имеющей виртуальную машину для Ubuntu (образ диска: 12.04-desktop-i386.iso).

На ВМ я установил Monit 5.3.2 и настроил некоторые процессы и приложения. Поэтому я создал скрипт для запуска моего приложения. Это приложение должно отображать некоторый контент на экране (я в основном отображаю два изображения, используя Feh).

Дело в том, что если я вызываю свой сценарий через командную строку, он работает нормально и отображает изображения. Но если я запускаю monit, кажется, что он работает нормально, но он не отображает изображения. В случае, если я пытаюсь отладить его (удаленная отладка), я могу видеть изображения. Так что я предполагал, что это может быть какая-то конфигурация, но не выяснил что (даже используя опцию -Я не буду работать).

Я показываю ниже более подробную информацию:

-Скрипт скрипта на Моните ----

check program runMediaHandler with path "/usr/bin/runMediaHandler.sh"
 if status == 1 then alert

-run MediaHandler.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 - я запускаю runMediaHandler)

Заранее спасибо,

Thaís

4 ответа

Большое спасибо за ваши усилия, помогающие мне! В конце я попробовал несколько шагов, которые заставили мою программу работать

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

Возможно monit нет вашего установочного каталога Java в его $PATH,

Не зная точно, как работает ваша программа, я бы предположил, что это проблема с разрешениями. Monit запускает скрипт как root, а не как локальный пользователь. Чтобы увидеть, является ли это корнем проблемы, попробуйте изменить скрипт для запуска как myuser (при необходимости измените свое локальное имя пользователя):

#!/bin/bash
su -c "java -jar /home/thais/Desktop/MediaHandler_RC2.jar" myuser

Согласно его веб-странице, Feh является приложением X11, что означает, что оно отображается на X-сервере. Как правило, X-серверы имеют два метода предоставления доступа к дисплею: ​​один называется XAuth, который использует файл токена (называемый .Xauthority) помещается в домашний каталог пользователя, который в данный момент использует дисплей (запустив startx или войдите в диспетчер отображения, как xdm или же kdm) и менее безопасная система контроля доступа на основе хоста.

Если ваша программа работает от имени пользователя root, то если вы установите HOME Переменная окружения в каталог пользователя, который в данный момент вошел на дисплей, ваша программа будет считывать токен.Xauthority из их домашнего каталога и сможет отображаться на экране.

В противном случае, чтобы включить более старую аутентификацию на основе хоста, вы можете запустить

xhost localhost

в xterm, чтобы позволить любой программе, запущенной любым пользователем на компьютере, использовать дисплей, пока дисплей не будет сброшен.

Другие вопросы по тегам