Index: safe_asterisk =================================================================== --- safe_asterisk (revision 263768) +++ safe_asterisk (working copy) @@ -10,6 +10,7 @@ #SYSLOG=local0 # Which syslog facility to use (disabled if blank) MACHINE=`hostname` # To specify which machine has crashed when getting the mail DUMPDROP=/tmp +CREATE_BACKTRACE=1 # Create and email backtrace if GDB is available SLEEPSECS=4 ASTSBINDIR=__ASTERISK_SBIN_DIR__ ASTVARRUNDIR=__ASTERISK_VARRUN_DIR__ @@ -172,22 +173,12 @@ fi PID=`cat ${ASTPIDFILE}` - DATE=`date "+%Y-%m-%dT%H:%M:%S%z"` - if test -f /tmp/core.${PID} ; then - mv /tmp/core.${PID} ${DUMPDROP}/core.`hostname`-$DATE & - elif test -f /tmp/core ; then - mv /tmp/core ${DUMPDROP}/core.`hostname`-$DATE & - fi + process_coredump $PID & else message "Asterisk died with code $EXITSTATUS." PID=`cat ${ASTPIDFILE}` - DATE=`date "+%Y-%m-%dT%H:%M:%S%z"` - if test -f /tmp/core.${PID} ; then - mv /tmp/core.${PID} ${DUMPDROP}/core.`hostname`-$DATE & - elif test -f /tmp/core ; then - mv /tmp/core ${DUMPDROP}/core.`hostname`-$DATE & - fi + process_coredump $PID & fi message "Automatically restarting Asterisk." sleep $SLEEPSECS @@ -197,4 +188,54 @@ done } +process_coredump() +{ + local PID=$1 + local DATE=`date "+%Y-%m-%dT%H:%M:%S%z"` + local CORE=$DUMPDROP/core.$MACHINE-$DATE.$PID + local BACKTRACE=$DUMPDROP/bt.$MACHINE-$DATE.$PID.txt + + # Refcount debug log + if [ -f /tmp/refs ]; then + mv /tmp/refs $DUMPDROP/refs.$MACHINE-$DATE.$PID.txt + fi + + # Move core dump to DUMPDROP + if [ -f /tmp/core.$PID ]; then + mv /tmp/core.$PID $CORE + elif [ -f /tmp/core ]; then + mv /tmp/core $CORE + fi + + local GDB=`which gdb` + # Dump current backtrace + if [ "$GDB" != "" ] && [ "0$CREATE_BACKTRACE" -gt "0" ]; then + gdb $ASTSBINDIR/asterisk $CORE > $BACKTRACE 2> /dev/null <