从 cron 启动的作业被终止

从 cron 启动的作业被终止

我使用这个命令从 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

  1. 您应该检查一下/var/log/cron,而不是/var/log/messages了解发生了什么。
  2. 我建议您按如下方式编辑 crontab 条目,以便获取执行时发生的情况的输出。

    * * * * * sh /tmp/runScript.sh 2>&1 /tmp/insight.log
    
  3. 您的脚本可能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

相关内容