polardbxcdc/docker/admin/proc.sh

59 lines
1.7 KiB
Bash

# waitterm
# wait TERM/INT signal.
# see: http://veithen.github.io/2014/11/16/sigterm-propagation.html
waitterm() {
local PID
# any process to block
tail -f /dev/null &
PID="$!"
# setup trap, could do nothing, or just kill the blocker
trap "kill -TERM ${PID}" TERM INT
# wait for signal, ignore wait exit code
wait "${PID}" || true
# clear trap
trap - TERM INT
# wait blocker, ignore blocker exit code
wait "${PID}" 2>/dev/null || true
}
# waittermpid "${PIDFILE}".
# monitor process by pidfile && wait TERM/INT signal.
# if the process disappeared, return 1, means exit with ERROR.
# if TERM or INT signal received, return 0, means OK to exit.
waittermpid() {
local PIDFILE PID do_run error
PIDFILE="${1?}"
do_run=true
error=0
trap "do_run=false" TERM INT
while "${do_run}" ; do
PID="$(cat "${PIDFILE}")"
if ! ps -p "${PID}" >/dev/null 2>&1 ; then
do_run=false
error=1
else
sleep 1
fi
done
trap - TERM INT
return "${error}"
}
set_timezone() {
if [ -z "${APP_SET_TIMEZONE}" ] || [ "$APP_SET_TIMEZONE" == "_NOT_SET" ]; then
return 0
fi
use_timezone="$APP_SET_TIMEZONE"
timezone_path="/usr/share/zoneinfo/$use_timezone"
# check timezone file
if [ ! -f "$timezone_path" ]; then
echo "can not found file: $timezone_path"
exit 127
fi
# set timezone
time_now=`date "+%Y-%m-%d_%H-%M-%S"`
mv /etc/localtime "/etc/localtime.$time_now"
cp -f "$timezone_path" /etc/localtime
}