forked from everyone-falls-asleep/socketing-socket-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.sh
More file actions
executable file
·149 lines (126 loc) · 2.69 KB
/
run.sh
File metadata and controls
executable file
·149 lines (126 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/sh
set -e
input_mode() {
printf "Input environment, p (= production) || d (= development) || l (= local): "
read -r ans
process_input_mode "$ans"
}
input_force_restart() {
printf "Force restart all? (y/N): "
read -r ans
set_force_restart "${ans:-n}"
}
process_input_mode() {
case "$1" in
p)
set_mode "production"
;;
d)
set_mode "dev"
;;
l)
set_mode "local"
;;
*)
echo "Invalid input. Please enter 'p', 'd', or 'l'."
exit 1
;;
esac
}
set_mode() {
MODE="$1"
}
set_force_restart() {
FORCE_RESTART="$1"
}
show_help() {
cat <<EOF
Usage: $(basename "$0") [OPTIONS]
Options:
-m, --mode MODE Set the mode (production, dev, local).
-f, --force-restart Force restart all processes.
--help Display this help and exit.
Examples:
$(basename "$0") -m production
$(basename "$0") --mode=dev --force-restart
EOF
}
run_interactive() {
input_mode
}
OPTIONS_SET=false
while [ $# -gt 0 ]; do
case "$1" in
-m | --mode)
OPTIONS_SET=true
if [ -n "$2" ]; then
set_mode "$2"
shift
else
echo "Option '$1' requires an argument."
exit 1
fi
;;
--mode=*)
OPTIONS_SET=true
set_mode "${1#*=}"
;;
-f | --force-restart)
OPTIONS_SET=true
set_force_restart "y"
;;
--help)
show_help
exit 0
;;
-*)
echo "$(basename "$0"): unrecognized option '$1'."
echo "Try '$(basename "$0") --help' for more information."
exit 1
;;
*)
# If other arguments are required, they are handled here.
;;
esac
shift
done
if [ "$OPTIONS_SET" = false ]; then
run_interactive
fi
if [ -z "$MODE" ]; then
echo "$(basename "$0"): '-m' or '--mode' option is required."
echo "Try '$(basename "$0") --help' for more information."
exit 1
fi
if [ "$OPTIONS_SET" = true ] && [ -z "$FORCE_RESTART" ]; then
FORCE_RESTART="n"
fi
# From here, write your application script below.
APP_NAME="socketing-socket-server"
cd "$(dirname "$0")" || exit
if ! command -v npm >/dev/null 2>&1; then
echo "Cannot run script: npm not installed."
exit 1
fi
npm i
if ! command -v pm2 >/dev/null 2>&1; then
npm i pm2 -g
fi
if pm2 describe "$APP_NAME" >/dev/null 2>&1; then
if [ -z "$FORCE_RESTART" ]; then
input_force_restart
fi
if [ "$FORCE_RESTART" = "y" ]; then
echo "Force restarting..."
pm2 delete $APP_NAME
pm2 start ecosystem.json --only $APP_NAME --env "$MODE"
else
echo "'$APP_NAME' is already running, reloading..."
pm2 reload ecosystem.json --only $APP_NAME --env "$MODE"
fi
else
echo "Starting for the first time..."
pm2 start ecosystem.json --only $APP_NAME --env "$MODE"
fi
pm2 reset $APP_NAME
echo "Successfully done."