저는 시스템 엔지니어가 아닙니다(소프트웨어 개발자입니다). Java 애플리케이션(실행 가능한 애플리케이션)을 실행해야 합니다..항아리파일)을 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"과 같은 작업 ID를 제공합니다. 여기서 1
작업 ID는 다음과 같습니다.
이제 다음을 사용해야 합니다. 부인 명령. 위의 예에서는 다음과 같습니다.
disown 1
또는 모든 작업을 수행합니다(한 가지 작업만 수행하므로).
disown
자세한 내용은 예를 참조하세요. Linux/Unix: disown 명령.