Я сделал простую «журнальную» программу, которая откроет графический интерфейс, запросит ввод и несколько факторов, и распечатает эту информацию в файл под текущей датой. Я написал небольшой кусочек 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
Вы не можете открыть программу на своем дисплее от крона. Любое задание, которое Вы хотите выполнить через крон, не должно требовать, чтобы любые сервисы зарегистрированного сеанса пользователя, включая допустимый дисплей поместили приложения для GUI в.
crontab может использовать другого пользователя, чем Вы. Когда Вы говорите
cd ~/path/to/file
, Вы направляете файл из своего собственного пользовательского каталога при помощи ~
. Необходимо использовать полный путь, который находится в случае:
cd /home/yourusername/path/to/file