47 lines
1.1 KiB
Bash
Executable File
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"
|
|
|