Сценарий перезагрузки оболочки ubuntu jar

Мне нужно написать сценарий оболочки, который закрывает работающий .jar и снова открывает его в терминале. Я никогда не писал сценарий оболочки и не знаю, с чего начать.

Вот команда, которую я использую для запуска приложения в терминале.

java -jar '/home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar' --Terminal=true

Я использую Ubuntu 10.04 LTS.


person JustinY17    schedule 28.12.2010    source источник


Ответы (2)


Что вы делаете, «закрывая работающий .jar»? Вы работаете в системе Un*x, и, следовательно, "kill -9" гарантированно уничтожит процесс И освободит все ресурсы, которые использует процесс (или ваша система Un*x не соответствует требованиям). , но я ни разу не видел).

Итак, как только вы отправите kill -9, программа Java, все ее потоки, все будет выполнено. Ни крюка выключения, ничего. Это как если бы вы дернули шнур питания.

Будет ли "kill -9" приемлемым для вас способом убить работающую Java-программу? Будет ли программа Java аккуратно перезапущена после того, как она была «убита -9»? (Он должен нормально перезапуститься, но это не всегда так).

Если настоящее убийство подходит, и если вы знаете, что .jar всегда запускается с использованием этой командной строки, и если вы знаете, что пользователь должен запускать только один такой .jar, вы можете сделать что-то вроде этого:

#!/bin/bash

kill -9 $(ps aux | grep java | grep dbConvert2 | awk '{print $2}')
java -jar '/home/fdqadmin/NetBeansProjects/dbConvert2/dist/dbConvert2.jar' --Terminal=true

Вы также можете пойти в java-идиосинкразическую страну и использовать «умную» команду, такую ​​​​как «jps», но я бы предпочел остаться с мощными инструментами Un * x, большое спасибо :)

person SyntaxT3rr0r    schedule 28.12.2010
comment
Обратите внимание, что это не должно быть пуленепробиваемым для использования в жизненно важных системах. Это просто пример того, что можно сделать... - person SyntaxT3rr0r; 28.12.2010
comment
Эта система гарантирует, что более 200 сотрудников смогут работать, есть ли 100% верный метод? - person JustinY17; 28.12.2010
comment
@ JustinY17, SpoonBender пытается сказать, что это остановит ваш процесс, как камень, без предупреждения или чего-то еще. Я согласен с ним (кстати, +1) - лучше было бы как-то передать сообщение этой программе, чтобы она аккуратно закрылась. Имейте сценарий, который ждет, пока это произойдет, а затем перезапустите его. Вы можете рассмотреть что-то вроде monit или nagios, чтобы контролировать, выполняется ли этот процесс - если он будет убит, они перезапустят его. - person ; 28.12.2010
comment
@Ninefingers: (и OP) кстати, я думаю, что есть один из сигналов, который вы можете отправить с помощью sigkill, который правильно перехватывается программами Java и который вы можете использовать для чистого закрытия приложения. Так что, возможно, более продвинутый скрипт мог бы сначала отправить сигнал I'd-like-you-to-cleanly-shutdown, затем подождать несколько секунд, а затем отправить kill -9, если программа Java завершилась некорректно. Конечно, реальное решение для мониторинга, подобное предложенному вами, было бы лучше :) - person SyntaxT3rr0r; 29.12.2010

Я комментировал здесь раньше, но вот интересный документ от разработчиков по обработке сигналов Java, которые могут представлять интерес, если вы хотите продолжить этот метод.

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

person Community    schedule 29.12.2010