#!/bin/sh # rProxy init script for Entware (Keenetic) # Autostart/stop SSH tunnels on boot/shutdown ENABLED=yes PROCS="rproxy" DESC="rProxy reverse proxy tunnels" # Задержка перед первым запуском (секунды) # Даёт время остальным сервисам стартовать BOOT_DELAY=30 # Количество попыток и пауза между ними MAX_RETRIES=3 RETRY_DELAY=15 start() { echo "Starting $DESC..." # Задержка при старте — даём время сети и сервисам подняться echo " Ожидание $BOOT_DELAY сек (инициализация сети и сервисов)..." sleep $BOOT_DELAY # Первая попытка /opt/bin/rproxy start # Повторные попытки для сервисов, которые не смогли стартовать local attempt=1 while [ "$attempt" -le "$MAX_RETRIES" ]; do sleep $RETRY_DELAY # Проверяем, все ли сервисы запущены local total=0 running=0 for f in /opt/etc/rproxy/services/*.conf; do [ -f "$f" ] || continue . "$f" [ "$SVC_ENABLED" != "yes" ] && continue total=$((total + 1)) if pgrep -f "ssh.*$SVC_TUNNEL_PORT:$SVC_TARGET_HOST" >/dev/null 2>&1; then running=$((running + 1)) fi done # Если все сервисы запущены — выходим if [ "$running" -ge "$total" ] || [ "$total" -eq 0 ]; then echo " Все $total сервисов запущены." break fi echo " Попытка $attempt/$MAX_RETRIES: запущено $running/$total, перезапускаю отсутствующие..." /opt/bin/rproxy start attempt=$((attempt + 1)) done } stop() { echo "Stopping $DESC..." /opt/bin/rproxy stop } restart() { stop sleep 2 start } status() { /opt/bin/rproxy status } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0