diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-01-19 00:19:29 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-01-19 00:19:29 +0000 |
commit | f8247040e6231c4b3b5099ea3a526348b7941566 (patch) | |
tree | 0cc92ad6ebf6ae49a62f6e7ef8ec819121d63630 /trunk/contrib/scripts/ast_grab_core | |
parent | d88e56c61ce2042544c1a8a71c93b69ab2e6ffba (diff) |
Creating tag for the release of asterisk-1.6.0-beta1v1.6.0-beta1
git-svn-id: http://svn.digium.com/svn/asterisk/tags/1.6.0-beta1@99163 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'trunk/contrib/scripts/ast_grab_core')
-rw-r--r-- | trunk/contrib/scripts/ast_grab_core | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/trunk/contrib/scripts/ast_grab_core b/trunk/contrib/scripts/ast_grab_core new file mode 100644 index 000000000..b2bd7b2ed --- /dev/null +++ b/trunk/contrib/scripts/ast_grab_core @@ -0,0 +1,70 @@ +#!/bin/sh +# $Id$ +# lame quickie script to snarf a core of a hung asterisk process. +# bugs to ast_grab_core, blinky-lights.org (derrick daugherty) + +# we have found that gcore doesn't yield as useful a core file +# as that yielded by a signal-caused core dump. So we are going to change +# the strategy to sending a SEGV signal to the asterisk process, +# and have it 'burn to the ground', leaving behind a core file. +# the main difference is that you cannot control where the +# core file will end up. We will assume that safe_asterisk was +# used to start asterisk, and the core file should therefore end +# up in /tmp (because safe_asterisk cd's there before starting asterisk). +# if this is not the case, set DUMPDIR to the place where the core +# file can be found. + +DATE=`date +%Y%m%d%H%M` +DUMPDIR=/tmp +HOSTNAME=`hostname` +ADMINEMAIL="root@localhost" + +#the following should be improved +if [ -e /etc/asterisk/asterisk.conf ]; then + RUNDIR=`awk -F"=>" '/astrundir/ {print $2}' /etc/asterisk/asterisk.conf` + PID=`cat ${RUNDIR}/asterisk.pid` +elif [ -e /var/run/asterisk.pid ] ; then + PID=`cat /var/run/asterisk.pid` +else + echo Could not find an asterisk.conf definition for astrundir, using \'ps\' + echo to try and determine process ID. This is not reliable. + PID=`ps auxwf|grep asterisk|grep vv|head -1|awk '{print $2}'` +fi + +echo Snarfing asterisk core, this could take a few seconds depending +echo on how much memory is in use. +echo +echo \*\*\* WARNING \*\*\* If the system is not already locked this will cause the +echo \*\*\* WARNING \*\*\* process to STOP while memory is dumped to disk. +echo + +/bin/kill -11 ${PID} + +echo Snarfed! ${DUMPDIR}/core.${PID} +echo + + +echo Trying for a backtrace of the captured core. +/usr/bin/gdb /usr/sbin/asterisk ${DUMPDIR}/core.${PID} > ${DUMPDIR}/gdb_dump.${PID}.txt 2> /dev/null << EOF +set prompt \n +set print pretty\n +echo --------------------------------------------------------------------------------\n +echo INFO THREAD +info thread +echo --------------------------------------------------------------------------------\n +echo THREAD APPLY ALL BT +thread apply all bt +echo --------------------------------------------------------------------------------\n +echo THREAD APPLY ALL BT FULL +thread apply all bt full +quit +EOF +echo Done trying for a bt. + + +echo Notifying admins of the core. +/usr/bin/mail -s "${HOSTNAME} core dumped at ${DUMPDIR}/core.${PID}" ${ADMINEMAIL} < ${DUMPDIR}/gdb_dump.${PID}.txt +echo Done. +echo +echo Reproducible deadlocks should be posted with a full backtrace and instructions +echo to reproduce the issue at http://bugs.digium.com/ Thanks! |