81 lines
2.3 KiB
Bash
81 lines
2.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# AUTARCH Web Dashboard — install & start as systemd service
|
||
|
|
# Usage: bash start_web.sh [stop|restart|status]
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SERVICE="autarch-web"
|
||
|
|
SERVICE_SRC="$(dirname "$(readlink -f "$0")")/scripts/autarch-web.service"
|
||
|
|
SERVICE_DST="/etc/systemd/system/${SERVICE}.service"
|
||
|
|
|
||
|
|
RED='\033[0;31m'; GREEN='\033[0;32m'; CYAN='\033[0;36m'; RESET='\033[0m'
|
||
|
|
|
||
|
|
action="${1:-start}"
|
||
|
|
|
||
|
|
case "$action" in
|
||
|
|
stop)
|
||
|
|
sudo systemctl stop "$SERVICE" 2>/dev/null && echo -e "${GREEN}[+] Stopped${RESET}" || echo -e "${RED}[!] Not running${RESET}"
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
restart)
|
||
|
|
sudo systemctl restart "$SERVICE" && echo -e "${GREEN}[+] Restarted${RESET}"
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
status)
|
||
|
|
systemctl status "$SERVICE" --no-pager 2>/dev/null || echo -e "${RED}[!] Service not installed${RESET}"
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
start) ;; # fall through
|
||
|
|
*)
|
||
|
|
echo "Usage: $0 [start|stop|restart|status]"
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
# Install service file if missing or outdated
|
||
|
|
if [ ! -f "$SERVICE_DST" ] || ! diff -q "$SERVICE_SRC" "$SERVICE_DST" >/dev/null 2>&1; then
|
||
|
|
echo -e "${CYAN}[*] Installing systemd service...${RESET}"
|
||
|
|
sudo cp "$SERVICE_SRC" "$SERVICE_DST"
|
||
|
|
sudo systemctl daemon-reload
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Enable on boot
|
||
|
|
sudo systemctl enable "$SERVICE" --quiet 2>/dev/null
|
||
|
|
|
||
|
|
# Stop if already running (clean restart)
|
||
|
|
sudo systemctl stop "$SERVICE" 2>/dev/null || true
|
||
|
|
|
||
|
|
# Start
|
||
|
|
sudo systemctl start "$SERVICE"
|
||
|
|
|
||
|
|
sleep 1
|
||
|
|
if systemctl is-active --quiet "$SERVICE"; then
|
||
|
|
# Get configured port
|
||
|
|
PORT=$(python3 -c "
|
||
|
|
import sys; sys.path.insert(0, '$(dirname "$(readlink -f "$0")")')
|
||
|
|
from core.config import get_config
|
||
|
|
c = get_config()
|
||
|
|
print(c.get_int('web', 'port', fallback=8181))
|
||
|
|
" 2>/dev/null || echo 8181)
|
||
|
|
|
||
|
|
HTTPS=$(python3 -c "
|
||
|
|
import sys; sys.path.insert(0, '$(dirname "$(readlink -f "$0")")')
|
||
|
|
from core.config import get_config
|
||
|
|
c = get_config()
|
||
|
|
print(c.get('web', 'https', fallback='true'))
|
||
|
|
" 2>/dev/null || echo true)
|
||
|
|
|
||
|
|
if [ "$HTTPS" = "false" ]; then PROTO="http"; else PROTO="https"; fi
|
||
|
|
|
||
|
|
# Get LAN IP
|
||
|
|
IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
||
|
|
[ -z "$IP" ] && IP="localhost"
|
||
|
|
|
||
|
|
echo -e "${GREEN}[+] AUTARCH Web Dashboard running${RESET}"
|
||
|
|
echo -e " ${PROTO}://${IP}:${PORT}"
|
||
|
|
echo -e " Logs: journalctl -u ${SERVICE} -f"
|
||
|
|
else
|
||
|
|
echo -e "${RED}[X] Failed to start. Check: journalctl -u ${SERVICE} -e${RESET}"
|
||
|
|
exit 1
|
||
|
|
fi
|