Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

HUPシグナルをトリガーにしたスクリプトの再起動処理

再起動等の意味合いがあるシグナル
ただ、機能をちゃんと作らないと普通の停止シグナルと同じ

実際のところ

とりあえず使う

前回のスクリプトをベースに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
 ...