從 cron 開始的作業被殺死

從 cron 開始的作業被殺死

我使用這個命令從 cron 作業啟動了一個 java 進程

這是我的 cron 條目

* * * * * sh /tmp/runScript.sh

runScript.sh 的目的是應用一些邏輯並啟動 java 進程。

./runJavaProcess.sh >> java_process.out 2>&1

作業會自動終止,java_process.out 或 java 日誌中沒有任何條目。我看不到任何內容內核日誌或者/var/日誌/訊息或者/var/日誌/訊息與進程如何被殺死有關。

我可以看到該進程開始正常,但幾分鐘/小時後它就被殺死了,沒有任何跡象表明它為什麼或如何被殺死。有什麼方法可以找出進程被殺死的原因嗎?

我正在運行 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

相關內容