feat: add bds core, locale updates and safety fixes
This commit is contained in:
132
lib/services.sh
Normal file
132
lib/services.sh
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
SERVICE_NAME=""
|
||||
SERVICE_FILE=""
|
||||
SERVICE_CREATED="no"
|
||||
SERVICE_MODE_ACTIVE="none"
|
||||
|
||||
stop_service_if_running() {
|
||||
local service_name="${1:-${SERVICE_NAME:-${CORE}_minecraft}}"
|
||||
|
||||
if [[ "$INIT_SYSTEM" != "systemd" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "${DRY_RUN:-no}" == "yes" ]]; then
|
||||
info "[dry-run] systemctl stop ${service_name}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
emit_step "service_stop" "$service_name"
|
||||
systemctl stop "$service_name" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
create_service() {
|
||||
local core="$1"
|
||||
local dir="$2"
|
||||
local mode="$3"
|
||||
local start_script="$4"
|
||||
local start_script_escaped="$4"
|
||||
|
||||
start_script_escaped="${start_script_escaped//\\/\\\\}"
|
||||
start_script_escaped="${start_script_escaped//\"/\\\"}"
|
||||
start_script_escaped="${start_script_escaped//%/%%}"
|
||||
|
||||
SERVICE_NAME="${core}_minecraft"
|
||||
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
|
||||
|
||||
if [[ "$mode" == "none" || "$INIT_SYSTEM" != "systemd" ]]; then
|
||||
warn "$(t service_create_skipped "$mode" "$INIT_SYSTEM")"
|
||||
SERVICE_MODE_ACTIVE="none"
|
||||
return 0
|
||||
fi
|
||||
|
||||
emit_step "service_create" "$core:$mode"
|
||||
if [[ "$mode" == "tmux-systemd" ]]; then
|
||||
run_cmd bash -c "cat > '$SERVICE_FILE' <<EOF
|
||||
[Unit]
|
||||
Description=Minecraft ${core} server (tmux)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=${SERVER_USER}
|
||||
Group=${SERVER_USER}
|
||||
WorkingDirectory=${dir}
|
||||
ExecStart=/usr/bin/tmux new-session -d -s ${SERVICE_NAME} \"${start_script_escaped}\"
|
||||
ExecStop=/usr/bin/tmux send-keys -t ${SERVICE_NAME} 'stop' C-m
|
||||
ExecStopPost=/bin/sleep 8
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF"
|
||||
elif [[ "$mode" == "screen" ]]; then
|
||||
run_cmd bash -c "cat > '$SERVICE_FILE' <<EOF
|
||||
[Unit]
|
||||
Description=Minecraft ${core} server (screen)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=${SERVER_USER}
|
||||
Group=${SERVER_USER}
|
||||
WorkingDirectory=${dir}
|
||||
ExecStart=/usr/bin/screen -dmS ${SERVICE_NAME} \"${start_script_escaped}\"
|
||||
ExecStop=/usr/bin/screen -S ${SERVICE_NAME} -X quit
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF"
|
||||
else
|
||||
run_cmd bash -c "cat > '$SERVICE_FILE' <<EOF
|
||||
[Unit]
|
||||
Description=Minecraft ${core} server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=${SERVER_USER}
|
||||
Group=${SERVER_USER}
|
||||
WorkingDirectory=${dir}
|
||||
ExecStart="${start_script_escaped}"
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF"
|
||||
fi
|
||||
|
||||
SERVICE_CREATED="yes"
|
||||
SERVICE_MODE_ACTIVE="$mode"
|
||||
emit_step "service_reload_enable" "$SERVICE_NAME"
|
||||
run_cmd systemctl daemon-reload
|
||||
run_cmd systemctl enable "$SERVICE_NAME"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
if [[ "$SERVICE_MODE_ACTIVE" == "none" ]]; then
|
||||
info "$(t service_start_skipped "$SERVICE_MODE_ACTIVE")"
|
||||
return 0
|
||||
fi
|
||||
emit_step "service_start" "$SERVICE_NAME"
|
||||
run_cmd systemctl restart "$SERVICE_NAME"
|
||||
}
|
||||
|
||||
remove_service_if_exists() {
|
||||
if [[ "$SERVICE_CREATED" != "yes" ]]; then
|
||||
return 0
|
||||
fi
|
||||
if [[ -n "$SERVICE_NAME" ]]; then
|
||||
run_cmd systemctl stop "$SERVICE_NAME" || true
|
||||
run_cmd systemctl disable "$SERVICE_NAME" || true
|
||||
fi
|
||||
if [[ -n "${SERVICE_FILE}" && -f "$SERVICE_FILE" ]]; then
|
||||
run_cmd rm -f "$SERVICE_FILE"
|
||||
fi
|
||||
run_cmd systemctl daemon-reload || true
|
||||
}
|
||||
Reference in New Issue
Block a user