#java
Вопрос:
У меня в файле crontab есть следующая строка : */ 8-21 * * * /usr/bin/xfce4-terminal --display=:0 -H --command="java -jar /full/path/to/myJarFile.jar"
это запускает файл jar каждые 10 минут между 8 и 22 часами и отлично работает.
В коде java (в myJarFile.jar) есть следующие строки :
String command = "/usr/bin/xfce4-terminal --display=:0 -H --command='java -jar /full/path/to/" which ".jar'";
String[] commandNArgs = new String[]{"/bin/sh", "-c", command};
Process p;
try {
p = Runtime.getRuntime().exec(commandNArgs);
} catch (Exception e) {
System.out.println("please restart");
}
Эти строки запускают несколько файлов jar, в зависимости от значения строки «which». Пока все хорошо.
Но затем java-код в myJarFile.jar подходит к концу, который закрывает только что запущенные «какие коды», хотя они должны все еще работать …
(Если я введу команду /usr/bin/xfce4-terminal --display=:0 --command="java -jar /full/path/to/myJarFile.jar"
вручную в терминал, все окна останутся открытыми, как и ожидалось.)
Надеюсь, кто-нибудь знает, почему они закрываются ?
Комментарии:
1. возможно, это не связано с проблемой, но почему вы запускаете свои команды с помощью
/usr/bin/xfce4-terminal
?2. Похоже, что вашим банкам нужен графический интерфейс и открытые окна (вместо безголовых). Вот почему ты отказываешься от этого
--display=:0
варианта, верно?3. @MarcoLucidi amp; hc_dev : единственная причина как для xfce4-терминала, так и для отображения=:0 заключается в том, чтобы иметь возможность немедленно видеть вывод строк System.out.println() в коде (чтобы быть уверенным, что все работает так, как должно). Никакой графический интерфейс вообще не нужен.
4. @Veronique Я настоятельно рекомендую вам использовать файл журнала для хранения (и просмотра) выходных данных, а также для избавления от обоих
/usr/bin/xfce4-terminal
и/bin/sh
.5. @Вероника хорошо, значит, у вас уже есть кое-какие настройки ведения журнала, хорошо! вы можете преобразовать свой
System.out.println()
s в »log.println()
» и запускать свои банки напрямую (как изcrontab
иmyJarFile.jar
), например:Runtime.getRuntime().exec(new String[] { "java", "-jar", "/full/path/to/" which ".jar" });
чем вы можете просматривать «текущие обновления» в файле журнала, например, с помощьюtail -f /path/to/log
.