Linux как перезапустить java

Обновлено: 02.07.2024

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

Как я начинаю это, включив его в start up rc.местные скрипт сервера. Однако после запуска я не знаю, как получить к нему доступ, чтобы остановить его, и если я хочу установить обновление, поэтому я должен перезапустить сервер, чтобы перезапустить приложение.

на ПК с windows для этого типа приложений я мог бы создать службу windows, а затем я могу остановить и запустить ее, как я хочу. Есть ли что-то подобное в Linux box, чтобы при запуске этого приложения я мог остановить его и перезапустить без полного перезапуска сервера.

мое приложение называется WebServer.исполняемый. Он запускается при запуске сервера, включая его в мой rc.местные такие как:

Я написал здесь еще одну простую обертку:

вы можете следовать полный учебник для init.d здесь и для systemd (ubuntu 16+) здесь

Если вам нужен журнал вывода, замените 2

простым решением является создание скрипта start.sh это запускает Java через nohup, а затем сохраняет PID в файл:

тогда ваш сценарий остановки stop.sh прочитал бы PID из файла и убил бы приложение:

конечно, я опустил некоторые детали, например, проверить, существует ли процесс и удалить pid.txt Если вы закончили.

скрипт инициализации службы Linux хранятся в /etc/init.d . Вы можете копировать и настраивать /etc/init.d/skeleton файл, а затем вызов

возможно, не лучшее решение для dev-ops, но хорошо для общего использования сервера для вечеринки lan или аналогичного.

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

документооборот:

пуск экран: screen

запустить сервер: java -jar minecraft-server.jar

отключить нажатием: Ctl-a , d

прикрепления: screen -r

Другой альтернативой, которая также довольно популярна, является Java Service Wrapper. Это также довольно популярно в сообществе OSS.

ссыль приложение Spring Boot в качестве службы а также, я бы пошел на systemd версия, так как это самый простой, наименее подробный и лучше всего интегрирован в современные дистрибутивы (и даже не очень современные, такие как CentOS 7.икс.)

вот пример сценария оболочки (убедитесь, что вы заменили математическое имя на имя вашего приложения):

С приложение Spring Boot в качестве службы, Я могу порекомендовать Python-based supervisord приложение. См. этот вопрос переполнения стека для получения дополнительной информации. Это очень просто настроить.

Строго говоря, Java-программа не может перезапустить себя, поскольку для этого она должна убить JVM, в которой она запущена, а затем запустить ее снова, но как только JVM больше не работает (убита), никаких действий предпринимать нельзя.

Как запустить процесс Java в Linux?

Включение консоли Java для Linux или Solaris

Как перезапустить программу в Linux?

  1. Откройте командную строку.
  2. Введите ls /etc/init.d или ls /etc/rc.d/.
  3. Введите sudo systemctl restart service, где service - это имя службы.

Что такое команда перезагрузки Linux?

Как перезапустить Java в Windows?

Выберите Пуск -> Настройка -> Панель управления -> Административные службы. Когда отображается диалоговое окно «Административные службы», дважды щелкните значок «Службы», чтобы открыть диалоговое окно «Службы». Выберите «Синхронизация удостоверений для Windows», а затем выберите «Действие» -> «Пуск» (или «Остановить») в строке меню.

Как перезапустить файл jar?

  1. Создайте сценарий запуска и остановки вашего приложения. Поместите его в какой-нибудь каталог, в нашем примере это:…
  2. Создайте следующий скрипт (myscript) и поместите его в / etc / init. d. …
  3. Ставим скрипт для запуска с системой (с помощью SysV). Просто выполните следующую команду (как root): update-rc.d myscript defaults.

Как я могу увидеть все процессы Java в Linux?

Команды Linux для поиска времени выполнения процессов

  1. Шаг 1. Найдите идентификатор процесса с помощью команды ps. $ ps -ef | grep java.…
  2. Шаг 2: Найдите время выполнения или время начала процесса. Когда у вас есть PID, вы можете заглянуть в каталог proc для этого процесса и проверить дату создания, то есть когда процесс был запущен.

Как убить Java-процесс в Unix?

