Current Path :
/
opt
/
ds_agent
/
Or
Select Your Path :
Upload File :
New :
File
Dir
//opt/ds_agent/ds_am.cleanup
#!/bin/bash bindir="/opt/ds_agent" confdir="/var/opt/ds_agent/am" function log_stack_trace_and_rm_core() { local ds_am_exec="$1" local enable_gdb_bt=0 # It takes too long to generate gdb backtrace local FIND_AND_SORT_CORE_FILES="find ${confdir} -name 'core.?*' -exec ls -1tc {} +" local CORE_MAX=4 local TAIL_LINE_START=$(( $CORE_MAX + 1 )) local TAIL_WITH_OFFSET="tail -n +$TAIL_LINE_START" local core_files_to_rm=$(eval $FIND_AND_SORT_CORE_FILES \ | $TAIL_WITH_OFFSET) for core in $core_files_to_rm ; do if [ ${enable_gdb_bt} -eq 1 -a ! -z "`which gdb 2> /dev/null`" ]; then # Create tmp text file for gdb output. local gdb_out_filename="${confdir}/gdb_bt.$(basename $ds_am_exec)-$(basename $core).txt" echo "Stack trace for '$core':" >$gdb_out_filename # Runs full backtrace for all threads. Retrieved from: # http://www.commandlinefu.com/commands/view/4039/print-stack-trace-of-a-core-file-without-needing-to-enter-gdb-interactively gdb --batch --quiet -ex "thread apply all bt full" -ex "quit" "$ds_am_exec" "$core" 2>&1 >>$gdb_out_filename fi rm -f "$core" done } function rm_bt() { local FIND_AND_SORT_BT_FILES="find ${confdir} -name 'bt.?*' -exec ls -1tc {} +" local BT_MAX=10 local TAIL_LINE_START=$(( $BT_MAX + 1 )) local TAIL_WITH_OFFSET="tail -n +$TAIL_LINE_START" local bt_files_to_rm=$(eval $FIND_AND_SORT_BT_FILES \ | $TAIL_WITH_OFFSET) for bt in $bt_files_to_rm ; do rm -f "$bt" done } function rm_gdb_bt() { local FIND_AND_SORT_GDB_BT_FILES="find ${confdir} -name 'gdb_bt.?*' -exec ls -1tc {} +" local GDB_BT_MAX=10 local TAIL_LINE_START=$(( $GDB_BT_MAX + 1 )) local TAIL_WITH_OFFSET="tail -n +$TAIL_LINE_START" local gdb_bt_files_to_rm=$(eval $FIND_AND_SORT_GDB_BT_FILES \ | $TAIL_WITH_OFFSET) for gdb_bt in $gdb_bt_files_to_rm ; do rm -f "$gdb_bt" done } log_stack_trace_and_rm_core ${bindir}/ds_am rm_bt rm_gdb_bt