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, чтобы позволить любой программе, запущенной любым пользователем на компьютере, использовать дисплей, пока дисплей не будет сброшен.