재시작
재시작이 셋입니다 — 어느 것을 쓸지부터
같은 이름의 restart.sh 가 두 군데 있고, 앱만 다시 띄우는 세 번째가 따로 있습니다.
«Tomcat 만 6초» 라는 말은 어느 것에도 해당하지 않습니다.
| 무엇 | 어디 | 대상 | 걸리는 시간 |
|---|---|---|---|
| 호스트 재시작 | plantpulse-edge-docker/bin/restart.sh | 컨테이너 전체 — 찌꺼기 정리 후 재기동 | 분 단위 |
| 스택 재시작 | $PE_HOME/bin/restart.sh | 게이트웨이 전체 모듈 — stop.sh + start.sh 를 한 프로세스로 | ~150–210초 |
| 앱만 재시작 | $PE_HOME/bin/restart-app.sh | Tomcat(앱)만. 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 를 하나의 프로세스 안에서 이어 돌립니다.
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초의 제한이 걸려 있습니다 (한 모듈이 영영 기다려 부팅 전체가 멈추는 것을 막습니다). 마지막에 최대 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 # 부팅을 따라가며 본다