| #!/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" |