環境
macOS:15.5
RockyLinux9.5でも動作確認済み。
前提
Dockerコンテナ起動時に実行するスクリプトで、SIGTERMに対応しないと停止時に約10秒待たされる。
コンテナを何度も起動・終了することを考えるとSIGTERMに対応した方が良いので、そのためにtrapの動作確認を行う。
コード (test.sh)
#!/bin/bash
cleanup() {
echo "cleanup start"
echo "signal = $1"
exit 0
}
for i in EXIT HUP INT QUIT PIPE TERM
do
trap "cleanup $i" "$i"
done
count=0
while true
do
count=`expr $count + 1`
echo -n "count = $count : "
if [ $count -eq 5 ]
then
echo "break"
break
fi
sleep 1
echo "sleeped"
done
動作確認
上記スクリプトを次のコマンドで実行し、終了するまでの間にCtrl + Cで強制終了すると動きがわかるはず。
(bashコマンドで実行すると新たにシェルを起動するのでプロセスも新たに作られるが、
sourceコマンドで実行すると実行中のシェルから起動されることは覚えておいた方が良い。)
bash test.sh
実行結果の例は次の通り。
count = 1 : sleeped
count = 2 : ^Ccleanup start
signal = INT
cleanup start
signal = EXIT