Merged revisions 70164 via svnmerge from
[asterisk/asterisk.git] / contrib / scripts / ast_grab_core
1 #!/bin/sh
2 # $Id$
3 # lame quickie script to snarf a core of a hung asterisk process.
4 # bugs to ast_grab_core, blinky-lights.org  (derrick daugherty)
5
6 DATE=`date +%Y%m%d%H%M`
7 DUMPDIR=/var/tmp
8 HOSTNAME=`hostname`
9 ADMINEMAIL="root@localhost"
10
11 #the following should be improved
12 if [ -e /etc/asterisk/asterisk.conf ]; then
13         RUNDIR=`awk -F"=>" '/astrundir/ {print $2}' /etc/asterisk/asterisk.conf`
14         PID=`cat ${RUNDIR}/asterisk.pid`
15 elif [ -e /var/run/asterisk.pid ] ; then 
16         PID=`cat /var/run/asterisk.pid`
17 else 
18         echo Could not find an asterisk.conf definition for astrundir,  using \'ps\'
19         echo to try and determine process ID.  This is not reliable.
20         PID=`ps auxwf|grep asterisk|grep vv|head -1|awk '{print $2}'`
21 fi
22
23 echo Snarfing asterisk core, this could take a few seconds depending
24 echo on how much memory is in use.
25 echo
26 echo \*\*\* WARNING \*\*\*  If the system is not already locked this will cause the 
27 echo \*\*\* WARNING \*\*\*  process to STOP while memory is dumped to disk.
28 echo
29
30 /usr/bin/gdb > /dev/null << EOF
31         attach ${PID}
32         gcore ${DUMPDIR}/asterisk_${DATE}.core.${PID}
33         detach
34         quit
35 EOF
36
37 echo Snarfed!  ${DUMPDIR}/asterisk_${DATE}.core.${PID}
38 echo
39
40
41 echo Trying for a backtrace of the captured core.
42 /usr/bin/gdb /usr/sbin/asterisk ${DUMPDIR}/asterisk_${DATE}.core.${PID} > ${DUMPDIR}/gdb_dump.${PID}.txt 2> /dev/null << EOF
43 set prompt \n
44 echo --------------------------------------------------------------------------------\n
45 echo INFO THREAD
46 info thread
47 echo --------------------------------------------------------------------------------\n
48 echo THREAD APPLY ALL BT
49 thread apply all bt
50 echo --------------------------------------------------------------------------------\n
51 echo THREAD APPLY ALL BT FULL
52 thread apply all bt full
53 quit
54 EOF
55 echo Done trying for a bt.
56
57
58 echo Notifying admins of the core.
59 /usr/bin/mail -s "${HOSTNAME} core dumped at ${DUMPDIR}/asterisk_${DATE}.core.${PID}" ${ADMINEMAIL} < /tmp/gdb_dump.${PID}
60 echo Done.
61 echo
62 echo Reproducible deadlocks should be posted with a full backtrace and instructions
63 echo to reproduce the issue at http://bugs.digium.com/    Thanks!