我使用这个命令从 cron 作业启动了一个 Java 进程
这是我的 cron 条目
* * * * * sh /tmp/runScript.sh
runScript.sh 的目的是应用一些逻辑并启动一个 java 进程。
./runJavaProcess.sh >> java_process.out 2>&1
该作业被自动终止,java_process.out 或 java 日志中没有任何条目。我无法在内核日志或者/var/log/消息或者/var/log/消息与进程如何被终止有关。
我可以看到进程启动正常,但几分钟/几小时后它就被终止了,没有任何线索表明它为什么或如何被终止。有没有什么方法可以找出进程被终止的原因。
我正在运行 CentOS Linux 版本 7.3.1611(核心)。
答案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