なぜ記事を書こうと思ったか
前回の記事のRails用のDockerfileを作成する際にentrypoint.shを指定していますが、今回そのentrypoint.shのコマンド及びコードの理解を備忘録として残すため。
entrypoint.shのコマンド説明
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
以下にコマンド及びコードの解説を致します。
-
set -e
[set]はシェルの設定を確認、変更するコマンドで[-e]によって、実行したコマンドが1つでもエラーになったら直ちにシェルを終了。
-
rm -f /app/tmp/pids/server.pid
"/app/tmp/pids/server.pid"が存在する場合は削除、存在しない場合は無視する。
-
exec "$@"
execコマンドはbashの組み込みコマンドでシェルを実行するコマンドで置き換えるコマンドにする。また、変数"$@"はシェルスクリプトの変数がすべて展開される変数。
何故server.pidを削除する必要があるのか
"server.pid"はサーバー起動時に生成されるものであり、生成されている場合、サーバーは起動状態にあると認識されます。サーバー終了後、"server.pid"が残存する恐れがあり、サーバーを再起動する場合に「サーバーは起動しています」というエラーが吐かれる場合があります。よって、明示的に残存した"server.pid"を削除する事で問題なくサーバーを起動する事ができるようになります。
最後に
最後まで読んで頂き有難うございました!
何か間違っている所や気になった事があれば、コメントいただけると嬉しいです。