Files
bytetrack-counter/install-services.sh
T
2026-06-25 18:47:34 +07:00

69 lines
2.2 KiB
Bash

#!/usr/bin/env bash
# Install edge Jetson counter + dashboard; disable legacy MQTT frigate-counter.
# Run on the Jetson: sudo ./install-services.sh
set -euo pipefail
INSTALL_DIR="${INSTALL_DIR:-/opt/jetson-counter}"
VENV_DIR="${VENV_DIR:-/opt/jetson-counter/venv}"
SERVICE_USER="${SERVICE_USER:-jetson}"
if [[ "$(id -u)" -ne 0 ]]; then
echo "Run as root: sudo ./install-services.sh"
exit 1
fi
if [[ ! -f "${INSTALL_DIR}/.env" ]]; then
echo "Missing ${INSTALL_DIR}/.env"
echo " cp ${INSTALL_DIR}/config.env.example ${INSTALL_DIR}/.env && nano ${INSTALL_DIR}/.env"
exit 1
fi
if [[ ! -x "${VENV_DIR}/bin/python" ]]; then
echo "Missing venv: ${VENV_DIR}/bin/python"
echo " sudo ./setup-venv.sh"
exit 1
fi
sed -i 's/\r$//' "${INSTALL_DIR}/.env" 2>/dev/null || true
mkdir -p "${INSTALL_DIR}/.ultralytics" "${INSTALL_DIR}/.torch"
chown -R "${SERVICE_USER}:${SERVICE_USER}" "${INSTALL_DIR}"
# Disable legacy MQTT counter (replace mode)
for legacy in frigate-counter frigate-counter-dashboard; do
if systemctl is-enabled "${legacy}" &>/dev/null; then
systemctl disable --now "${legacy}" || true
echo "Disabled legacy ${legacy}"
fi
done
for unit in jetson-counter jetson-counter-dashboard; do
sed -e "s|/opt/jetson-counter|${INSTALL_DIR}|g" \
-e "s|User=jetson|User=${SERVICE_USER}|g" \
-e "s|Group=jetson|Group=${SERVICE_USER}|g" \
"${INSTALL_DIR}/${unit}.service" > "/etc/systemd/system/${unit}.service"
echo "Installed /etc/systemd/system/${unit}.service"
done
chown -R "${SERVICE_USER}:${SERVICE_USER}" "${INSTALL_DIR}"
PYTHONNOUSERSITE=1 "${VENV_DIR}/bin/python" -c "
from ultralytics import YOLO
import torch
print('import ok | cuda', torch.cuda.is_available())
" || {
echo "Import check failed — fix venv before starting services."
exit 1
}
systemctl daemon-reload
systemctl reset-failed jetson-counter jetson-counter-dashboard 2>/dev/null || true
systemctl enable jetson-counter jetson-counter-dashboard
systemctl restart jetson-counter jetson-counter-dashboard
echo ""
systemctl --no-pager status jetson-counter jetson-counter-dashboard || true
echo ""
echo "Logs: sudo journalctl -u jetson-counter -f"
echo "Dashboard: http://$(hostname -I | awk '{print $1}'):5000"