Вот команда полностью: ps -fC java. Вы также можете использовать pgrep для вывода списка всех java-процессов. pgrep -a java вернет PID и полную командную строку каждого java-процесса. Когда у вас есть PID команды, которую вы хотите убить, используйте kill с флагом -9 (SIGKILL) и PID java-процесса, который вы хотите убить.

Как узнать, работает ли Java в Linux?

Метод 1: проверьте версию Java в Linux

  1. Откройте окно терминала.
  2. Выполните следующую команду: java -version.
  3. Вывод должен отображать версию пакета Java, установленную в вашей системе. В приведенном ниже примере установлен OpenJDK версии 11.

Как перезапустить сервис Sudo?

  1. Linux обеспечивает детальный контроль над системными службами через systemd с помощью команды systemctl. …
  2. Чтобы проверить, активна служба или нет, выполните эту команду: sudo systemctl status apache2. …
  3. Чтобы остановить и перезапустить службу в Linux, используйте команду: sudo systemctl restart SERVICE_NAME.

Как перезапустить Systemctl?

Чтобы перезапустить работающую службу, вы можете использовать команду перезапуска: sudo systemctl restart application.

Что такое Systemctl в Linux?

systemctl используется для проверки и контроля состояния системы «systemd» и диспетчера служб. … Когда система загружается, первый созданный процесс, то есть процесс init с PID = 1, является системой systemd, которая запускает службы пользовательского пространства.

Перезагрузка и перезагрузка такие же?

Перезагрузка, перезагрузка, выключение и мягкий сброс означают одно и то же. … Перезагрузка / перезагрузка - это отдельный шаг, который включает в себя как выключение, так и включение чего-либо. Когда большинство устройств (например, компьютеры) отключаются, все программы также отключаются.

Сколько времени занимает перезагрузка Linux?

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

как перезапустить приложение Java AWT? У меня есть кнопка, к которой я приложил обработчик событий. Какой код следует использовать для перезапуска приложения?

конечно, можно перезапустить приложение Java.

следующий метод показывает способ перезапуска приложения Java:

в основном он делает следующее:

  1. найти исполняемый файл java (я использовал двоичный файл java здесь, но это зависит от ваших требований)
  2. найти приложение (банку в моем случае, используя MyClassInTheJar класс, чтобы найти само местоположение jar)
  3. создайте команду для перезапуска jar (в этом случае используется двоичный файл java)
  4. выполнить его! (и, таким образом, завершение текущего приложения и запуск его снова)

посвящается всем тем, кто говорит, что это невозможно.

эта программа собирает всю информацию, доступную для восстановления исходной командной строки. Затем он запускает его, и поскольку это та же самая команда, ваше приложение запускается во второй раз. Затем мы выходим из исходной программы, дочерняя программа остается запущенной (даже под Linux) и делает то же самое.

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

в принципе, вы не можете. По крайней мере, надежным способом.

чтобы перезапустить программу Java, необходимо перезапустить JVM. Чтобы перезапустить JVM, вам нужно

найти java пусковая установка, которая была использована. Вы можете попробовать с System.getProperty("java.home") но нет никакой гарантии, что это действительно укажет на пусковую установку, которая использовалась для запуска вашего приложения. (Возвращаемое значение может не указывать на JRE, используемый для запуска приложения или это может были отменены -Djava.home .)

вы, по-видимому, хотите соблюдать исходные настройки памяти и т. д. ( -Xmx , -Xms . ) поэтому вам нужно выяснить, какие настройки использовались для запуска первой JVM. Вы можете попробовать использовать ManagementFactory.getRuntimeMXBean().getInputArguments() но нет никакой гарантии, что это будет отражать используемые настройки. Это даже прописано в документация этого метода:

как правило, не все параметры командной строки для команда "java" передается на виртуальную машину Java. Таким образом, возвращаемые входные аргументы могут включать не все параметры командной строки.

если ваша программа считывает входные данные из Standard.in исходный stdin будет потерян при перезапуске.

многие из этих трюков и хаков не удастся, в присутствии SecurityManager .

С другой стороны: вам не нужно к.

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

многие приложения предназначены только для создания экземпляра в main-method:

используя этот шаблон, должно быть достаточно легко сделать что-то вроде:

и пусть launch() возвращает true, если и только если приложение было закрыто таким образом, что это нужно перезапустить.

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

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

