mir3c/squashfs-root/usr/bin/coredump.sh

47 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
MAX_CORE_GZ_SIZE=4194304
pid="$1"
sig="$2"
prog="$3"
stat="$3""|""$2"
logger stat_points_none crash_app="$stat"
# skip coredump if same core already uploaded
[ -e /tmp/.core_history/"$prog"_"$sig" ] && exit 0
# print mem maps to log
echo "$prog crashed. print maps" >> /tmp/messages
cat /proc/"$pid"/maps >> /tmp/messages
channel=`/sbin/uci get /usr/share/xiaoqiang/xiaoqiang_version.version.CHANNEL`
[ "$channel" = "release" ] && exit 0
[ -e /tmp/skip_core ] && exit 0
#try core dump
tmpfree=`df | grep -w "/tmp" | awk '{print $4}'`
memfree=`free | grep Mem | awk '{print $4}'`
[ "$tmpfree" -lt "16384" -a "$memfree" -lt "32768" ] && {
logger -s -p 3 -t "coredump" "Memory low, skip dump."
exit 0
}
dfile="core."$prog"."$sig".gz"
/bin/gzip > /tmp/"$dfile"
dsize=`stat -c %s "$dfile"`
[ "$dsize" -gt "$MAX_CORE_GZ_SIZE" ] && {
logger -s -p 3 -t "coredump" "Core file too large ["$dsize" bytes], skip."
rm -f /tmp/"$dfile"
exit 0
}
/usr/sbin/mtd_crash_log -a /tmp/"$dfile"
rm -f /tmp/"$dfile"
mkdir -p /tmp/.core_history/
touch /tmp/.core_history/"$prog"_"$sig"