GSP-Agent-Linux/gsp_agent_run
2026-06-20 21:19:11 -05:00

60 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
AGENTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
AGENT="${AGENTDIR}/ogp_agent.pl"
PID_FILE=""
TIMEOUT=10
while [ "$#" -gt 0 ]; do
case "$1" in
-pidfile)
PID_FILE="${2:-}"
shift 2
;;
*)
shift
;;
esac
done
mkdir -p "${AGENTDIR}/logs" "${AGENTDIR}/screenlogs" "${AGENTDIR}/tmp" "${AGENTDIR}/_gsp_content/hooks" "${AGENTDIR}/_gsp_content/generated" "${AGENTDIR}/_gsp_content/runtime"
touch "${AGENTDIR}/_gsp_content/runtime/server_content.pids" 2>/dev/null || true
if [ "$(id -u)" -eq 0 ]; then
echo "ERROR: Do not run the GSP agent as root. Run it as the configured agent user." >&2
exit 1
fi
if [ ! -f "${AGENTDIR}/Cfg/Config.pm" ]; then
echo "ERROR: Missing ${AGENTDIR}/Cfg/Config.pm. Run ./agent_conf.sh --guided." >&2
exit 1
fi
if grep -Eq "CHANGE_ME_PANEL_AGENT_KEY|key[[:space:]]*=>[[:space:]]*''" "${AGENTDIR}/Cfg/Config.pm"; then
echo "ERROR: ${AGENTDIR}/Cfg/Config.pm still has a placeholder agent key." >&2
exit 1
fi
if [ ! -x "$AGENT" ]; then
chmod ug+x "$AGENT" 2>/dev/null || true
fi
if [ -n "$PID_FILE" ]; then
echo "$$" > "$PID_FILE"
fi
cd "$AGENTDIR"
while true; do
perl "$AGENT" "$@" || rc=$?
rc="${rc:-0}"
if [ "$rc" -eq 0 ]; then
echo "$(date): GSP Agent stopped cleanly"
exit 0
fi
echo "$(date): GSP Agent exited with status ${rc}; restarting in ${TIMEOUT}s" >&2
sleep "$TIMEOUT"
unset rc
done