You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.8 KiB
84 lines
1.8 KiB
|
2 months ago
|
#!/bin/sh
|
||
|
|
|
||
|
|
DAEMON=/usr/bin/tera-api
|
||
|
|
PIDFILE=/run/tera-api.pid
|
||
|
|
ENVFILE=/etc/tera/tera-api.env
|
||
|
|
RUN_AS=tera:tera
|
||
|
|
|
||
|
|
ensure_account() {
|
||
|
|
if ! grep -q '^tera:' /etc/group; then
|
||
|
|
addgroup -S tera || return 1
|
||
|
|
fi
|
||
|
|
if ! id tera >/dev/null 2>&1; then
|
||
|
|
adduser -S -D -H -s /bin/false -G tera tera || return 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
prepare_runtime() {
|
||
|
|
ensure_account || return 1
|
||
|
|
mkdir -p /run/tera-api /var/lib/tera-api /var/log/tera || return 1
|
||
|
|
chown tera:tera /run/tera-api || return 1
|
||
|
|
chown -R tera:tera /var/lib/tera-api /var/log/tera || return 1
|
||
|
|
chmod 0750 /run/tera-api /var/lib/tera-api /var/log/tera || return 1
|
||
|
|
}
|
||
|
|
|
||
|
|
load_environment() {
|
||
|
|
if [ -r "$ENVFILE" ]; then
|
||
|
|
set -a
|
||
|
|
. "$ENVFILE"
|
||
|
|
set +a
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
is_running() {
|
||
|
|
[ -r "$PIDFILE" ] || return 1
|
||
|
|
pid="$(cat "$PIDFILE" 2>/dev/null)"
|
||
|
|
[ -n "$pid" ] && kill -0 "$pid" 2>/dev/null
|
||
|
|
}
|
||
|
|
|
||
|
|
wait_for_socket() {
|
||
|
|
socket_path=$1
|
||
|
|
attempts=0
|
||
|
|
while [ "$attempts" -lt 30 ]; do
|
||
|
|
[ -S "$socket_path" ] && return 0
|
||
|
|
attempts=$((attempts + 1))
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
return 1
|
||
|
|
}
|
||
|
|
|
||
|
|
start_service() {
|
||
|
|
if is_running; then
|
||
|
|
echo "tera-api is already running"
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
rm -f "$PIDFILE"
|
||
|
|
[ -x "$DAEMON" ] || { echo "missing $DAEMON" >&2; return 1; }
|
||
|
|
prepare_runtime || return 1
|
||
|
|
load_environment
|
||
|
|
if [ -n "${TERA_API_LOG_SOCKET:-}" ]; then
|
||
|
|
wait_for_socket "$TERA_API_LOG_SOCKET" || {
|
||
|
|
echo "tera-api dependency socket is not ready: $TERA_API_LOG_SOCKET" >&2
|
||
|
|
return 1
|
||
|
|
}
|
||
|
|
fi
|
||
|
|
start-stop-daemon -S -q -b -m -p "$PIDFILE" -c "$RUN_AS" -x "$DAEMON"
|
||
|
|
}
|
||
|
|
|
||
|
|
stop_service() {
|
||
|
|
if ! is_running; then
|
||
|
|
rm -f "$PIDFILE"
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
start-stop-daemon -K -q -p "$PIDFILE" -x "$DAEMON"
|
||
|
|
rm -f "$PIDFILE"
|
||
|
|
}
|
||
|
|
|
||
|
|
case "$1" in
|
||
|
|
start) start_service ;;
|
||
|
|
stop) stop_service ;;
|
||
|
|
restart) stop_service && start_service ;;
|
||
|
|
status) is_running ;;
|
||
|
|
*) echo "Usage: $0 {start|stop|restart|status}" >&2; exit 1 ;;
|
||
|
|
esac
|