Я не системный инженер (я программист-разработчик). Мне нужно запустить Java-приложение (исполняемое.банкаfile) на машине Linux (Centos 7). Я подключаюсь к оболочке через SSH. Это приложение находится вбанкаформатирует и реализует пакетное приложение и содержит в себе его планировщик.
Мне приходится запускать его в фоновом режиме на удаленном сервере, чтобы после выхода из оболочки он все еще работал.
Я выполнил эту команду, чтобы запустить свое приложение в фоновом режиме:
java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar &
затем я нажал наCTRL+Cна клавиатуре, чтобы снова получить подсказку клавиатуры на моей оболочке.
и вот первое странное поведение: я снова получаю приглашение оболочки и возможность вставить команду, но если приложение что-то регистрирует, оно появляется в оболочке. Почему? Я ожидал, что мое приложение все еще будет работать в фоновом режиме.
В любом случае, теперь я запрашиваю эту команду в своей оболочке, чтобы проверить, запущено ли мое приложение:
[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23307 15.3 1.6 4871172 418980 pts/0 Sl 10:23 0:22 java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar
webadmin 23522 0.0 0.0 112812 980 pts/0 S+ 10:25 0:00 grep --color=auto java
И да, мое приложение, похоже, работает правильно (первое).
Затем я закрываю соединение с моей оболочкой, снова вхожу в нее и снова выполняю предыдущую команду, но теперь получаю следующее:
[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23919 0.0 0.0 112812 980 pts/0 S+ 10:27 0:00 grep --color=auto java
Как вы видите, после этого я отключаюсь от оболочки, и когда я делаю новый вход в систему, мое пакетное приложение, похоже, не запущено (и на самом деле мое приложение для работы не запущено).
Что не так? Что я упускаю? Какой может быть хороший способ запустить в фоновом режиме мое пакетное приложение java jar?
решение1
Перед завершением работы оболочки необходимо отключить фоновое задание от оболочки.
Когда вы ввели command &
, система выдала вам идентификатор задания, который выглядит как «[1] 25177», где 1
— идентификатор задания.
Теперь вам следует использовать команда disown. Для приведенного выше примера это будет:
disown 1
Или выполните все задания (потому что у вас только одно):
disown
Для получения более подробной информации см., например, Linux / Unix: команда disown.