#!/bin/bash
HAPROXY_PID=-1
# wait for 10 seconds, then send a USR1 signal to HAproxy
kill_haproxy(){
sleep 10
kill -USR1 $HAPROXY_PID
}
# invoke kill_haproxy function when receives the TERM signal
trap kill_haproxy SIGTERM
# Support the user hitting Ctrl-C, but only in interactive shells
if [[ -t 1 ]] ; then
trap 'kill -USR1 "$HAPROXY_PID"' SIGINT
fi
haproxy -f config.cfg & HAPROXY_PID=$!
if [ -z "$HAPROXY_PID" ]
then
echo "haproxy: Haproxy failed to start"
else
echo "haproxy: haproxy started"
fi
在 Dockerfile 就這樣用
FROM alpine:3.5
# install bash, tini and haproxy
RUN apk add --no-cache bash tini haproxy=2.0.14-r0
# Run tini
ENTRYPOINT ["/usr/local/bin/tini", "—"]
CMD ["/launcher.sh"]
一開始就切換到腳本的目錄,例如: cd "$(dirname "$0")" 我想這個應該是要確定腳本所要作用的目錄,所以加上註解,或是印出當前所在目錄,都對於後續維護的人會很有幫助。
用 shellcheck來檢查腳本
作者有提供一個範本,可以直接複製來修改:
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [[ "${TRACE-0}" == "1" ]]; then
set -o xtrace
fi
if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
echo 'Usage: ./script.sh arg-one arg-two
This is an awesome bash script to make your life better.
'
exit
fi
cd "$(dirname "$0")"
main() {
echo do awesome stuff
}
main "$@"