blob: bed509556fa085fa0dd38e5ea905398c1c74fd29 [file] [log] [blame]
#!/bin/bash
# Custom oom handler loosely based on
# https://github.com/apache/lucene-solr/blob/master/solr/bin/oom_solr.sh
# See solr-forgeground for how to configure OOM behaviour
if [[ -z "${SOLR_LOGS_DIR:-}" ]]; then
if [ -d /var/solr/logs ]; then
SOLR_LOGS_DIR=/var/solr/logs
elif [ -d /opt/solr/server/logs ]; then
SOLR_LOGS_DIR=/opt/solr/server/logs
else
echo "Cannot determine SOLR_LOGS_DIR!"
exit 1
fi
fi
SOLR_PID=$(pgrep -f start.jar)
if [[ -z "$SOLR_PID" ]]; then
echo "Couldn't find Solr process running!"
exit
fi
NOW=$(date +"%F_%H_%M_%S")
(
echo "Running OOM killer script for Solr process $SOLR_PID"
if [[ "$SOLR_PID" == 1 ]]; then
# under Docker, when running as pid 1, a SIGKILL is ignored,
# so use the default SIGTERM
kill "$SOLR_PID"
sleep 2
# if that hasn't worked, send SIGKILL
kill -SIGILL "$SOLR_PID"
else
# if we're running with `--init` or under tini or similar,
# follow the upstream behaviour
kill -9 "$SOLR_PID"
fi
) | tee "$SOLR_LOGS_DIR/solr_oom_killer-$SOLR_PORT-$NOW.log"