Не могу заставить cron открыть программу на Java с графическим интерфейсом

Я сделал простую «журнальную» программу, которая откроет графический интерфейс, запросит ввод и несколько факторов, и распечатает эту информацию в файл под текущей датой. Я написал небольшой кусочек Java-кода, который делает это при запуске, и я хочу использовать cron, чтобы планировать его запуск каждый день.

Я также написал небольшой скрипт ("javashell.sh"), чтобы перейти в каталог, где у меня есть код Java, скомпилировать его и запустить программу Java. Его содержание таково:

#!/bin/bash

cd /home/otolithic/Desktop/projects;
javac Journal.java;
java Journal;

(Это так коротко, что кажется бессмысленным, но я подумал, что нужно будет легко запустить программу из cron; я совершенно новичок в Linux, поэтому дайте мне знать, если это странно это или нет)

Я положил его в usr / local / bin, чтобы я мог просто набрать «javashell.sh» в терминале, и приложение журнала не будет работать без проблем. Но когда я пытаюсь сделать cronjob из этой команды, я вижу в журналах, что она запускается, но ни один графический интерфейс не появляется, чтобы запросить запись в журнале, как это происходит, когда я просто запускаю javashell.sh вне cron.

Я пытался (через минуту / час / и т. Д.):

export DISPLAY=:0 && javashell.sh
DISPLAY=:0 javashell.sh
env DISPLAY=:0 javashell.sh
$DISPLAY=:0 && javashell.sh
cd ~/path/to/file && javac Journal.java && java Journal
env DISPLAY=:0 && cd ~/path/to/file && javac Journal.java && java Journal

безрезультатно.

Я проверил, что мой дисплей на самом деле: 0, так что проблема не в этом. Так почему же это не работает?

Редактировать: также пытался env DISPLAY=:0 && cd /home/otolithic/Desktop/projects && javac Journal.java && java Journal

0
задан 4 June 2016 в 05:36

2 ответа

Вы не можете открыть программу на своем дисплее от крона. Любое задание, которое Вы хотите выполнить через крон, не должно требовать, чтобы любые сервисы зарегистрированного сеанса пользователя, включая допустимый дисплей поместили приложения для GUI в.

0
ответ дан 4 June 2016 в 15:36

crontab может использовать другого пользователя, чем Вы. Когда Вы говорите

 cd ~/path/to/file

, Вы направляете файл из своего собственного пользовательского каталога при помощи ~. Необходимо использовать полный путь, который находится в случае:

cd /home/yourusername/path/to/file

-1
ответ дан 4 June 2016 в 15:36

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

Похожие вопросы: