Sicherung gegen mehrfachaufruf

This commit is contained in:
root
2026-01-28 12:38:44 +01:00
parent ce806fd38a
commit d1b4b926e4

View File

@@ -1,9 +1,17 @@
#!/bin/bash #!/bin/bash
# ============================================================================== # ==============================================================================
# ISPConfig Proxy Sync Script - Version 3.34 (Fix: Auto-Subdomain Support) # ISPConfig Proxy Sync Script - Version 3.35 (Safe Lock & Auto-Subdomain)
# ============================================================================== # ==============================================================================
LOCKFILE="/tmp/restart.syncproxy.lock"
# Sichern gegen Mehrfachstart
lockfile -r 0 "$LOCKFILE" || exit 1
# TRAP: Stellt sicher, dass das Lockfile bei JEDEM Beenden gelöscht wird
trap 'rm -f "$LOCKFILE"' EXIT
# --- KONFIGURATION --- # --- KONFIGURATION ---
CONF_FILE="/usr/local/bin/sync-ispconfig-proxy.conf" CONF_FILE="/usr/local/bin/sync-ispconfig-proxy.conf"
SERVER_LIST="/usr/local/bin/proxy_based_server.conf" SERVER_LIST="/usr/local/bin/proxy_based_server.conf"
@@ -44,11 +52,11 @@ write_nginx_config() {
local domain=$1 local domain=$1
local target_ip=$2 local target_ip=$2
local redirect_path=$3 local redirect_path=$3
local sub_type=$4 # Dies ist das Feld 'subdomain' aus ISPConfig local sub_type=$4 # Feld 'subdomain' aus ISPConfig
local cert_dir="/root/.acme.sh/${domain}_ecc" local cert_dir="/root/.acme.sh/${domain}_ecc"
local config_path="$NGINX_CONF_DIR/${domain}.conf" local config_path="$NGINX_CONF_DIR/${domain}.conf"
# s_names nur um www erweitern, wenn subdomain auf 'www' steht # Server-Namen nur um www erweitern, wenn subdomain auf 'www' steht
local s_names="$domain" local s_names="$domain"
[[ "$sub_type" == "www" ]] && s_names="$domain www.$domain" [[ "$sub_type" == "www" ]] && s_names="$domain www.$domain"
@@ -109,10 +117,13 @@ main() {
if [ -n "$TARGET_DOMAIN" ]; then if [ -n "$TARGET_DOMAIN" ]; then
global_filter="AND (wd.domain = '${TARGET_DOMAIN}' OR parent.domain = '${TARGET_DOMAIN}')" global_filter="AND (wd.domain = '${TARGET_DOMAIN}' OR parent.domain = '${TARGET_DOMAIN}')"
elif [ "$FORCE_ALL" = false ] && [ "$TEST_MODE" = false ]; then elif [ "$FORCE_ALL" = false ] && [ "$TEST_MODE" = false ]; then
# Nutzt dbidx für ISPConfig 3.3.0p3
local raw_ids=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -Bse "SELECT DISTINCT dbidx FROM sys_datalog WHERE dbtable = 'web_domain' AND datalog_id > $last_id;" 2>/dev/null) local raw_ids=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -Bse "SELECT DISTINCT dbidx FROM sys_datalog WHERE dbtable = 'web_domain' AND datalog_id > $last_id;" 2>/dev/null)
[ $? -ne 0 ] && { echo "FEHLER: SQL-Abfrage fehlgeschlagen." >&2; exit 1; } [ $? -ne 0 ] && { echo "FEHLER: SQL-Abfrage fehlgeschlagen." >&2; exit 1; }
local changed_ids=$(echo "$raw_ids" | grep -oE '[0-9]+') local changed_ids=$(echo "$raw_ids" | grep -oE '[0-9]+')
if [ -z "$changed_ids" ]; then exit 0; fi if [ -z "$changed_ids" ]; then exit 0; fi
global_filter="AND wd.domain_id IN ($(echo "$changed_ids" | paste -sd "," -))" global_filter="AND wd.domain_id IN ($(echo "$changed_ids" | paste -sd "," -))"
UPDATE_LAST_ID=true UPDATE_LAST_ID=true
else else
@@ -125,6 +136,7 @@ main() {
FROM web_domain wd JOIN server s ON wd.server_id = s.server_id LEFT JOIN web_domain parent ON wd.parent_domain_id = parent.domain_id FROM web_domain wd JOIN server s ON wd.server_id = s.server_id LEFT JOIN web_domain parent ON wd.parent_domain_id = parent.domain_id
WHERE TRIM(s.server_name) = TRIM('$CURRENT_SERVER') AND wd.type IN ('vhost', 'alias', 'vhostalias', 'subdomain', 'vhostsubdomain') $global_filter ORDER BY wd.domain_id ASC;" WHERE TRIM(s.server_name) = TRIM('$CURRENT_SERVER') AND wd.type IN ('vhost', 'alias', 'vhostalias', 'subdomain', 'vhostsubdomain') $global_filter ORDER BY wd.domain_id ASC;"
[ "$DEBUG_MODE" = true ] && echo "[DEBUG] Query: $sql_query"
local sql_result=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -N -B -e "$sql_query") local sql_result=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -N -B -e "$sql_query")
while read -r row; do while read -r row; do
@@ -146,7 +158,6 @@ main() {
local cert_dir="/root/.acme.sh/${domain}_ecc" local cert_dir="/root/.acme.sh/${domain}_ecc"
if [ ! -f "$cert_dir/fullchain.cer" ] || [ "$RENEW_CERT" = true ]; then if [ ! -f "$cert_dir/fullchain.cer" ] || [ "$RENEW_CERT" = true ]; then
# ACME Aufruf: Nur -d www hinzufügen, wenn sub_type == "www"
local acme_cmd="/root/.acme.sh/acme.sh --issue -d $domain" local acme_cmd="/root/.acme.sh/acme.sh --issue -d $domain"
[[ "$sub_type" == "www" ]] && acme_cmd="$acme_cmd -d www.$domain" [[ "$sub_type" == "www" ]] && acme_cmd="$acme_cmd -d www.$domain"
$acme_cmd -w /var/www/html --server letsencrypt --ecc --force $acme_cmd -w /var/www/html --server letsencrypt --ecc --force