Назад | Перейти на главную страницу

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

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

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

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

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

-Фрагмент сценария на Моните ----

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

-runMediaHandler.sh ----

#!/bin/bash
java -jar /home/thais/Desktop/MediaHandler_RC2.jar

Резюмируя:

1.Что работает:

2. Что не работает:

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

Thaís

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

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 запускает сценарий как root, а не как ваш локальный пользователь. Чтобы узнать, является ли это корнем проблемы, попробуйте изменить свой сценарий, чтобы он запускался как myuser (при необходимости измените свое локальное имя пользователя):

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

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

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

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

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

xhost localhost

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