#!/bin/ksh # # Send "post mortem data" (esp. core files) to multicore console F # Benefit is that the last version of the file is still on hdd if transmission should fail. # Additional benefit is that files are usually stored with identical filenames so that the archive is "self-cleaning" # # Files get transferred via HBFileUpload (extractable with HBFileExtract on host). # # external programs used: ksh, sleep, mkdir, mv, ls, echo, nice, cp # be sure to have these in path (should be /bin) # # more infos: stephan.knauss@harman.com, juergen.lorff@harman.com, sascha.morgenstern@harman.com, stefan.gaertner@harman.com # # 2011/05: New feature: Copy /var/dump to an attached USB stick (recursively). A directory "HBCoreUpload" has to be existent in root folder of USB device. # #set -x # *** CONFIG *** COREDIR_PREFIX=/var/dump INITIALWAIT=20 ARCHIVE=0 HBFILEUPLOAD_STARTED=0 # used for copying corefiles directly to an attached USB stick at startup USB_COREDIR="HBCoreUpload" LS_CMD="ls -d /mnt/umass*" CP="/bin/cp" CP_PARAMS="-c -r -s -f -V" SLOG="/dev/console" # *** SCRIPT *** echo "Starting $0..." > $SLOG export PATH=/bin # start additional tracing here if [[ ! -e /dev/srm ]] then echo "$0: Starting srm" > $SLOG /opt/sys/bin/srm fi # on -X aps=softrt_SYS /opt/sys/bin/thogs -a -t -z -c -d 1000 -l 0.5 >/hbsystem/multicore/navi/z 2>/hbsystem/multicore/navi/z & # on -X aps=softrt_SYS /bin/aps show -vv -l >/hbsystem/multicore/navi/z 2>/hbsystem/multicore/navi/z & sleep $INITIALWAIT # First try that command to check the return value TEMP=$($LS_CMD) > /dev/null 2>&1 # If command returns EOK, we check the contents of /mnt/umass* if [[ $? -eq 0 ]] then echo "$0: Found a USB device" > $SLOG for MY_LINE in $($LS_CMD) do echo "$0: Checking $MY_LINE" > $SLOG DESTPATH="$MY_LINE/$USB_COREDIR" if [[ -e $DESTPATH ]] then echo "$0: Copy $COREDIR_PREFIX to $DESTPATH" > $SLOG 2>&1 FILESPEC="$COREDIR_PREFIX/*" $CP $CP_PARAMS $FILESPEC $DESTPATH > $SLOG 2>&1 fi done fi sleep $INITIALWAIT # In some rare cases the system was up and running, but HBFileUpload never connected to multicored. In those cases we now do retries. # Additionally we set again a delay of 20ms between packets in order to not overload the multicored buffer. while [[ $(pidin -p HBFileUpload -fa | grep -E [0-9]+) == "" || $HBFILEUPLOAD_STARTED -eq 0 ]]; do echo "$0: Starting HBFileUpload..." > $SLOG # even if starting in background is not needed, we still do it to get the PID much much easier. Otherwise we would have to call pidin again... /opt/sys/bin/HBFileUpload -v -D ${COREDIR_PREFIX} -r -i 5000 -d 20 > /dev/console 2>&1 & HBFILEUPLOADPID=$! echo "$0: HBFileUpload has PID $HBFILEUPLOADPID" > $SLOG sleep $INITIALWAIT ls /proc/$HBFILEUPLOADPID > /dev/null 2>&1 if [[ $? -eq 0 ]]; then HBFILEUPLOAD_STARTED=1 echo "$0: HBFileUpload seems to be running. Finished." > $SLOG break fi echo "$0: HBFileUpload failed to start -> retrying..." > $SLOG done echo "Stopping $0..." > $SLOG exit 0