#!/bin/sh MINIDUMP_DUMP="/mnt/app/exec/minidump_dump" BACKTRACE_LOG_PATH="/mnt/log/system_server_files" MAX_BT_FILE_COUNT=7 [ -e "${BACKTRACE_LOG_PATH}/bt_index" ] && { v=$(cat ${BACKTRACE_LOG_PATH}/bt_index) index=$(($v+0)) # convert to num } || { index=0 for i in $(seq 0 $((MAX_BT_FILE_COUNT-1))); do [ ! -e "${BACKTRACE_LOG_PATH}/bt_file${i}.txt" ] && { index=$i break } done } dmp_files=$(ls $BACKTRACE_LOG_PATH/*.dmp) for dmp in $dmp_files; do [ "$index" -ge "$MAX_BT_FILE_COUNT" ] && index=0 crash_utc_date_time=$(${MINIDUMP_DUMP} "${dmp}" 2>&1 | grep MDRawHeader -A 6 | awk '/time_date_stamp/{print $4" "$5}') process_name=$(${MINIDUMP_DUMP} "${dmp}" 2>&1 | awk '{a[NR]=$0;if(a[NR-1]~/Stream MD_LINUX_CMD_LINE/){print $0}}' | sed 's?./??g;s?\\0??g') thread_name=$(${MINIDUMP_DUMP} "${dmp}" 2>&1 | awk '{a[NR]=$0;if(a[NR-1]~/Stream MD_LINUX_PROC_STATUS/){print $2}}') thread_id=$(${MINIDUMP_DUMP} "${dmp}" 2>&1 | awk '{a[NR]=$0;if(a[NR-1]~/MDException/){if(a[NR]~/thread_id/){printf("%d", $3)}}}') exception_code=$(${MINIDUMP_DUMP} "${dmp}" 2>&1 | awk '{a[NR]=$0;if(a[NR-2]~/MDException/){if(a[NR]~/exception_code/){printf("%d", $3)}}}') crash_reason=$(kill -l "$exception_code") rm "${BACKTRACE_LOG_PATH}/bt_file${index}.txt" 2>/dev/null echo "write ${BACKTRACE_LOG_PATH}/bt_file${index}.txt" { echo "{" echo " \"is_new\": true," echo " \"save_log\": true," echo " \"crash_signal\": \"$crash_reason\"," echo " \"process_name\": \"$process_name\"," echo " \"thread_id\": \"$thread_id\"," echo " \"thread_name\": \"$thread_name\"," echo " \"system_time_utc\": \"$crash_utc_date_time\"," echo " \"dmp_file\": \"$(basename "$dmp")\"" echo "}" } >> "${BACKTRACE_LOG_PATH}/bt_file${index}.txt" tar -czf ${BACKTRACE_LOG_PATH}/bt_file${index}.dmp.tgz -C ${BACKTRACE_LOG_PATH} "$(basename "$dmp")" && rm -v "${dmp}" index=$((index+1)) echo "$index" > ${BACKTRACE_LOG_PATH}/bt_index done