再起動等の意味合いがあるシグナル
ただ、機能をちゃんと作らないと普通の停止シグナルと同じ
実際のところ
とりあえず使う
前回のスクリプトをベースにHUP(シグナル番号1)を捕まえる処理を書くとこんな感じに。
つかんだ処理を分かり易くするため、起動のあたまにechoを追加。
$ cat testExit.bash
#! /bin/bash
COUNT=0
function catchHup () {
printf " Got HUP SIG\n\n"
COUNT=0
}
trap "printf '\n\r`basename $0` is closing.'" EXIT
trap "printf '\n\r良夫ちゃんゴハンの時間ヨ\n'" 14
trap catchHup HUP
echo "wake up"
while true
do
COUNT=$((COUNT + 1))
printf "\r%07s%3d" "" $COUNT
sleep 1
doneこの状態で実行し四回"pkill -1 testExit"を投入したログはこんな感じに。
この処理では通常の処理と同様に頭から読み直すという意味ではない様子。
$ ./testExit.bash
wake up
5 Got HUP SIG
5 Got HUP SIG
2 Got HUP SIG
7 Got HUP SIG
6
再起動処理をしてみる
本命の再起動処理です。
basenameコマンドで自身の名前を確保し、(実行権限付加してあるので)そのまま立ち上げという流れ。
検証用に、ループ内でタイムアウト的にHUPシグナルを叩きこむ処理も追加してみました。
$ cat testExit.bash
#! /bin/bash
COUNT=0
function catchHup () {
printf " Got HUP SIG\n\n"
./$(basename $0) && exit
}
trap "printf '\n\r`basename $0` is closing.'" EXIT
trap "printf '\n\r良夫ちゃんゴハンの時間ヨ\n'" 14
trap catchHup HUP
echo "wake up `basename $0`"
while true
do
COUNT=$((COUNT + 1))
printf "\r%07s%3d" "" $COUNT
sleep 1
if [ $COUNT -gt 10 ] ; then
pkill -1 $(basename $0)
fi
done最初はタイムアウトで、その次に2回HUPを叩きこんだ処理結果がこちら
./testExit.bash
wake up testExit.bash
11 Got HUP SIG
wake up testExit.bash
4 Got HUP SIG
wake up testExit.bash
4 Got HUP SIG
wake up testExit.bash
...