create-entity-server 0.9.15 → 0.9.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/template/scripts/run.sh
CHANGED
|
@@ -799,7 +799,11 @@ if [ ! -f "$DATABASE_CONFIG" ]; then
|
|
|
799
799
|
exit 1
|
|
800
800
|
fi
|
|
801
801
|
|
|
802
|
-
|
|
802
|
+
# stop 은 바이너리가 없어도 동작해야 한다(포트/PID 기준으로 종료하므로).
|
|
803
|
+
# update-server.sh 가 업데이트 중 바이너리를 지운 상태에서 run.sh stop 을 호출하는
|
|
804
|
+
# 경우가 있어, 여기서 막으면 "바이너리 없음 → stop 실패 → 종료 못 함" 악순환이 된다.
|
|
805
|
+
# 나머지 모드(dev/start/restart/status)는 바이너리가 반드시 필요하다.
|
|
806
|
+
if [ "$MODE" != "stop" ] && [ ! -f "$SERVER_BIN" ]; then
|
|
803
807
|
if [ "$LANGUAGE" = "en" ]; then
|
|
804
808
|
echo "❌ entity-server binary not found (bin/entity-server or ./entity-server)"
|
|
805
809
|
echo " Run ./scripts/update-server.sh to download the latest binary."
|
|
@@ -812,6 +816,22 @@ fi
|
|
|
812
816
|
|
|
813
817
|
case "$MODE" in
|
|
814
818
|
dev|development)
|
|
819
|
+
# systemd 서비스로 등록된 환경에서는 dev 직접 실행을 막고 안내만 한다.
|
|
820
|
+
# (dev 는 설정을 development 로 바꾸고 포그라운드 실행하므로 systemd 운영과 충돌한다)
|
|
821
|
+
dev_svc=$(find_systemd_service || true)
|
|
822
|
+
if [ -n "$dev_svc" ]; then
|
|
823
|
+
if [ "$LANGUAGE" = "en" ]; then
|
|
824
|
+
echo "ℹ️ '$dev_svc' is registered as a systemd service; dev mode is disabled."
|
|
825
|
+
echo " Use: sudo systemctl start/stop/restart $dev_svc (or ./run.sh start|stop|restart)"
|
|
826
|
+
echo " To run dev mode, remove the service first: sudo ./scripts/service-remove.sh"
|
|
827
|
+
else
|
|
828
|
+
echo "ℹ️ '$dev_svc' 가 systemd 서비스로 등록되어 있어 dev 모드 실행을 막습니다."
|
|
829
|
+
echo " 사용: sudo systemctl start/stop/restart $dev_svc (또는 ./run.sh start|stop|restart)"
|
|
830
|
+
echo " dev 모드로 실행하려면 먼저 서비스를 제거하세요: sudo ./scripts/service-remove.sh"
|
|
831
|
+
fi
|
|
832
|
+
exit 0
|
|
833
|
+
fi
|
|
834
|
+
|
|
815
835
|
running_pid=$(find_active_server_pid || true)
|
|
816
836
|
if [ -n "$running_pid" ]; then
|
|
817
837
|
if [ "$LANGUAGE" = "en" ]; then
|
|
@@ -918,6 +938,13 @@ case "$MODE" in
|
|
|
918
938
|
;;
|
|
919
939
|
|
|
920
940
|
stop)
|
|
941
|
+
# 명시적 stop 은 부팅 자동시작도 끈다(disable). restart 는 이 경로를 타지 않으므로
|
|
942
|
+
# enable 상태가 유지된다. (start=enable 과 대칭)
|
|
943
|
+
stop_svc=$(find_systemd_service || true)
|
|
944
|
+
if [ -n "$stop_svc" ] && [ "$(systemctl is-enabled "$stop_svc" 2>/dev/null || true)" = "enabled" ]; then
|
|
945
|
+
echo "ℹ️ systemd 서비스 자동시작 해제(disable): $stop_svc"
|
|
946
|
+
sudo systemctl disable "$stop_svc" 2>/dev/null || true
|
|
947
|
+
fi
|
|
921
948
|
stop_server
|
|
922
949
|
;;
|
|
923
950
|
|
|
@@ -73,6 +73,19 @@ if [ "$EUID" -ne 0 ]; then
|
|
|
73
73
|
exit 1
|
|
74
74
|
fi
|
|
75
75
|
|
|
76
|
+
# 이미 등록되어 있는지 먼저 확인한다. 등록돼 있으면 기존 ExecStart 와 함께 안내하고
|
|
77
|
+
# 재등록(덮어쓰기)으로 진행한다. (경로 변경 등으로 재설치가 필요한 경우가 있으므로 막지 않는다)
|
|
78
|
+
if systemctl list-unit-files 2>/dev/null | grep -q "^${SERVICE_NAME}\.service" || [ -f "$UNIT_PATH" ]; then
|
|
79
|
+
existing_exec=$(systemctl show -p ExecStart --value "${SERVICE_NAME}.service" 2>/dev/null || true)
|
|
80
|
+
if [ "$LANGUAGE" = "en" ]; then
|
|
81
|
+
echo "ℹ️ Service '$SERVICE_NAME' is already registered. Re-installing (overwrite)."
|
|
82
|
+
[ -n "$existing_exec" ] && echo " current ExecStart: $existing_exec"
|
|
83
|
+
else
|
|
84
|
+
echo "ℹ️ '$SERVICE_NAME' 서비스가 이미 등록되어 있습니다. 재등록(덮어쓰기)합니다."
|
|
85
|
+
[ -n "$existing_exec" ] && echo " 현재 ExecStart: $existing_exec"
|
|
86
|
+
fi
|
|
87
|
+
fi
|
|
88
|
+
|
|
76
89
|
cat > "$UNIT_PATH" <<EOF
|
|
77
90
|
[Unit]
|
|
78
91
|
Description=Entity Server
|
|
@@ -32,9 +32,43 @@ _find_running_pid() {
|
|
|
32
32
|
pgrep -f "${PROJECT_ROOT}/(bin/)?entity-server( |$)" | head -n 1
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
_list_running_pids() {
|
|
36
|
+
local pid_file="$PROJECT_ROOT/.run/entity-server.pid"
|
|
37
|
+
|
|
38
|
+
{
|
|
39
|
+
if [ -f "$pid_file" ]; then
|
|
40
|
+
local pid
|
|
41
|
+
pid=$(cat "$pid_file" 2>/dev/null)
|
|
42
|
+
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
|
|
43
|
+
echo "$pid"
|
|
44
|
+
fi
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
pgrep -f "${PROJECT_ROOT}/(bin/)?entity-server( |$)" 2>/dev/null || true
|
|
48
|
+
} | awk 'NF { print }' | sort -u
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
_kill_pid() {
|
|
52
|
+
local pid="$1"
|
|
53
|
+
|
|
54
|
+
[ -n "$pid" ] || return 0
|
|
55
|
+
|
|
56
|
+
kill "$pid" 2>/dev/null || sudo -n kill "$pid" 2>/dev/null || true
|
|
57
|
+
|
|
58
|
+
for _ in $(seq 1 10); do
|
|
59
|
+
if ! kill -0 "$pid" 2>/dev/null; then
|
|
60
|
+
return 0
|
|
61
|
+
fi
|
|
62
|
+
sleep 0.1
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
kill -9 "$pid" 2>/dev/null || sudo -n kill -9 "$pid" 2>/dev/null || true
|
|
66
|
+
}
|
|
67
|
+
|
|
35
68
|
_ensure_server_stopped() {
|
|
36
|
-
local pid
|
|
37
|
-
|
|
69
|
+
local pid pids
|
|
70
|
+
pids="$(_list_running_pids)"
|
|
71
|
+
pid=$(echo "$pids" | head -n 1)
|
|
38
72
|
|
|
39
73
|
if [ -z "$pid" ]; then
|
|
40
74
|
return 0
|
|
@@ -55,7 +89,17 @@ _ensure_server_stopped() {
|
|
|
55
89
|
if [ -x "$PROJECT_ROOT/scripts/run.sh" ]; then
|
|
56
90
|
"$PROJECT_ROOT/scripts/run.sh" stop || true
|
|
57
91
|
else
|
|
58
|
-
|
|
92
|
+
_kill_pid "$pid"
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
pids="$(_list_running_pids)"
|
|
96
|
+
if [ -n "$pids" ]; then
|
|
97
|
+
while read -r pid; do
|
|
98
|
+
[ -n "$pid" ] || continue
|
|
99
|
+
_kill_pid "$pid"
|
|
100
|
+
done <<EOF
|
|
101
|
+
$pids
|
|
102
|
+
EOF
|
|
59
103
|
fi
|
|
60
104
|
|
|
61
105
|
sleep 0.2
|