#!/bin/sh -e # Script to save core files, to be run from post_crash_dump_hook # Written by Markus Armbruster, 2008-2012 # This script is in the public domain. # Use: edit configuration variables below to taste, then set # post_crash_dump_hook = /wherever/savecore # in econfig. Make sure to run the server with core dumps enabled # (ulimit -c unlimited). # Rules when running as post_crash_dump_hook: # Data directory is working directory. # stdin, stdout, stderr are redirected to /dev/null, except in debug # mode # Configuration # How your system names core files # # This is a pattern rather than a name, because modern kernels can put # fancy stuff in the name we can't always predict. Modern user space # can squirrel away core dumps in fancy places; you may need to switch # that off for this insufficiently fancy script to work. core_pattern=core.* #core_pattern=emp_server.core #core_pattern=core # Where to save core dumps # # If you leave cores in the data directory, backup scripts may pick # them up, which is probably not what you want. core_dir=../core-dumps # Minimum free disk space for saving core dumps, in KiB space_low=102400 # Whom to send mail (leave empty to not send any) privlog= # Program to send mail mailx=mailx # End of configuration saved= core_name= alert_deity () { local msg if [ "$saved" ] then msg="Core dump $saved_core saved." elif [ "$core_name" ] then msg="Could not save core dump $core_name." else msg="Could not find core dump to save." fi echo "$msg" | $mailx -s "emp_server dumped core in $PWD" "$privlog" } test -n "$privlog" && trap 'alert_deity' EXIT core_name=`ls -td $core_pattern 2>/dev/null | head -n 1` test -n "$core_name" test -r "$core_name" tstamp=`/bin/date +%Y-%m-%d-%H:%M` saved_core=$core_dir/core-$tstamp mkdir -p $core_dir if [ `df -kP $core_dir | awk 'NR!=1 { print $4 }'` -lt "$space_low" ] then rm -f "$core_name"; exit fi mv -f "$core_name" $saved_core saved=y