メインコンテンツまでスキップ

再起動

再起動は3つあります — どれを使うかから​

同じ名前の restart.sh が2か所にあり、アプリだけを再起動する3つ目が別にあります。 「Tomcatだけ6秒」という言葉はどれにも該当しません。

何どこ対象かかる時間
ホスト再起動plantpulse-edge-docker/bin/restart.shコンテナ全体 — 残骸を整理してから再起動分単位
スタック再起動$PE_HOME/bin/restart.shゲートウェイ 全モジュール — stop.sh + start.sh を1プロセスとして~150~210秒
アプリのみ再起動$PE_HOME/bin/restart-app.shTomcat(アプリ)のみ。 Cassandra · HiveMQ · Node-RED はそのまま30~90秒

ほとんどの設定変更はアプリのみ再起動で十分です。DB・MQTT・Node-RED まで再起動 する必要があるもの(例: mqtt.enable トグル)だけがスタック再起動です。

アプリのみ再起動 (restart-app.sh)​

画面のアプリ再起動ボタンと POST /api/v1/system/restart が3秒後にこれを呼び出します。 直接実行することもできます。

$PE_HOME/bin/restart-app.sh
# 30~90초 후
curl -s http://127.0.0.1/api/v1/edge | jq
下のコンポーネントが死んでいるとアプリのみ再起動しても復活しません

スクリプトがまず Cassandra(9042)・Redis(6379)・MQTT(1883) を確認し、死んでいれば 警告を出力します。アプリだけを再起動してもブートストラップは結局失敗するからです(既知の制限)。

「再起動しても戻らない」で時間を無駄にしないように、その警告を先に読んでください — その 場合はスタック再起動か、そのコンポーネントを先に復旧させる必要があります。

コンテナモードでアプリのみ再起動してもコンテナが落ちない理由

コンテナの PID 1 監視プロセスは Tomcat プロセスが消えるとコンテナ全体を停止させます。 アプリのみ再起動すると Tomcat が30~90秒間消えるため、その監視に引っかかります。

そこで restart-app.sh は起動時に server/logs/.restart-in-progress マーカーを作成し、 「意図した再起動なので待て」と通知し、終了時に削除します。このスクリプトは Tomcat ツリーから 切り離されて(setsid)動作するため、Tomcat を停止させながらも自身は生き残ってマーカーを削除します。

スタック再起動 ($PE_HOME/bin/restart.sh)​

stop.sh と start.sh を1つのプロセス内で連続して実行します。

なぜ「1プロセス」なのか — 2026-07-02 事故

ssh "stop.sh; start.sh" でリモート実行中に SSH セッションだけが切断されると、次のどちらかになります — 停止したまま放置される(start が実行されない)、または、遅れて終了した反対側がすでに起動したスタックを再度 停止させる。

そこでこのスクリプトは stop の結果に関係なく必ず start に進み(停止したまま残るのが最悪のため)、 結果をマーカーファイルに記録して呼び出し元が完了を確認できるようにします。

リモートでは次のように呼び出します。

ssh 박스 "RESTART_RUN_ID=xyz nohup setsid $PE_HOME/bin/restart.sh >/dev/null 2>&1 </dev/null &"
# 그다음 /tmp/pp-restart-xyz.done 을 폴링한다 (내용이 start.sh 의 종료 코드)

起動はモジュールを順番に立ち上げ、モジュールごとに最大300秒の制限が設けられています (1つのモジュールが永遠に待って起動全体が停止するのを防ぎます)。最後に最大180秒間、 起動したかどうかを確認します。


ホスト再起動 (plantpulse-edge-docker/bin/restart.sh)​

ゲートウェイを安全に再起動します。残っている残骸を先に掃除することが systemctl restart との違いです。

sudo /opt/kopens/plantpulse-edge-docker/bin/restart.sh
systemctl restart だけでは名前衝突で失敗する可能性があります

古いコンテナが名前を保持したまま残っている、またはゾンビプロセスがあると、新しいコンテナが name already in use で起動できません。restart.sh はその残骸を先に整理してから サービスを起動します。

いつ再起動するか​

状況再起動が答えか
設定(app.properties・環境変数)を変更したはい — 設定は起動時に一度だけ読み込まれます
ドライバオプションを変更したいいえ — 接続単位で停止 → 開始すれば済みます
収集が止まったように見えるまず診断と点検 — 原因を把握せずに再起動すると証拠が消えます
イメージを新しく取得した再起動ではなくアップグレード

確認​

cd /opt/kopens/plantpulse-edge-docker/bin
./status.sh
./health.sh
./logs.sh -f # 부팅을 따라가며 본다

さらに学ぶ​