в зависимости от того, как запускается приложение, вы можете запустите JVM в сценарии-оболочке, который содержит цикл do/while, который продолжается, пока JVM выходит с определенным кодом, тогда приложение AWT должно будет вызвать System.exit(RESTART_CODE) . Например, в скриптовом псевдокоде:

приложение AWT должно выйти из JVM с чем-то другим, чем RESTART_CODE на "нормальном" завершении, которое не требует перезапуска.

Eclipse обычно перезапускается после установки плагина. Они делают это с помощью обертки eclipse.exe (launcher app) для windows. Это приложение выполняет ядро eclipse runner jar, и если приложение eclipse java завершается с кодом перезапуска, eclipse.exe перезапускает верстак. Для перезапуска можно создать аналогичный бит собственного кода, сценарий оболочки или другую оболочку кода java.

Если вам действительно нужно перезапустить приложение, вы можете написать отдельное приложение, чтобы запустить его.

эта страница содержит множество различных примеров для различных сценариев:

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

проблема с некоторыми решениями заключается в том, что они создают единую командную строку. Это создает проблемы, когда некоторые параметры содержат пробелы, особенно java.домой.

например, в windows строка

может вернуть что-то вроде этого: C:\Program Files\Java\jre7\bin\java

этот строка должна быть завернута в кавычки или экранирована из-за пробела в Program Files . Не огромная проблема, но несколько раздражает и подвержена ошибкам, особенно в кросс-платформенных приложениях.

поэтому мое решение строит команду как массив команды:

Я сам исследовал этот вопрос, когда наткнулся на этот вопрос.

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

в основном, все сводится к файлу сценария Ant с одной задачей выполнения Java (см. здесь и здесь) вызывается из кода Java (см. здесь). Это Java-код, который может быть методом запуск, может быть частью приложения, которое необходимо перезапустить. Приложение должно иметь зависимость от библиотеки Ant Apache (jar).

всякий раз, когда приложение должно быть перезапущено, оно должно вызвать метод запуск и выйти из виртуальной машины. Задача Ant java должна иметь опции вилки и spawn значение true.

вот пример Ant script:

код запуск метод может выглядеть примерно так:

очень удобно, что один и тот же скрипт используется для начального запуска приложения, а также для перезапуска.

Windows

/мин запуск скрипта в свернутом окне

^& выход, чтобы закрыть окно cmd после завершения

пример сценария cmd может быть

сон 10 спать в течение 10 секунд

просто добавление информации, которой нет в других ответах.

если вы работаете в среде, которая обеспечивает procfs и поэтому /proc файловая система доступна (что означает, что это не портативное решение), вы можете прочитать Java /proc/self/cmdline чтобы перезапустить себя, вот так:

на системах с /proc/self/cmdline этот вероятно, это самый элегантный способ "перезапустить" текущий процесс Java С Java. Не задействован JNI, и не требуется угадывать пути и прочее.

многие системы UNIX, включая GNU / Linux (включая Android) в настоящее время имеют procfs однако на некоторых, таких как FreeBSD, он устарел и постепенно прекращается. Mac OS X исключение в том смысле, что он не имеет procfs. окна тоже не есть procfs. В Cygwin есть procfs но он невидим для Java, потому что он виден только для приложений, использующих DLL Cygwin вместо системных вызовов Windows, и Java не знает о Cygwin.

по умолчанию stdin / stdout / stderr (в Java называется System.in / System.out / System.err ) запущенного процесса установлены в труб которые позволяют текущему процессу общайтесь с недавно запущенным процессом. Если вы хотите перезапустить текущий процесс, это скорее всего, не то, что вы хотите. Вместо этого вы хотели бы этого stdin / stdout / stderr такие же, как у текущей виртуальной машины. Это называется унаследовала. Вы можете сделать это, позвонив inheritIO() вашего ProcessBuilder экземпляра.

частый случай использования restart() функция заключается в перезапуске приложения после обновление. Последний раз я пробовал это на Windows, это было проблематично. При перезаписи приложения .jar файл с новой версией, приложение начало плохо себя вести и давать исключения о

старый вопрос и все такое. Но это еще один способ, который дает некоторые преимущества.

