이 명령을 사용하여 크론 작업에서 Java 프로세스를 시작했습니다.
이것은 내 크론 항목입니다.
* * * * * sh /tmp/runScript.sh
runScript.sh의 목적은 일부 논리를 적용하고 Java 프로세스를 시작하는 것입니다.
./runJavaProcess.sh >> java_process.out 2>&1
java_process.out 또는 Java 로그에 항목이 없으면 작업이 자동으로 종료됩니다. 나는 그 안에 아무것도 볼 수 없다.kern.log또는/var/log/메시지또는/var/log/메시지프로세스가 어떻게 종료되었는지와 관련이 있습니다.
프로세스가 정상적으로 시작되는 것을 볼 수 있지만 몇 분/시간 후에 프로세스가 종료된 이유나 방법에 대한 흔적도 없이 종료됩니다. 프로세스가 종료된 이유를 알아낼 수 있는 방법이 있습니까?
저는 CentOS Linux 릴리스 7.3.1611(Core)을 실행하고 있습니다.
답변1
이는 java_process.out
홈 디렉토리, 즉 에 존재할 수 있습니다 ~/java_process.out
. 스크립트에는 파일 이름만 있으며 cron
홈 디렉터리에서 실행됩니다. 경로를 추가하면 도움이 될 수 있습니다.
답변2
- 무슨 일이 일어났는지 알아보기 위해 확인하는
/var/log/cron
것이 아니라 확인해야 합니다 ./var/log/messages
실행 시 발생하는 결과를 얻으려면 crontab 항목을 아래와 같이 편집하는 것이 좋습니다.
* * * * * sh /tmp/runScript.sh 2>&1 /tmp/insight.log
스크립트를 실행하려면 일부 환경 변수가 필요할 수 있으며
runJavaProcess.sh
, 아래와 같이 crontab 줄(또는 스크립트)에서 해당 변수를 소싱하지 않으면 찾을 수 없습니다.* * * * * . $HOME/.bash_profile; sh /tmp/runScript.sh 2>&1 /tmp/insight.log
답변3
근본 원인을 찾았습니다. Java 프로세스에서 세그먼트화 오류가 발생했습니다. 오류 로그는 /root/ 디렉터리에 생성되었습니다.
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f11f1b980e5, pid=22395, tid=0x00007f11b39be700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_112-b15) (build 1.8.0_112-b15)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.112-b15 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# J 8563 C2 java.nio.DirectByteBuffer.getLong(I)J (16 bytes) @ 0x00007f11f1b980e5 [0x00007f11f1b980a0+0x45]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x00007f12023f72a0): JavaThread "BatchlogTasks:1" daemon [_thread_in_Java, id=23777, stack(0x00007f11b397e000,0x00007f11b39bf000)]
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x000000000fd68aae