в Windows вы можете попросить планировщик задач снова запустить приложение для вас. Это имеет преимущество ожидания определенного количества времени, прежде чем приложение будет перезапущено. Вы можете перейти в Диспетчер задач и удалить задачу, и она перестанет повторяться.

похож на Йоду'улучшение' ответ, но с дальнейшими улучшениями (как функциональными, читабельностью, так и тестируемостью). Теперь безопасно запускать и перезапускать столько раз, сколько указано в аргументах программы.

  • нет накопления JAVA_TOOL_OPTIONS параметры.
  • автоматически находит главный класс.
  • наследует текущий stdout / stderr.

V1.1 исправление: нулевой указатель, если JAVA_TOOL_OPTIONS не set

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

Строго говоря, Java-программа не может перезапустить себя, поскольку для этого она должна убить JVM, в которой она запущена, а затем запустить ее снова, но как только JVM больше не работает (убита), никаких действий предпринимать нельзя.

Как запустить процесс Java в Linux?

Включение консоли Java для Linux или Solaris

Как перезапустить программу в Linux?

  1. Откройте командную строку.
  2. Введите ls /etc/init.d или ls /etc/rc.d/.
  3. Введите sudo systemctl restart service, где service - это имя службы.

Что такое команда перезагрузки Linux?

Как перезапустить Java в Windows?

Выберите Пуск -> Настройка -> Панель управления -> Административные службы. Когда отображается диалоговое окно «Административные службы», дважды щелкните значок «Службы», чтобы открыть диалоговое окно «Службы». Выберите «Синхронизация удостоверений для Windows», а затем выберите «Действие» -> «Пуск» (или «Остановить») в строке меню.

Как перезапустить файл jar?

  1. Создайте сценарий запуска и остановки вашего приложения. Поместите его в какой-нибудь каталог, в нашем примере это:…
  2. Создайте следующий скрипт (myscript) и поместите его в / etc / init. d. …
  3. Ставим скрипт для запуска с системой (с помощью SysV). Просто выполните следующую команду (как root): update-rc.d myscript defaults.

Как я могу увидеть все процессы Java в Linux?

Команды Linux для поиска времени выполнения процессов

  1. Шаг 1. Найдите идентификатор процесса с помощью команды ps. $ ps -ef | grep java.…
  2. Шаг 2: Найдите время выполнения или время начала процесса. Когда у вас есть PID, вы можете заглянуть в каталог proc для этого процесса и проверить дату создания, то есть когда процесс был запущен.

Как убить Java-процесс в Unix?

Вот команда полностью: ps -fC java. Вы также можете использовать pgrep для вывода списка всех java-процессов. pgrep -a java вернет PID и полную командную строку каждого java-процесса. Когда у вас есть PID команды, которую вы хотите убить, используйте kill с флагом -9 (SIGKILL) и PID java-процесса, который вы хотите убить.

Как узнать, работает ли Java в Linux?

Метод 1: проверьте версию Java в Linux

  1. Откройте окно терминала.
  2. Выполните следующую команду: java -version.
  3. Вывод должен отображать версию пакета Java, установленную в вашей системе. В приведенном ниже примере установлен OpenJDK версии 11.

Как перезапустить сервис Sudo?

  1. Linux обеспечивает детальный контроль над системными службами через systemd с помощью команды systemctl. …
  2. Чтобы проверить, активна служба или нет, выполните эту команду: sudo systemctl status apache2. …
  3. Чтобы остановить и перезапустить службу в Linux, используйте команду: sudo systemctl restart SERVICE_NAME.

Как перезапустить Systemctl?

Чтобы перезапустить работающую службу, вы можете использовать команду перезапуска: sudo systemctl restart application.

Что такое Systemctl в Linux?

systemctl используется для проверки и контроля состояния системы «systemd» и диспетчера служб. … Когда система загружается, первый созданный процесс, то есть процесс init с PID = 1, является системой systemd, которая запускает службы пользовательского пространства.

Перезагрузка и перезагрузка такие же?

Перезагрузка, перезагрузка, выключение и мягкий сброс означают одно и то же. … Перезагрузка / перезагрузка - это отдельный шаг, который включает в себя как выключение, так и включение чего-либо. Когда большинство устройств (например, компьютеры) отключаются, все программы также отключаются.

Сколько времени занимает перезагрузка Linux?

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

Читайте также: